Caffe : Tutorial : Forward と Backward

Caffe : Tutorial : Forward と Backward (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
日時 : 03/31/2017

* 本ページは、Caffe の本家サイトの Tutorial – Forward and Backward を翻訳した上で適宜、補足説明したものです:
    http://caffe.berkeleyvision.org/tutorial/forward_backward.html
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

本文

forward と backward パスは Net の本質的な計算です。

単純なロジスティック回帰分類器を考えてみましょう。

forward パスは推論のために入力が与えられると出力を計算します。forward では Caffe はモデルにより表現された “関数” を計算するために各層の計算を構成します。このパスは bottom から top へ進みます。

データ $x$ は $g(x)$ のための inner product 層を通り渡されてそれから $h(g(x))$ のための softmax と $f_W(x)$ を与えるための softmax 損失へと通り抜けます。

backward パスは学習のための損失が与えられた時に勾配を計算します。backward では Caffe はモデル全体の勾配を自動微分で計算するために各層の勾配を reverse-compose します。これが back-propagation です。このパスは top から bottom へと進みます。

backward パスは損失で始まり出力 $\frac{ \partial f_w}{\partial h}$ に関する勾配を計算します。モデルの残りに関する勾配は連鎖律を通して層毎に計算されます。INNER_PRODUCT 層のような、パラメータを持つ層はそれらのパラメータに関する勾配 $\frac{ \partial f_w}{\partial W_{ip}}$ を backward ステップで計算します。

これらの計算はモデルを定義することにより直ちに生じます : Caffe は forward と backward パスを貴方のために計画して実行します。

  • The Net::Forward() と Net::Backward() メソッドは、Layer::Forward() と Layer::Backward() が各ステップを計算する間にそれぞれのパスを実行します。
  • 全ての層タイプは、計算のモードに従ってそのステップを計算するための forward_{cpu,gpu}() と backward_{cpu,gpu}() メソッドを持ちます。層によっては制約または便宜上 CPU か GPU モードのみを実装しているかもしれません。

Solver は最初に出力と損失を生成するために forward を呼び出し、それからモデルの勾配を生成するために backward を呼び出し、そしてそれから勾配を、損失を最小化することを試みる重み更新へと組み込むことによりモデルを最適化します。Solver, Net そして層の間での仕事の分担は Caffe のモジュール性を保持し開発に対して Caffe をオープンにします。

Caffe の層タイプの forward と backward ステップの詳細については、layer catalogue を参照してください。

 

以上