External Memory

プログラミング周辺知識の備忘録メイン

ソフトマックス関数とシグモイド関数でのクロスエントロピー誤差関数について

Neural networks and deep learning

の前半辺りを読んだときソフトマックス関数の時のクロスエントロピーではどうなるか
気になったので、数式を少しいじって調べシグモイド関数の場合と比較した。


クロスエントロピー誤差関数はそれぞれの活性化関数によって異なる。
それぞれの誤差関数が異なる理由は扱いやすさのため。
逆伝播で利用するために微分すると式が簡単になるように
積分で逆算することで選ばれている。



以下の式において
xはそれぞれの入力データ、yは目指すべき答え正答を表す。
この場合のデータの総数はnとする。

また、
 z =\sum_{j}w_jx_j+b
zは重みを付けた入力データの和を表す。


シグモイド関数

 \displaystyle \sigma (z)=\frac{1}{1+e^{-z}}


シグモイド関数のクロスエントロピー誤差関数は以下で表される。

 \displaystyle C=-\frac{1}{n}\sum_{x}[y \ln{\sigma(x)}+(1-y)\ln{(1-\sigma(x))}]



シグモイド関数とクロスエントロピー誤差関数を組み合わせた関数の微分は上のURLから

 \displaystyle \frac{\partial C}{\partial w_j}=\frac{1}{n}\sum_{x}x_j(\sigma(z)-y)

 \displaystyle \frac{\partial C}{\partial b}=\frac{1}{n}\sum_{x}(\sigma(z)-y)



ソフトマックス関数

 \displaystyle s(z)=\frac{e^z}{\sum_{j}e^{z_j}}


ソフトマックス関数のクロスエントロピーの誤差関数は以下で表される。

 \displaystyle C=-\sum_{j}y\ln{s(x)}


ソフトマックス関数とクロスエントロピー誤差関数を組み合わせた関数の微分
少し計算して以下となった。
iの値で場合分けして

 \displaystyle \frac{\partial C}{\partial w_j}=\frac{1}{n}\sum_{x}y\,x_i\,(s(z)-1)\ \ (i=j)

 \displaystyle \frac{\partial C}{\partial w_j}=\frac{1}{n}\sum_{x}y\,x_i\,s(z)\ \ (i\neq j)


 \displaystyle \frac{\partial C}{\partial b}=\frac{1}{n}\sum_{x}y\,(s(z)-1)\ \ (i=j)

 \displaystyle \frac{\partial C}{\partial b}=\frac{1}{n}\sum_{x}y\,s(z)\ \ (i\neq j)


式を見比べるうえで注意すべきは、クロスエントロピーCは常に正であるということ、
また、Cがゼロに近づくほど誤差が小さいということである。


シグモイド関数の場合、誤差関数の偏微分 \sigma(z)-yの部分が重要である。

これは出力が答えに近ければ近いほど学習速度は遅くなり、
誤差が大きければ大きいほど学習速度は速くなることを示す。
yとの誤差の分布の調整をみているような感じだろう。


一方ソフトマックス関数の場合、誤差関数の偏微分
y\,x_i\,(s(z)-1)\ \ (i=j)

y\,x_i\,s(z)\ \ (i\neq j)
の部分が重要である。

シグモイド関数の場合は答えy基準の誤差であったが、
ソフトマックス関数の場合は「1」との差とyとの積である。

i=jの場合にyの値が大きい場合(jが正答)、
出力値が1との誤差が大きければ学習速度は速くなる。

逆に1に近ければ学習速度は遅くなる、つまり正答に近づくほど遅くなる。

i=j、i≠jで符号が変わるので、正答の場合とそうでない場合で
最適化時の重みw_jの動きが逆となりうまく調整されるように見える。


クロスエントロピーが二つの確率分布に関する尺度というのがわかりやすくなった。