LoginSignup
17
12

More than 3 years have passed since last update.

Xavierの初期値とは?? 〜機械学習の用語まとめ〜

Posted at

重みの初期値の重要性

ニューラルネットワークの学習においては、Optimizerに従って重みが最適化される。その際、学習を始める前に重みの初期値を設定しなければいけない。

実は、重みの初期値はニューラルネットワークの精度に大きく関わってくる。
例えば、SGD(確率的勾配法)では、初期値の位置によっては極小値で停滞してしまい、最小値にたどり着くことができないことがある。
精度だけでなく、学習の速度にも大きく関わってくる。

重みの初期値によって発生する問題

では、重みの初期値はどのように設定すればいいのか?
重みの値が大きくなってしまうと、過学習が起きやすくなってしまうため、重みはできるだけ小さくしようと考える。ならば重みの初期値も小さくしようと考えるのは自然であろう。

では、重みの初期値を0にしたらどうだろう。
これは学習を悪化させてしまう。0にすることが問題というより、重みを均一することが問題なのである。
仮に全ての重みの初期値を0にして伝播させると、順伝播で同じ値が伝播してしまう。よって重みが同じように更新されてしまい、表現の幅が狭くなってしまう。

他にも発生する問題がいくつかある。

勾配消失

逆伝播の値が0に近いと重みの更新量が小さくなり、重みが停滞してしまい、学習が進まなくなってしまうことを指す。
この原因の一つが重みの初期値によるものである。
そのため、適切な初期値の設定が求められる。

表現力の制限

活性化関数のあとの出力データ(アクティべーション)が偏ってしまうと、ニューラルネットワークの表現の幅が狭くなってしまう。
アクティべーションが偏るということはつまり、各ニューロンの出力する値にあまり違いがでないということになってしまうので、複数のニューロンを持つ意味がなくなってしまう。
アノテーションがいろんな値をとることで、様々な表現が可能になるので、アノテーションが偏らない初期値設定が重要になってくる。

このように重みの初期値は学習の様々な問題に関わってくるため、重みの初期値の設定は、非常に重要であると言える。これらの問題を解決するのがXavierの初期値である。

Xavierの初期値

Xavierの初期値は、2010年にXavier氏などによって書かれた Understanding the difficulty of training deep feedforward neural networksにおいて提案された手法である。
Xavierの初期値は、各層のアクティベーションが同様の広がりの分布になるように、前層のノードがn個のとき、平均0,標準偏差$\frac{1}{\sqrt{n}}$である正規分布から初期値を生成する、というものである。

Xavierの初期値を用いることで、各層のアクティベーションが広がりを持った分布になり、先ほど述べた問題が発生しにくくなる。

Xavierの初期値は、主にシグモイド関数等を活性化関数として用いた時に効果を発揮する初期値である。

まとめ

ニューラルネットワークにおける重みの初期値は、学習の精度、速度に大きく影響する非常に重要な問題であり、勾配消失、アクティベーションの偏りなどが起こらないようにしなければいけない。
そこで提案されたのが「Xaiverの初期値」である。
Xavierの初期値によるアクティベーションは、広がった分布となり、高い表現力を有する。
活性化関数としてシグモイド関数などを用いるときはおすすめである。

参考

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

17
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
12