教科書 › 第III部 深層学習:何の前提を足すか
CHAPTER 4

どれだけ動かし、いつ止めるか ── 学習率と最適化

無料14分

第1章から第3章で「どちらへ動かすか」は決まりました。残っているのは2つです。1回にどれだけ動かすか(学習率)と、いつ止めるか。

別々の問いに見えます。第1章では前者を、第2章では後者を、どちらも「第4章で」と預けました。預けた先で2つが同じ問いの裏表だったと分かる——それがこの章です。

1. 学習率には上限がある

更新則は

w  ←  w−η ∇L(w)w \;\leftarrow\; w - \eta\, \nabla L(w)
(1)

1次元の二次関数 L(w)=12λw2L(w) = \tfrac{1}{2}\lambda w^2 で何が起きるか見ます。∇L=λw\nabla L = \lambda w なので、1回の更新は

w  ←  w−ηλw  =  (1−ηλ) ww \;\leftarrow\; w - \eta \lambda w \;=\; (1 - \eta\lambda)\, w

毎回 (1−ηλ)(1-\eta\lambda) 倍されるだけです。tt 回後は (1−ηλ)tw0(1-\eta\lambda)^t w_0。これが0へ向かう条件は ∣1−ηλ∣<1|1-\eta\lambda| < 1、つまり

0  <  η  <  2λ0 \;<\; \eta \;<\; \frac{2}{\lambda}
(2)

多次元では、曲がり方のいちばんきつい方向(ヘッセ行列の最大固有値 Lmax⁡L_{\max})が決めます。どの方向も発散しないためには η<2/Lmax⁡\eta < 2/L_{\max}。 上限を超えた瞬間、その方向だけが増幅されて全体が壊れます。

第0部の第2章で使った f(x,y)=(x2+10y2)/2f(x,y) = (x^2 + 10y^2)/2 で測ります。曲率は 11 と 1010 なので上限は 2/10=0.22/10 = 0.2。(10,1)(10,1) から出発し、原点の半径 0.01 に入るまでの歩数です。

η\eta 歩数
0.01 688
0.05 135
0.10 66
0.18 35
0.19 44
0.199 459
0.1999 4603
0.2 届かない
0.21 発散

最良は上限のかなり手前(0.18)で、そこから上限に近づくほど急に悪くなります。0.1990.199 で459歩、0.19990.1999 で4603歩——崖から落ちる前に、すでに使い物になりません。

2. なぜ1つの歩幅が全部の方向に合わないのか

η\eta は全方向に同じ値が掛かりますが、方向ごとに曲率が違います。曲率 λ\lambda の方向は毎回 (1−ηλ)(1-\eta\lambda) 倍。

  • η\eta を大きくすると、曲率の大きい方向が ∣1−ηλmax⁡∣|1-\eta\lambda_{\max}| で振動し始める
  • η\eta を小さくすると、曲率の小さい方向が 1−ηλmin⁡≈11-\eta\lambda_{\min} \approx 1 でほとんど進まない

両方が釣り合う所が最良です。1−ηλmin⁡=−(1−ηλmax⁡)1-\eta\lambda_{\min} = -(1-\eta\lambda_{\max}) を解くと

η∗  =  2λmin⁡+λmax⁡,そのときの縮小率  =  κ−1κ+1(κ=λmax⁡λmin⁡)\eta^{*} \;=\; \frac{2}{\lambda_{\min} + \lambda_{\max}}, \qquad \text{そのときの縮小率} \;=\; \frac{\kappa - 1}{\kappa + 1} \quad \left(\kappa = \frac{\lambda_{\max}}{\lambda_{\min}}\right)
(3)

上の例では η∗=2/11=0.1818\eta^{*} = 2/11 = 0.1818。掃引で最小になったのは η∈[0.180, 0.186]\eta \in [0.180,\ 0.186] の35歩でした。縮小率 9/11=0.8189/11 = 0.818 から歩数を見積もると ⌈log⁡(0.01/10.05)/log⁡(0.818)⌉=35\lceil \log(0.01/10.05)/\log(0.818) \rceil = 35——実測と一致します。

κ\kappa を条件数といいます。κ\kappa が大きいほど縮小率が1に近づき、何歩かけても進みません。学習率の選び方の難しさは、モデルの大きさではなく κ\kappa から来ています。

FIG 1等高線の上を降下経路が進む。学習率を上げていくと、まず谷を横切る振動が出て、さらに上げると外へ飛ぶ。モーメンタムを足すと横断が打ち消され、谷底に沿う向きだけが残る

3. モーメンタム ── 往復を打ち消す

ジグザグは、毎回向きが反転する成分です。足し合わせれば消えます。

v  ←  βv+∇L(w),w  ←  w−η vv \;\leftarrow\; \beta v + \nabla L(w), \qquad w \;\leftarrow\; w - \eta\, v
(4)

β\beta は前回までの向きをどれだけ引き継ぐか。反転する成分は打ち消し合い、同じ向きが続く成分(谷底へ下る向き)は積み上がります。

同じ問題で η=0.05\eta = 0.05 を固定して測ります。

