2017年3月27日月曜日

CS231n 4. Backpropagation, Intuitions

Notebook

CS231n 4.Backpropagation, Intuitions

連鎖率を使って多変数の合成関数のへ微分係数を計算する.Nielsenとはだいぶ違った書き方をしている. $$ f(y_1, ..., y_n)$$ $$y_i = y_i(x_1, ..., x_m) $$ と書けてるとき(偏微分可能性とかは一旦おいて), $$ \frac{\partial f}{\partial x_i} = \sum_k \frac{\partial f}{\partial y_k} \frac{\partial y_k}{\partial x_i}$$ これが偏微分の連鎖率.

Compound expressions with chain rule

$$ f = f^{1}(f^{2}(...(f^{n}(x_1, ..., x_m))...)$$ このような関数たち$\{f_i\}$があって,偏微分可能とする.
$y^1_1, ..., y^1_{m1} = f^{2}(...(f^{n}(x_1, ..., x_{m}))...)$ とおくとき, $\{\frac{\partial f}{\partial y^1_i}\}^{m1}_{i=1}$ は数値的に計算できる.
$y^2_1, ..., y^2_{m2} = f^{3}(...(f^{n}(x_1, ..., x_{m}))...)$ とおくとき, $$ \frac{\partial f}{\partial y^{2}_i} = \sum_k \frac{\partial f}{\partial y^1_k}\frac{\partial y^1_k}{\partial y^2_i} $$ $\frac{\partial f}{\partial y^1_k}$ は既知で,$\frac{\partial y^1_k}{\partial y^2_i}$ は$f^2$ が簡単に偏微分できる関数であるなら,解析的に偏導関数をプログラマが予め与えて(次節),偏微分係数を計算する. こうして,数値的な方法よりも高速に$\{\frac{\partial f}{\partial y^2_i}\}^{m2}_{i=1}$を計算できる. このように関数の後ろから変微分係数を計算していくのがbackpropagation.

Patterns in backward flow

neural networkの世界では,$f^j : R^n \rightarrow R^m$ の出力は全て同一なことが多い.すなわち, $f^j _0 : R^n \rightarrow R $ があって, $f^j = [f^j_0, f^j_0, ..., f^j_0]$ と書ける.$f^j_0$ を単に$f^j$ と書く.neural network でよく使われる$f^j$ は次の3つ.

  1. 加算
    $f^j = \sum y^{j} $ なら,$\frac{\partial y^{j-1}_i}{\partial y^j_k} = \frac{\partial f^j}{\partial y^j_k} = 1$
  2. 乗算
    $f^j = \prod \{y^{j}_i\}_i $ なら,$\frac{\partial y^{j-1}_i}{\partial y^j_k} = \frac{\partial f^j}{\partial y^j_k} = \prod_{l \neq k} {y^j_l}$
  3. 最大値
    $f^j = max\{y^{j}_i\}_i $ なら, $\frac{\partial y^{j-1}_i}{\partial y^j_k} = \frac{\partial f^j}{\partial y^j_k} = \left\{ \begin{array}{l} 1 & f^j = y^j_k\\ 0 & otherwise \end{array} \right. $