コンテンツにスキップ

パラメータの初期化

キーワード:Xavier法/Glorot法、Kaiming法/He法、LeCunの初期化、対称性の破れ

要点

  • 重みを同じ値(0 を含む)で初期化すると、同じ層のノードが同じ勾配を受けて同じままになる。乱数で対称性を破る。
  • 乱数のばらつき(分散)の大きさが、層を重ねたときの出力と勾配の大きさを決める。大きすぎると飽和・爆発、小さすぎると消失する。
  • 各層の出力の分散を保つように、ノード数と活性化関数から分散を決める。Xavier(sigmoid/tanh):\(2/(n_{\mathrm{in}}+n_{\mathrm{out}})\)、He(ReLU系):\(2/n_{\mathrm{in}}\)。

なぜ初期化が問題になるか

  • 対称性の破れ:全重みを同じ値にすると、同じ層のノードは入力も勾配も同一になり、更新後も同一のまま。何個ノードがあっても1個ぶんの働きしかしない。小さな乱数(ガウス分布)で初期化すると、「同じようで少しずつ違う」状態から始められる。
  • スケール:初期値が大きすぎると、層を通るたびに出力が膨らんで tanh やシグモイドが飽和し(微分が 0)、ReLU では出力が発散する。小さすぎると出力と勾配が層ごとに縮んで消失する(勾配消失)。
  • バイアスは 0 で初期化してよい。対称性は重みの乱数で破れている。
  • 初期化の目標は、層を通っても出力の大きさが変わらず、逆伝播でも勾配の大きさが変わらないこと。

分散の伝わり方

第 \(l\) 層の1つのノードの総入力を \(u=\sum_{i=1}^{n_{\mathrm{in}}}w_i z_i\) とする。重み \(w_i\) は平均 0・分散 \(\mathrm{Var}(w)\) で互いに独立、入力 \(z_i\) とも独立と仮定すると