β\beta 0(なし) 0.5 0.9 0.95 0.99
歩数 135 59 92 160 678

β=0.5\beta = 0.5 で135歩が59歩に。ただし0.9以上では遅くなります。引き継ぎが強すぎると、曲がるべき所で曲がれず行き過ぎるからです。学習率と同じく、大きいほど良いではありません。

4. Adam ── 方向ごとに歩幅を変える

条件数の問題は「1つの η\eta を全方向に使う」ことから来ていました。なら方向ごとに変えればよい——勾配の2乗の移動平均で各成分を割ります。

m←β1m+(1−β1)g,v←β2v+(1−β2)g2,w←w−η m^v^+εm \leftarrow \beta_1 m + (1-\beta_1)g, \quad v \leftarrow \beta_2 v + (1-\beta_2) g^2, \quad w \leftarrow w - \eta\, \frac{\hat m}{\sqrt{\hat v} + \varepsilon}
(5)

(m^,v^\hat m, \hat v は初期値0の偏りを直した値。詳細は記事側に譲ります。)よく効く成分は v^\sqrt{\hat v} が大きくなって歩幅が縮み、めったに動かない成分は歩幅が伸びます。

ただし、速さそのものは約束しません。 同じ問題で測ると、

手法 最良の設定 歩数
勾配降下 η=0.18\eta = 0.18 35
+モーメンタム η=0.05, β=0.5\eta=0.05,\ \beta=0.5 59
Adam η=0.3\eta = 0.3 90

この問題では素の勾配降下がいちばん速い。 曲率が分かっていて η∗\eta^{*} を選べるからです。Adam の値打ちは速さではなく、曲率が分からない問題で、調整なしでもそこそこの所に行くことにあります。層ごとに勾配の大きさが桁で違う深いモデルでは、その「そこそこ」が効きます。

手法の比較はそれぞれの最良の設定どうしで行うこと。片方だけ調整した比較は、手法ではなく調整の差を測っています。上の表は3つとも掃引して最良を取ったものです。

5. いつ止めるか ── 回数も容量のうち

第2章で、過学習の手当てとして早期終了を挙げました。「回数も容量の一種だから」と書いた所です。ここを測ります。

第2章と同じデータ(sin⁡(2πx)+ε\sin(2\pi x) + \varepsilon、σ=0.25\sigma = 0.25、20件、15次)に、正則化をまったく掛けずに勾配降下を回し続けます。

回数 tt 訓練 RMSE テスト RMSE ∥w∥\lVert w \rVert
10 0.4522 0.4468 1.07
100 0.2350 0.4575 2.67
1,000 0.1583 0.3224 4.45
1,370 0.1546 0.3140 4.74
10,000 0.1512 0.3320 5.38
100,000 0.1442 0.5057 11.06
300,000 0.1392 1.0069 20.76

訓練誤差は最後まで下がり続け、テスト誤差は t=1,370t = 1{,}370 で底を打って上がっていきます。第2章で次数を上げたときに見たU字が、ここでは回数で出ています。

右端の列に理由が書いてあります。∥w∥\lVert w \rVert が回すほど伸びる。回数を制限することは、∥w∥\lVert w \rVert を制限することだった。

同じデータに L2 正則化(第2章の式(3))を掛けて λ\lambda を掃くと、

最良の設定 テスト RMSE ∥w∥\lVert w \rVert
早期終了 t=1,370t = 1{,}370 0.3140 4.74
L2 λ=0.0089\lambda = 0.0089 0.3068 4.53

底の高さが 0.0072 しか違わず、そのときの ∥w∥\lVert w \rVert もほぼ同じ。 つまみは「回数」と「λ\lambda」でまったく別物なのに、やっていることが同じです。

FIG 2左が回数を横軸に、右が 1/λ を横軸に取った同じ2本(訓練と テスト)。2つのU字の底がほぼ同じ高さに来て、‖w‖ もほぼ同じ。学習率を下げると左の底が右へ動く——同じ場所に着くのに回数が要るだけで、着く先は変わらない。横軸の意味が違うので重ねずに並べてある
第1章で「$\eta$ の選び方と過学習への手当ては同じ問いの裏表」と書いたのは、この意味です。$\eta$ と回数と $\lambda$ は、どれも「どれだけ自由に動かすか」という1つのつまみの別の握り方でした。だから「損失が最小になるまで回す」が手順にならない(第0部の第3章)。止める規則は、最適化の都合ではなく汎化の都合で決まります。

よくある誤解: 「発散しないかぎり、学習率は大きいほど速い」

第1節の表をもう一度見てください。上限は 0.20.2 です。

η\eta 0.18 0.19 0.195 0.199 0.1999 0.2
歩数 35 44 90 459 4603 届かない

崖は 0.20.2 にありますが、性能は 0.180.18 からすでに落ち始めています。 0.19990.1999 は発散していません——ちゃんと収束します——が、最良の 131倍かかります。

