ニューラルネットワークの重みをどのような乱数で初期化するかを学ぶ項目です。初期値の分散を適切に設計することで、深いネットワークでも信号や勾配が消失・発散せずに学習を始められる理由を理解します。
📖 概要
ニューラルネットワークの学習は、重みに乱数の初期値を与えるところから始まります。このとき初期値の「大きさ(分散)」の設計が悪いと、層を重ねるごとに活性(各層の出力)の分散が縮んで信号がほぼゼロになったり、逆に増幅されて発散したりします。活性が飽和領域や恒等的にゼロの領域に偏ると勾配も消失し、深いネットワークでは学習がまったく進まなくなります。
そこで「各層で活性や勾配の分散がなるべく一定に保たれるように、初期値の分散を層の入出力ユニット数から決める」という考え方が生まれました。これが本項目の主題であるパラメータの初期化戦略です。代表的な手法が、シグモイド関数や tanh のような原点付近でほぼ線形な活性化関数を想定した Xavier法/Glorot法 と、ReLU 系の活性化関数を想定した Kaiming法/He法 です。両者の違いは「活性化関数が信号の分散をどれだけ削るか」の仮定の違いに帰着します。
なお、すべての重みを同じ値(たとえばゼロ)で初期化してはいけない点も重要です。同一層内のユニットがすべて同じ出力・同じ勾配を持ち、いつまでも同じ更新しかされない「対称性の問題」が起こるため、乱数によって対称性を破る必要があります。
🔍 キーワード解説
Xavier法/Glorot法
Xavier法/Glorot法 は、Glorot と Bengio によって提案された初期化法で、シグモイド関数や tanh のように原点付近で概ね線形とみなせる活性化関数を想定しています。順伝播で活性の分散が保たれる条件と、逆伝播で勾配の分散が保たれる条件の両方を考慮し、入力ユニット数 n_in と出力ユニット数 n_out を使って初期値の分散を定めます。代表的な形は次の通りです。
分散 Var(W) = 2 / (n_in + n_out)
実装上は、この分散を持つ平均0のガウス分布からサンプリングする方法や、対応する範囲の一様分布を使う方法が用いられます。簡略版として n_in のみを使い、標準偏差を 1 / sqrt(n_in) とする形が紹介されることもあります。ポイントは「層が広い(ユニット数が多い)ほど初期値を小さくする」ことで、多数の入力の和である活性の分散が層を通っても増減しないよう調整している点です。
Kaiming法/He法
Kaiming法/He法 は、He らによって提案された ReLU 系活性化関数向けの初期化法です。ReLU は入力が負のとき出力をゼロにするため、活性の分散が概ね半分に削られます。この「半分になる」効果を打ち消すために、Xavier法に比べて分散を2倍に設定します。
分散 Var(W) = 2 / n_in (標準偏差 = sqrt(2 / n_in))
ReLU を用いた深いネットワークに Xavier法をそのまま適用すると、層を経るごとに活性の分散が半減していき、深くなるほど信号が弱まってしまいます。He法は係数2でこれを補償するため、ReLU 系の深いネットワークでも安定して学習を開始できます。現在の CNN など ReLU 系ネットワークでは、He法系の初期化が用いられることが多いです。
📝 試験でのポイント
- 「活性化関数と初期化法の対応」が最頻出です。シグモイド・tanh には Xavier(Glorot)、ReLU 系には He(Kaiming)という組み合わせを確実に覚えましょう
- 分散の式を問う計算・穴埋め問題に注意。Xavier は 2 / (n_in + n_out)(簡略版は 1 / n_in)、He は 2 / n_in で、He 法の「2倍」は ReLU が負の入力をゼロにすることの補償です
- 「なぜゼロ初期化(全重み同一値)がいけないか」= ユニット間の対称性が破れず全ユニットが同じ更新をされ続けるから、という理由説明も問われます
- 初期値が大きすぎる場合(活性の飽和・発散)と小さすぎる場合(信号・勾配の消失)に何が起こるかを、勾配消失問題と関連づけて説明できるようにしておきましょう
- バイアスは通常ゼロなどの定数で初期化して問題ない(対称性は重みの乱数で破れる)点も整理しておくとよいです
📚 まとめ
重みの初期化は、深いネットワークで信号と勾配の分散を層をまたいで保つための設計です。Xavier法/Glorot法は原点付近で線形に近い活性化関数(シグモイド・tanh)を想定し、分散を 2 / (n_in + n_out) 程度に設定します。Kaiming法/He法は ReLU が分散を半減させることを補うため分散を 2 / n_in とします。試験では活性化関数との対応と分散の式を押さえることが最重要です。