\[ \mathrm{Var}(u)=n_{\mathrm{in}}\,\mathrm{Var}(w)\,\mathbb{E}[z^2] \]
  • \(\mathrm{Var}(w)\) が \(1/n_{\mathrm{in}}\) より大きいと、層を通るたびに出力の分散は指数的に増え、小さいと指数的に減る。\(L\) 層なら \(\bigl(n_{\mathrm{in}}\mathrm{Var}(w)\bigr)^L\) 倍。
  • 順伝播で分散を保つ条件:\(n_{\mathrm{in}}\,\mathrm{Var}(w)=1\)。
  • 逆伝播のデルタ \(\boldsymbol\delta^{(l-1)}=\bigl(\mathbf{W}^{\top}\boldsymbol\delta^{(l)}\bigr)\odot f'\) も同じ形で、保つ条件は \(n_{\mathrm{out}}\,\mathrm{Var}(w)=1\)。
  • 2つの条件は一般に両立しない(\(n_{\mathrm{in}}\ne n_{\mathrm{out}}\))。その妥協が Xavier。
導出:Xavier と He の分散

Xavier(Glorot):活性化関数が原点付近で線形(\(f(u)\approx u\)、tanh など)とみなすと \(\mathbb{E}[z^2]=\mathrm{Var}(u_{\mathrm{prev}})\)。順伝播の条件 \(\mathrm{Var}(w)=1/n_{\mathrm{in}}\) と逆伝播の条件 \(\mathrm{Var}(w)=1/n_{\mathrm{out}}\) の調和平均をとると

\[ \mathrm{Var}(w)=\frac{2}{n_{\mathrm{in}}+n_{\mathrm{out}}} \]

He(Kaiming):ReLU は入力の負の半分を 0 にする。\(u\) が 0 を中心に対称なら \(\mathbb{E}[z^2]=\tfrac12\mathrm{Var}(u)\)。分散を保つには \(n_{\mathrm{in}}\,\mathrm{Var}(w)\cdot\tfrac12=1\) より

\[ \mathrm{Var}(w)=\frac{2}{n_{\mathrm{in}}} \]

ReLU に対する Xavier は、毎層で分散が \(1/2\) 倍になる。Leaky ReLU(負側の傾き \(a\))なら \(\mathbb{E}[z^2]=\tfrac{1+a^2}{2}\mathrm{Var}(u)\) なので \(\mathrm{Var}(w)=\dfrac{2}{(1+a^2)\,n_{\mathrm{in}}}\)。


手法

手法 正規分布 \(\mathcal{N}(0,\sigma^2)\) の \(\sigma^2\) 一様分布 \(U(-a,a)\) の \(a\) 向く活性化関数
LeCun \(\dfrac{1}{n_{\mathrm{in}}}\) \(\sqrt{\dfrac{3}{n_{\mathrm{in}}}}\) tanh、SELU
Xavier / Glorot \(\dfrac{2}{n_{\mathrm{in}}+n_{\mathrm{out}}}\) \(\sqrt{\dfrac{6}{n_{\mathrm{in}}+n_{\mathrm{out}}}}\) シグモイド、tanh(原点付近が線形)
He / Kaiming \(\dfrac{2}{n_{\mathrm{in}}}\) \(\sqrt{\dfrac{6}{n_{\mathrm{in}}}}\) ReLU 系
  • \(n_{\mathrm{in}}\):その層への入力ノード数(fan-in)、\(n_{\mathrm{out}}\):出力ノード数(fan-out)。一様分布の分散は \(a^2/3\) なので、正規分布と同じ分散にするには \(a=\sqrt{3\sigma^2}\)。
  • 畳み込み層では \(n_{\mathrm{in}}=C_{\mathrm{in}}\times k_h\times k_w\)(入力チャネル数 × カーネルの面積)、\(n_{\mathrm{out}}=C_{\mathrm{out}}\times k_h\times k_w\)。
  • 教科書などでは Xavier を簡略化して \(\sigma=\sqrt{1/n_{\mathrm{in}}}\) と書く(実質 LeCun)。元の論文の式は \(2/(n_{\mathrm{in}}+n_{\mathrm{out}})\)。
  • 同じノード数の層が続くなら \(n_{\mathrm{in}}=n_{\mathrm{out}}\) で、Xavier は \(1/n\)、He は \(2/n\)。He は Xavier の分散の 2 倍(標準偏差で \(\sqrt2\) 倍)。

動かしてみる

10 層の全結合ネットワークに乱数の入力を通し、層ごとの出力の大きさ(左:二乗平均平方根 RMS、縦軸は対数)と、層 \(l\) の出力の分布(右)を見る。

動かしてみる

  • tanh で \(\sigma=0.01\) にすると、RMS が層ごとに約 \(0.01\sqrt{n}\) 倍に縮み、10 層目で約 \(10^{-10}\) になります。分布は 0 に潰れます(勾配消失の状態)。
  • tanh で \(\sigma=1\) にすると、出力は ±1 に張り付き(分布が両端に集まる)、微分が 0 に近い飽和になります。RMS は 1 近くで動かず、見かけでは大丈夫そうでも勾配が流れません。
  • tanh で Xavier にすると分布が釣鐘形に保たれます(tanh は線形ではないので、少しずつ縮みます)。
  • ReLU に切り替えて He にすると RMS が約 1 で保たれます。同じ ReLU で Xavier にすると毎層縮み、\(\sigma=1\) では毎層 \(\sqrt{n/2}\) 倍に膨らみます。
  • \(n\) を大きくすると、固定の \(\sigma\) では縮み方・膨らみ方が速くなります。Xavier や He は \(n\) に合わせて \(\sigma\) が変わるので影響されません。

実装での使い方

  • PyTorch:torch.nn.init.xavier_normal_ / xavier_uniform_、kaiming_normal_ / kaiming_uniform_(mode で fan-in か fan-out、nonlinearity で活性化関数を指定)。全結合・畳み込みの既定値は Kaiming 一様分布の系統。
  • mode="fan_in" は順伝播の分散を保ち、mode="fan_out" は逆伝播の勾配の分散を保つ。
  • バッチ正規化などの正規化層を入れると、初期化への依存は小さくなる。事前学習済みの重みから始める場合(転移学習)は、層ごとに初期化し直さない。
  • 全く違う方針として、固定のスケールを決めずに最初のミニバッチで出力が分散 1 になるよう調整する方法(LSUV)や、直交行列で初期化する方法がある。

試験の着眼点

  • Xavier はシグモイド・tanh、He は ReLU(Leaky ReLU など)。取り違えない。
  • 分散の式を言えるようにする:Xavier \(\dfrac{2}{n_{\mathrm{in}}+n_{\mathrm{out}}}\)、He \(\dfrac{2}{n_{\mathrm{in}}}\)、LeCun \(\dfrac{1}{n_{\mathrm{in}}}\)。標準偏差はその平方根。
  • He の係数 2 の理由:ReLU は入力の半分を 0 にするので、分散が半分になるのを補う。
  • 全て同じ値で初期化すると対称性が破れない。バイアスは 0 でよい。
  • 初期化の目的は、順伝播・逆伝播で各層の出力と勾配の分散を保つこと(勾配消失・爆発の防止)。

参考