活性化関数はどのタイミングで使うのが良いのか
結論:各層の間に入れること
シグモイド関数やReLUなどの活性化関数ですが、多層パーセプトロンを作る場合は、各層の間に挟む必要があります。挟まなくても多層パーセプトロンは構築可能で、動作もするのですが、多層の意味が無くなります。
例えば、下記ソースコードのmakeModel1関数とmakeModel2関数で作られるネットワークは違いますが、表現できるネットワークは同じで、どちらも1層のニューラルネットワークとなります。
これは、活性化関数が存在しないため、1層目の行列と2層目の行列の掛け算を先に行い、1つの行列として表現できるためです。活性化関数が間に挟まっていると、入力の値によって数値が異なるため、1つの行列にしても関数が残った状態となります。そのため、makeModel1関数は、例えば下記のように活性化関数を使いましょう。
Softmaxの有用性
結論:ニューロンの数を多くする時は、出来るだけSoftmaxを利用できるように工夫した方が良いケースがあります。
中間に存在するニューロン数が多ければ多いほど、多層パーセプトロンで表現できることも多くなります。しかし、ニューロン数が多くなればなるほど、最終的な出力の値も大きくなりやすくなります。その上、層も多くなると、爆発的な数値になっていきます。途中にシグモイド関数を挟むことでリセットすることもできますが、そうすると、その層の出力が常に1に近い数字に張り付いてしまうことがあります。
この時、Softmaxを利用すると、どんな出力が出ていても、合計が1になるように調整されるため張り付くようなことを気にする必要が無くなります。
0 件のコメント :
コメントを投稿