CS231n 4.Backpropagation, Intuitions
連鎖率を使って多変数の合成関数のへ微分係数を計算する.Nielsenとはだいぶ違った書き方をしている. f(y1,...,yn) yi=yi(x1,...,xm) と書けてるとき(偏微分可能性とかは一旦おいて), ∂f∂xi=∑k∂f∂yk∂yk∂xi これが偏微分の連鎖率.
Compound expressions with chain rule
f=f1(f2(...(fn(x1,...,xm))...)
このような関数たち{fi}があって,偏微分可能とする.
y11,...,y1m1=f2(...(fn(x1,...,xm))...) とおくとき,
{∂f∂y1i}m1i=1 は数値的に計算できる.
y21,...,y2m2=f3(...(fn(x1,...,xm))...) とおくとき,
∂f∂y2i=∑k∂f∂y1k∂y1k∂y2i
∂f∂y1k は既知で,∂y1k∂y2i はf2 が簡単に偏微分できる関数であるなら,解析的に偏導関数をプログラマが予め与えて(次節),偏微分係数を計算する.
こうして,数値的な方法よりも高速に{∂f∂y2i}m2i=1を計算できる.
このように関数の後ろから変微分係数を計算していくのがbackpropagation.
Patterns in backward flow
neural networkの世界では,fj:Rn→Rm の出力は全て同一なことが多い.すなわち, fj0:Rn→R があって, fj=[fj0,fj0,...,fj0] と書ける.fj0 を単にfj と書く.neural network でよく使われるfj は次の3つ.
- 加算
fj=∑yj なら,∂yj−1i∂yjk=∂fj∂yjk=1 - 乗算
fj=∏{yji}i なら,∂yj−1i∂yjk=∂fj∂yjk=∏l≠kyjl - 最大値
fj=max{yji}i なら, ∂yj−1i∂yjk=∂fj∂yjk={1fj=yjk0otherwise
0 件のコメント:
コメントを投稿