ウェイトをゼロで初期化するのはなぜ危険なのですか?それを示す簡単な例はありますか?
ウェイトをゼロで初期化するのはなぜ危険なのですか?それを示す簡単な例はありますか?
回答:
編集は、以下のアルファのコメントを参照してください。私はニューラルネットの専門家ではないので、彼に任せます。
私の理解は、ここに投稿されている他の回答とは異なります。
バックプロパゲーションには、乗算ではなく、既存の重みへの追加が含まれることは間違いありません。追加する金額は、デルタルールで指定されます。wijは方程式の右側に表示されないことに注意してください。
私の理解では、初期重みをゼロに設定しない少なくとも2つの理由があります。
まず、ニューラルネットワークは局所的な最小値にとどまる傾向があるため、多くの異なる開始値を指定することをお勧めします。それらがすべてゼロから始まる場合、それはできません。
第二に、ニューロンが同じ重みで始まる場合、すべてのニューロンは同じ勾配に従い、常に互いに同じことを行うことになります。
ベイジアンネットワークのように、重みを事前確率と考えた場合、これらの入力がシステムに影響を与える可能性がある可能性を排除しました。別の説明は、バックプロパゲーションが、ターゲットと観測値の間の重み付き二乗差を最小化する重みのセットを識別するというものです(E)。それでは、システムの方向を決定する観点から、勾配降下アルゴリズムをどのように方向付けることができますか?パラメータ空間の点に自分を置いています。
バックプロパゲーションアルゴリズムの各反復では、バックプロパゲーションによって決定されたデルタを既存の重みに乗算することにより、重みを更新します。初期ウェイト値が0の場合、デルタの値を乗算してもウェイトは変更されません。つまり、各反復は最適化しようとしているウェイトに影響しません。
次の2つの理由から、これは悪い考えです。
シグモイド活性化、または場合は、ウェイトが「一緒に」移動し、空間全体を検索して損失/コストを下げる最適なウェイトを見つける逆伝播の力を制限します。 。
あなたが持っている場合はまたはReLuの活性化、または何か、すべての出力が0になり、重みのための勾配は常に0になります。したがって、あなたは、まったく学習を持っていません。
これを実証しましょう(簡単にするために、1つのニューロンの最終出力層を想定しています):
フォワードフィード:すべての重みが0の場合、2番目のレイヤーへの入力はすべてのノードで同じになります。ノードの出力は同じになりますが、それらは0になる次の重みのセットで乗算されるため、次のレイヤーの入力はゼロなどになります。したがって、すべての入力(最初の実際の入力を受け取るレイヤー)は0になり、すべての出力は同じになります(S字型アクティベーションの場合は0.5、およびReLuアクティベーションの場合は0 )。
バックプロパゲーション:最後のレイヤーだけを調べてみましょう。最終損失()はネットワークの最終出力(、ここでLは最終層を示します)に依存します。これは、アクティベーション前の最終入力()、これは最終層の重み()に依存します。ここで見つけたい:
はコスト関数の導関数、は活性化関数の導関数です。に関係なく(
ポイント2は、がゼロに等しいという事実から示すことができます。したがって、ベクトルはゼロでいっぱいになり、学習は達成できません。