重みの初期化と正則化 — 学習が始まる条件・続く条件
同じ設計図でも、重みに入れた乱数の大きさひとつで学習は始まりも止まりもします。分散の伝播からXavier・He初期化を導き、続いてweight decayとdropoutが「学習が続く条件」をどう作るかを、動く図とPyTorch実装、現場の落とし穴まで含めて前提知識なしで解説します。
Understanding the Difficulty of Training Deep Feedforward Neural Networks
一次資料 — この記事の根拠
この解説の公開 2026-08-25
Understanding the Difficulty of Training Deep Feedforward Neural NetworksPMLR v9論文ページDelving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet ClassificationarXiv:1502.01852論文ページ·PDF
Dropout: A Simple Way to Prevent Neural Networks from OverfittingJMLR 15論文ページ
Decoupled Weight Decay RegularizationarXiv:1711.05101論文ページ·PDF
同じ設計図なのに、片方だけ動かない
同じ層数、同じ活性化関数、同じ学習率、同じデータ。違うのは、訓練を始める前に重みへ入れた乱数の大きさだけ。それだけで、片方は損失が順調に下がり、もう片方は最初の1000ステップで損失がぴくりとも動かない。深層学習を触ったことがある人なら、一度は見る光景です。
音響の比喩が近い。アンプを何段も直列につないだ装置を想像してください。各段の増幅率が1.1倍なら、10段通ると約2.6倍、50段で約117倍、100段では1万倍を超えます。逆に各段が0.9倍なら、100段後の信号は元の3万分の1以下です。増幅率のわずかな上下が、段数の指数になって効いてくる。ハウリングで爆音になるか、何も聞こえないか。ちょうど1.0の周辺だけが「音楽が聞こえる」細い帯です。
ニューラルネットの層は、まさにこのアンプです。そして重みの初期値が、各段の増幅率を決めています。この記事は前半で学習が始まる条件である初期化を、後半で学習が続く条件である正則化を扱います。
値の大きさは、層を通るたびに掛け算される
1つのニューロンがやっていることは、入ってきた数に重みを掛けて足すことです。
は前の層から来た 番目の入力、 はそれに掛ける重み、 はこの層に入ってくる線の本数です。式(1)が言っているのは要するに、入ってきた数のそれぞれに重みという係数を掛けて、全部足し合わせる、それだけのことです。
注目したいのは、この足し算のばらつきです。重み を平均0の乱数で初期化し、入力 とは無関係だとすると、統計の基本則から出力の散らばりはこうなります。
分散(Variance)は「値がどれくらい散らばっているか」の指標で、散らばりの幅の2乗だと思ってください。式(2)は、出力の散らばりは、入力の散らばりに「入力の本数 × 重みの散らばり」を掛けたもの、と言っています。
つまり、重み1本をどれくらいの大きさにするかと、入力が何本あるか。この2つだけで、その層が信号を何倍にするかが決まるということです。入力100本で重みの散らばりが0.01なら倍率はちょうど1.0倍。重みの大きさをそのままに入力を10000本へ増やせば、倍率は100倍になります。
この が、さきほどのアンプの増幅率です。1より大きければ層を通るたびに値が膨らみ、小さければ縮む。層が深いほど、その差は指数で開きます。
深層学習を長く難しくしていたのは、まさにここでした。値が膨らめば勾配爆発で損失が NaN になり、縮めば勾配消失で更新量が0に丸められる。誤差逆伝播が勾配を層ごとの掛け算で運ぶ仕組みは誤差逆伝播を1から理解するで扱っていますが、ここで必要な前提は一行です。掛け算で運ぶものは、指数で消えるか、指数で爆発する。
消える側は、活性化関数がさらに加速する
値が大きくなりすぎると何が起きるかは、活性化関数を自分で動かすと一発で分かります。
平らな部分では傾きがほぼ0です。学習は勾配の向きに重みを動かすことでしか進まないので、ここに落ちた層は動かなくなります。しかも1層が0に近い勾配を返すと、その下の全層が道連れになる。「初期値を大きくすれば信号が強くなって学習が速いのでは」という直感は、活性化関数の飽和のせいで裏切られるわけです。
分散を保つ、という設計条件
ならば条件は明快です。層を通っても値の散らばりが変わらないようにすればいい。 式(2)で とおくと、
はその層に入ってくる線の本数(fan-in)です。式(3)は「入力が多い層ほど、重み1本あたりは小さくしておけ」と言っています。100本から受け取る層と10000本から受け取る層で同じ大きさの乱数を使えば、後者の出力は10倍散らばってしまうからです。
言い換えると、重み1本の標準的な大きさ(標準偏差)を 程度にせよ、ということです。入力512本の層なら0.044前後、2048本なら0.022前後。層ごとに入力の本数が違えば、入れるべき乱数の大きさも層ごとに違う、という当たり前の帰結が出てきます。
ただし条件はもう1つあります。順伝播で値の散らばりが保たれても、逆伝播で勾配の散らばりが保たれるとは限りません。勾配は逆向きに流れるので、そちらの条件は出ていく線の本数 (fan-out)を使った になります。両方を同時に満たせるのは のときだけです。
Xavier初期化: 2つの条件の折衷
Glorot と Bengio が2010年に出した答えは、折衷案でした。2つの条件の中間を取ります。
式(4)が Xavier初期化(著者の名前から。Glorot初期化とも呼ぶ)です。要するに、入口の本数と出口の本数の平均を取って、その逆数を重みの分散にする、と言っています( は の逆数)。順伝播の条件と逆伝播の条件のちょうど間を取ることで、どちらも大きくは壊さない。実装では一様分布版もよく使われ、その場合は の範囲の一様乱数になります(一様分布の分散が幅の2乗の1/12であることから、この係数6が出てきます)。
この論文が当時与えたのは、式そのものより「初期値は勘で決めるものではなく、分散の伝播から導けるものだ」という視点でした。それまで「0.01を掛けた正規乱数」といった慣習で置かれていた値に、初めて根拠が付いたのです。
He初期化: ReLUは半分を捨てる
Xavier初期化は sigmoid や tanh を前提にしています。これらは原点付近でほぼ直線なので、活性化関数を通っても散らばりが大きくは変わらない、という暗黙の仮定が置けました。
ReLUではこの仮定が崩れます。ReLU は負の入力を全部0にするので、平均0の分布を通すとちょうど半分が消える。分散もおおよそ半分になります(→活性化関数を1から)。
He らが2015年の論文で示した修正は、この「半分」を先に打ち消しておく、というものでした。
コメント
コメントにはログインが必要です