ニューラルネットワークおいて重みの初期値は非常に重要です。初期値によっては極小値で更新が止まってしまったり、勾配消失や勾配爆発が起きてしまいます。また適切な初期値にすることで学習が安定したり、学習の収束が速くなります。今回は初期パラメータの求め方について解説していきます。
まずは勾配消失や勾配爆発など学習の過程で発生する問題について説明します。
Contents
初期パラメータを適切にしないと起こる問題
勾配消失問題
勾配消失とは誤差逆伝播において徐々に勾配が小さくなり勾配がゼロに近づき重みの更新がほとんど行われなくなる問題です。
ニューラルネットワークの活性化関数の特徴として大きな入力に対しては勾配が小さくなるという特徴があります。下の画像のように大きな入力に対しては傾きが小さいことがわかると思います。
重みが大きすぎるとこのように活性化関数が飽和し勾配消失の原因となります。また重みが小さすぎる場合には、出力が小さくなり同様に勾配が小さくなってしまいます。このことから勾配消失を防ぐために重みの初期値を適切にする必要があることがわかります。
勾配爆発問題
勾配消失とは誤差逆伝播において徐々に勾配が大きくなり重みの更新が過度になり学習が安定しないという問題です。
勾配爆発は重みが大きすぎる場合に起こるため初期の重みを適切に設定することが重要です。
収束の遅延
重みが小さくすぎる場合、勾配が小さくなるため学習にかなりの時間がかかってしまいます。また場合によっては極小値から動けなくなり最適化が行えない場合もあります。
重みの初期値を決定する方法
上記のように重みは小さすぎたり大きすぎると上手く学習が行えないということがわかったと思います。ここでは適切な初期値を設定するために考えられた手法を紹介していきます。
Xavier法(Glorot法)
Xavier法はシグモイド関数のような線形に近い範囲を持つ関数を活性化関数とするモデルにおいてより良い初期値を選択するために考えられた手法です。TensorFlowで実装した場合デフォルトではこの手法が適用されています。初期の重みは以下のように設定されます。
は入力ノード数
は出力ノード数
は平均、分散 の正規分布を表します。
図のようにノード間の重みは入力層のノードと出力層のノードの和を利用して分散を定めることでスケールを調整しています。
このように分散を決める理由について、もう少し詳しく解説していきます。
学習を効率的に進めるためには、入力や出力の分散を適度な大きさにする必要があります。
分散が小さすぎると各ノードの値が同じようになり、勾配がうまく計算できません。
逆に分散が大きすぎる場合には、非常に大きな値と取るパラメーターなどが存在し、学習が不安定になります。このような理由からパラメーターの分散を安定させて学習を進めたいのです。
そこで、順伝播や逆伝播の過程で分散が変化しないように理論的に求められた初期のパラメーターの分散がXavier法というわけです。
さらに詳しく知りたい方はこちらをご覧ください。
Kaiming法(He法)
Kaiming法はReLU関数を活性化関数とするモデルにおいてより良い初期値を選択するために考えられた手法です。初期の重みは以下のように設定されます。
Kaiming法はReLU関数の特性を考慮してこのような式になっています。
以下はReLU関数を現した式です。
ReLU関数は0以下の場合には、値が0になることから、ReLU関数の前後で分散が半分になってしまします。このことからXavierとは異なり分散を2倍にしてやる必要があるわけです。
このようにすることで、Xavier法と同様に順伝播と逆伝播において分散が一定に保たれるわけです。
実際にやってみよう
実際に初期パラメーターとして、Xavier法とKaiming法を試してみましょう。
Xavier法
TensorflowはデフォルトでXavier法が使われています。この手法に合わせて活性化関数としてシグモイド関数を利用しています。シグモイド関数を使っているからか、やや安定感に欠ける気がします。活性化関数はやはりReLU関数のように勾配が小さくなりずらい関数のほうが良いですね。
Kaiming法
パラメーターの初期化手法としてXavier法を利用したものとKaiming法を利用したものを比較してみましょう。活性化関数としてReLU関数を利用します。
Kaiming法による初期パラメーターの場合のほうが学習がかなり安定していますね。Kaiming法はXavier法を改善した手法なので当然といえばそうなのですが、初期パラメーターの重要性が分かっていただけたかなと思います。
まとめ
今回は機械学習の初期パラメーターを決める手法について解説しました。この他にもfew-shot学習に適した初期パラメーターや転移学習など初期パラメーター決めるさまざまな手法があります。気になる方はぜひ調べてみてください。