誤差逆伝播法

提供:ペチラボ書庫
ナビゲーションに移動 検索に移動

あんまりよくわかってないのでわかりながらメモっています

誤差を小さくすること

とりあえず単純な線形変換だけを考えてみる。

[math]\displaystyle{ y = Wx }[/math]

こうして出てきた [math]\displaystyle{ y }[/math] に対して、誤差を計算する。 [math]\displaystyle{ L = L(y) }[/math]

[math]\displaystyle{ L }[/math] を小さくするための学習で、勾配を使った方法を用いるには、勾配を計算する必要がある。

[math]\displaystyle{ \frac{\partial L}{\partial W} }[/math]

↑重み更新のために直接欲しいのはこれなのであるが、[math]\displaystyle{ L }[/math][math]\displaystyle{ W }[/math]の関数として書かれていないため厳しそう。

一方、[math]\displaystyle{ L }[/math][math]\displaystyle{ y }[/math]の関数として書かれているため、

[math]\displaystyle{ \frac{\partial L}{\partial y} }[/math] これであれば計算できる。

[math]\displaystyle{ y = y(W) }[/math] であり([math]\displaystyle{ x }[/math]は定数)、チェインルールにより

[math]\displaystyle{ \frac{\partial L}{\partial W} = \frac{\partial L}{\partial y} \frac{\partial y}{\partial W} }[/math]

このような形で計算できるようになる

多層になった場合

[math]\displaystyle{ y = y_2(y_1(x)) }[/math], [math]\displaystyle{ y_2 = y_2(y_1; W_2) }[/math], [math]\displaystyle{ y_1 = y_1(x;W_1) }[/math]

2層になった場合を考える。 [math]\displaystyle{ L=L(y_2) }[/math] である。

まず出力に近い方の層では、

[math]\displaystyle{ \frac{\partial L}{\partial W_2} = \frac{\partial L}{\partial y_2} \frac{\partial y_2}{\partial W_2} }[/math]

もう一方の層では、

[math]\displaystyle{ \begin{eqnarray} \frac{\partial L}{\partial W_1} &=& \frac{\partial L}{\partial y_2} \frac{\partial y_2}{\partial W_1} \\ &=& \frac{\partial L}{\partial y_2} \frac{\partial y_2}{\partial y_1} \frac{\partial y_1}{\partial W_1} \end{eqnarray} }[/math]

チェインルールによって出力に近い方から計算していくのが誤差逆伝播法らしい(たぶん)

勾配消失

どこかでほぼ0になってしまうと、それより前の層での勾配もほぼ0になってしまい学習が進まなくなる