web-dev-qa-db-ja.com

ニューラルネットワークの重みを乱数に初期化する必要があるのはなぜですか?

私はニューラルネットワークをゼロから構築しようとしています。すべてのAIの文献では、ネットワークをより速く収束させるために、重みを乱数に初期化する必要があるというコンセンサスがあります。

しかし、ニューラルネットワークの初期重みが乱数として初期化されるのはなぜですか?

これは「対称性を破る」ために行われ、これによりニューラルネットワークの学習が速くなることをどこかで読んでいました。対称性を破ると、学習が速くなりますか?

重みを0に初期化する方が良い考えではないでしょうか?そうすれば、重みは(正または負の)値をより速く見つけることができますか?

初期化されたときに最適値に近くなることを期待する以外に、重みをランダム化する背後にある他の基本的な哲学はありますか?

90
Shayan RC

ここでは対称性を破ることが不可欠であり、パフォーマンスのためではありません。多層パーセプトロンの最初の2層(入力層と隠れ層)を想像してください:

enter image description here

順伝播中に、隠れ層の各ユニットは信号を取得します:

enter image description here

つまり、各非表示ユニットは、入力の合計に対応する重みを乗算したものを取得します。

ここで、すべての重みを同じ値(ゼロまたは1など)に初期化するとします。この場合、各隠れユニットはまったく同じ信号を取得します。例えば。すべての重みが1に初期化されている場合、各ユニットは入力の合計に等しい信号を取得します(およびsigmoid(sum(inputs)))。すべての重みがゼロである場合(さらに悪い場合)、隠れているユニットはすべてゼロ信号を受け取ります。 入力が何であっても-すべてのウェイトが同じ場合、非表示レイヤーのすべてのユニットも同じになります

これは、対称性の主な問題であり、重みをランダムに(または、少なくとも異なる値で)初期化する必要がある理由です。この問題は、各接続を使用するすべてのアーキテクチャに影響することに注意してください。

118
ffriend

アナロジー:

それが良いアナロジーであることを願っています。できるだけ簡単に説明しようとしました。

誰かがあなたをヘリコプターから未知の山頂に降ろし、そこに閉じ込められていると想像してください。どこでも曇っています。あなたが知っている唯一のものは、あなたが何らかの形で海面に降りるべきであることです。可能な限り低い位置にたどり着くには、どの方向に進むべきですか?

海面までの道が見つからず、ヘリコプターが再びあなたを連れて行き、あなたを同じ山頂の位置に落とすなら。同じ開始位置に自分自身を「初期化」しているため、同じ方向に再度進む必要があります。

ただし、ヘリコプターが山のどこかにrandomを落とすたびに、異なる方向と手順を踏むことになります。そのため、可能な限り低いポイントに到達するためのbetter chanceがあります。

これは、対称性の破れが意味するものです。初期化はasymmetricこれは異なる)であるため、同じ問題に対する異なる解決策を見つけることができます。

この類推では、あなたが着地する場所は重みです。したがって、重みが異なると、最低(または下位)ポイントに到達する可能性が高くなります。

また、システム内のエントロピーが増加するため、システムは、より低いポイント(localまたはグローバル最小値)。

enter image description here

60
Inanc Gumus

答えは非常に簡単です。基本的なトレーニングアルゴリズムは本質的に貪欲です-グローバルな最適化を見つけるのではなく、「最も近い」ローカルソリューションを見つけます。その結果、固定された初期化から開始すると、ソリューションは特定の重みセットに偏ります。ランダムに(場合によっては何回も)実行すると、エラーサーフェスの奇妙な部分でスタックする可能性がはるかに低くなります。

同じ議論は他のアルゴリズムにも当てはまりますが、それらはグローバルな最適化(k-means、EMなど)を見つけることができず、グローバルな最適化手法(SVMのSMOアルゴリズムなど)には適用されません。

29
lejlot

あなたが述べたように、キーポイントは対称性を破るです。すべての重みをゼロに初期化すると、ニューラルネットワーク内のすべての隠れニューロン(ユニット)がまったく同じ計算を行うためです。さまざまな関数を計算するためにさまざまな隠れユニットが必要なため、これは望ましいことではありません。ただし、すべてを同じ値に初期化する場合、これは不可能です。

  1. 重みを0に初期化するのは良い考えではないでしょうか?そうすれば、重みは(正または負の)値をより速く見つけることができますか?

  2. 対称性を破ると、学習が速くなりますか?

すべての重みをゼロに初期化すると、すべてのレイヤーのすべてのニューロンが同じ計算を実行し、whole deep net uselessにすることで同じ出力を生成します。重みがゼロの場合、ディープネット全体の複雑さは単一ニューロンの複雑さと同じになり、予測はランダムに勝るものはありません。

同じ入力に接続された非表示層に並んでいるノードは、重みを更新するために学習アルゴリズムの重みが異なる必要があります。

重みを非ゼロ(ただし、0.1などのように0に近い)にすると、アルゴリズムは次の反復で重みを学習し、スタックしなくなります。このようにして、対称性の破れが起こります。

  1. 初期化されたときに最適値に近くなることを期待する以外に、重みをランダム化する背後にある他の基本的な哲学はありますか?

確率的勾配降下法などの確率的最適化アルゴリズムは、検索の開始点の選択と検索の進行にランダム性を使用します。

ニューラルネットワークの検索または学習の進行は、収束として知られています。準最適なソリューションまたは局所的な最適値を発見すると、収束が早まります。

1つのローカルオプティマに依存する代わりに、異なるランダムな重みでアルゴリズムを複数回実行すると、ローカルオプティマにとらわれずにグローバルオプティマを見つけることができる可能性が最も高くなります。

2015年以降、機械学習の研究の進歩により、ランダムな初期化を置き換えるためにHe-et-al Initializatio nが導入されました。

w=np.random.randn(layer_size[l],layer_size[l-1])*np.sqrt(2/layer_size[l-1])

重みはランダムですが、前のニューロン層のサイズに応じて範囲が異なります。

要約すると、ゼロ以外のランダムな重みが役立ちます

  1. ローカルオプティマから出てきます
  2. 対称性を破る
  3. さらに反復してグローバルな最適値に到達する

参照:

machinelearningmastery

データサイエンスに向けて

0
Ravindra babu