理由は第2節の式(3)です。η\eta を上げると最大曲率の方向が 1−ηλmax⁡1 - \eta\lambda_{\max} で負に近づく(振動する)。η→2/λmax⁡\eta \to 2/\lambda_{\max} では −1-1 に近づき、縮小率が1に近づく=いつまでも減らない。最良は振動と鈍さが釣り合う η∗=2/(λmin⁡+λmax⁡)\eta^{*} = 2/(\lambda_{\min}+\lambda_{\max}) であって、上限ではありません。

モーメンタムも同じ形です(第3節の表)。β\beta は 0.50.5 が最良で、0.990.99 では678歩。「発散しない範囲でできるだけ大きく」はどちらのつまみでも誤りです。

実務でこれが見えにくいのは、深いモデルでは $L_{\max}$ も $\kappa$ も学習中に動くからです。最初は安定していた $\eta$ が途中で上限を超えることがあり、学習率の減衰やウォームアップは動く上限を追いかける仕掛けだと読めます。損失が一度跳ねてから戻らないときは、まずその回で上限を超えていないかを疑います。

演習

答えは閉じてあります。手を動かしてから開いてください。

演習1. 曲率が λmin⁡=0.5\lambda_{\min} = 0.5、λmax⁡=50\lambda_{\max} = 50 の問題があります。(a) 発散しない η\eta の上限。(b) 最良の η\eta。(c) そのときの縮小率と、誤差を 1/1001/100 にするのに要する歩数。

答えを見る

(a) η<2/50=0.04\eta < 2/50 = 0.04。 上限は最大曲率だけで決まります。

(b) η∗=2/(0.5+50)=0.0396\eta^{*} = 2/(0.5+50) = 0.0396。 上限 0.040.04 のすぐ下です。条件数が大きいほど最良は上限に近づき、選び損ねたときの代償も大きくなります。

(c) 縮小率 (κ−1)/(κ+1)=99/101=0.9802(\kappa-1)/(\kappa+1) = 99/101 = 0.9802、⌈log⁡(0.01)/log⁡(0.9802)⌉=231\lceil \log(0.01)/\log(0.9802) \rceil = 231 歩。 条件数10の例(35歩)と比べると、κ\kappa が10倍で歩数は約6.6倍。条件数は効きます。

演習2. 学習率を半分にしました。(a) 第5節の表で、テスト誤差が底を打つ回数はどう動きますか。(b) 底の高さは。(c) そこから言えることは。

答えを見る

(a) おおよそ2倍に増えます(右へ動く)。 1回あたりの進みが半分になるので、同じ場所に着くのに倍の回数が要ります。図の学習率スライダーを下げると、左の枠の底が右へ動くのが見えます。

(b) ほとんど変わりません。 着く先(∥w∥\lVert w \rVert がどこまで伸びたか)が同じなら、テスト誤差も同じです。

(c) 学習率は「どこに着くか」ではなく「何歩で着くか」を決めている(この設定では)。だから早期終了の効き目を学習率で代用することはできません。止める場所は別に決める必要があり、それを決めるのは検証データです(第2章)。

演習3. 損失が下がり続けているのに、検証誤差が上がり始めました。(a) 何が起きていますか。(b) 学習率を下げれば直りますか。(c) 打つ手を3つ。

答えを見る

(a) 過学習です。 訓練損失は最後まで下がる(第5節の表の左列)ので、訓練損失だけを見ていてはこの瞬間が分かりません。見るのは検証誤差の向きです。

(b) 直りません。 学習率は着く先ではなく速さを決めています(演習2)。下げればゆっくり同じ場所へ行くだけで、検証誤差が上がり始める点も遅れて現れます。

(c) ①検証誤差が底を打った所で止める(早期終了) ②L2 などの正則化を掛ける ③データを増やす/容量を下げる。 ①と②は第5節のとおりほぼ同じことをしています。③は第2章の表のとおり、より確実に効きます。

この章で言っていないこと

  • 確率的勾配(ミニバッチ)の影響は入れていません。 この章の実測はすべて全データでの勾配です。ミニバッチの揺れ(第0部の第3章で測った σ/B\sigma/\sqrt{B})は、それ自体が正則化のようにはたらくと言われますが、ここでは測っていません。
  • 学習率スケジュール(減衰・ウォームアップ・1サイクル)は「動く上限を追いかける仕掛け」と読めることを書いただけで、どれをいつ使うかは扱っていません。
  • Adam のバイアス補正 m^,v^\hat m, \hat v の導出、β2\beta_2 の意味、重み減衰との相性(AdamW)は記事側に譲りました。
  • 「早期終了=L2」は厳密な等号ではありません。 二次近似のもとで対応が付く古典的な結果で、本文が示したのは1つの設定での実測が近いということです。非線形なモデルでそのまま成り立つとは書いていません。
  • 本文の数値はすべて実際に計算して確かめています(学習率の掃引と η∗\eta^{*} の理論値との一致、縮小率から見積もった歩数 35 と実測 35 の一致、モーメンタムと Adam の掃引、早期終了の経過と L2 の掃引、両者の最良の比較)。

もっと詳しく

コメント

コメントにはログインが必要です