2019/04/23
2020/04/14
ニューラルネットワークの重みの初期値について解説!
ニューラルネットワークでは重みを求めるために確率的勾配降下法やAdamといったアルゴリズムを用いていました。
これらのアルゴリズムは重みの更新を繰り返すことで最適な重みを求めます。この重みの更新を行うためにはあらかじめ重みの初期値を設定しなくてはなりません。この設定された重みの初期値によってニューラルネットワークの学習結果も変化するため、適切な初期値を設定する必要があります。
今回は重みの初期値がニューラルネットワークの学習にどのような影響を及ぼし、どのように設定すれば良いかについて説明します。
初期値の重要性
記事の冒頭で重みの初期値がニューラルネットワークの学習に影響を及ぼすと説明しました。ニューラルネットワークの学習には勾配法といったアルゴリズムを用いていました。
ではどのような影響を与えるのでしょうか。初期値はニューラルネットワークの学習速度に影響を及ぼします。
一般に重みの初期値のバラツキを大きくすぎても、小さすぎても学習速度は遅くなります。このことから適切な初期値を設定しないといけないことが分かります。
また初期値は「勾配消失」、「表現力の制限」といった問題を引き起こすことがあります。
この二つの問題がどのような問題かを説明します。
勾配消失
勾配消失とは誤差逆伝播法による勾配の値が0に近づくことで学習が進まなくなる現象を指します。勾配が0に近づくと重みの更新が局所地点で停滞してしまうため、十分な学習が行われなくなります。
この勾配消失という問題を避けるために適切な初期値を設定する必要があります。
表現力の制限
表現力の制限とは各層におけるノードの出力が偏ることで学習が進まなくなる現象を指します。隠れ層の各々のノードの出力の分布をアクティベーション分布と呼びます。アクティベーション分布が偏るということは複数のノードが同じ出力をしているということを意味します。
複数のノードが同じ出力を行っているなら、わざわざ多くのノードを用いる必要がありません。このようなニューラルネットワークは複数のノードが同じ働きをしているため、十分な表現力を持つことができません。
適切な初期値を設定することで表現力の制限を防ぐことができます。
初期値の設定手法
これまでは初期値を設定する重要性について説明してきました。
これからは初期値を設定するためにどのような初期値を用いればよいのかについて説明します。
ここではXivierとHeの二人が開発した初期値、それぞれについて説明します。これらの初期値を用いることでアクティベーション分布に偏りが生じにくくなります。アクティベーション分布が広く分布することで勾配消失や表現力の制限といった問題を回避することができます。
バイアスの初期値は0とします。
Xivierの初期値
Xaivierの初期値は様々なニューラルネットで用いられています。sigmoid関数やtanh関数を活性化関数として用いる時、このXavierの初期値を用いるとよいでしょう。
この初期値はノード数\( n \)に対して平均0、標準偏差\( \displaystyle \frac{ 1 }{ \sqrt{ n } } \)である正規分布から重みを設定します。
以下の図を参考に考えてみましょう。
入力層から2層に向かう重みをXaivierの初期値で設定してみましょう。入力層のノードの数は\( n \)であるため、平均0、標準偏差\( \displaystyle \frac{ 1 }{ \sqrt{ n } } \)である正規分布から重みをランダムに生成します。
2層から出力層に向かう重みも同様に平均0、標準偏差\( \displaystyle \frac{ 1 }{ \sqrt{ m } } \)である正規分布から生成します。
Heの初期値
Heの初期値はReLU関数を活性化関数とするときに用いるとよいでしょう。ReLU関数を活性化関数としたモデルにXavierの初期値を用いるとアクティベーション分布に偏りが生じやすくなることが知られています。
Heの初期値はノード数\( n \)に対して平均0、標準偏差\(\sqrt{ \displaystyle \frac{ 2 }{ n } } \)である正規分布から重みを設定します。
まとめ
今回はニューラルネットワークの初期値の役割について解説してきました。
ニューラルネットワークの活性化関数がReLU関数の時はHeの初期値を用いて、それ以外の時はXivierの初期値を用いるとよいでしょう。
初期値に対する依存性や学習速度といった課題を解決するためにBatch Normalizationなどのアルゴリズムが開発されています。
Recommended