勾配降下法と学習率

データから学習する仕組みはすべて、斜面を少しずつ下ることで成り立っています。唯一の本当の課題は、その一歩の大きさをどう決めるかです。「大きければ大きいほど良い」という単純な話ではありません。たった一度の移動で目的地に到達する学習率もあれば、ある境界を超えると永遠に辿り着けなくなる学習率もあるからです。

インタラクティブシミュレーションを読み込んでいます...

レッスン

理論 — 勾配降下法と学習率

勾配降下法は、たった一つの式の反復です。どこかに立ち、傾きを測り、それに比例して下っていく。x ← x − η f′(x)。ステップサイズ η は問題の一部ではありません。損失曲線は与えられたものであり、勾配は計算によって求まるものです。η だけが、人が選ぶことのできる唯一の数値なのです。曲率 a の二次関数であれば、この計算は厳密に解くことができます。このページで二次関数を扱う理由はそこにあります。以降の学習率に関するあらゆる主張は、結局のところ 1 − ηa についての主張なのです。

各記号の意味

η
学習率。自ら選べる唯一の数値
a
損失の曲率。問題によって規定される値
前提
一つの変数、固定のステップサイズ、そして正確に把握された勾配。実際の訓練では、これら三つの前提がすべて同時に崩れ去ります。パラメータは数百万に上り、ステップサイズはスケジュールで変動し、勾配は小さなバッチからの推定値にすぎません。それでもなお、そのままの形で生き残るものが一つだけあります。それが 2/a という境界です。なぜなら、この境界は単一方向の曲率から導かれるものであり、現実の損失曲面であっても、各固有ベクトルに一つずつその曲率が存在するからです。

限界は曲面に備わるものであり、試行が決めるものではない 🖖

始点を好きなところへドラッグしてみてください。10 の位置まで離しても、谷の反対側に持っていっても、2/a は動きません。ステップ数をどれだけ重ねるかも無関係です。ステップ乗数 r = 1 − aη の中には x₀ もステップ数も含まれていないため、限界点は曲率のみによって固定されます。試行全体は x₀ に r を指定回数だけ掛けたものであり、それが縮小するかどうかは r 単独にかかっています。谷底に近い場所から始めても余分な余裕は生まれず、破綻する学習率が明らかになる時点を遅らせるに過ぎません。曲率を 1.6、学習率を 1.3 に設定し、始点を動かせる範囲全体にわたって振ってみてください。最小値から半単位の距離にある場所も含め、あらゆる位置で表は 発散 を示します。

飛び越えること自体に代償はない 🖖

曲率を 1 に設定してください。これで一度で着地する学習率が η = 1 になります。次に 0.9 を試し、続いて 1.1 を試してみてください。どちらも七ステップで |x| が 10⁻⁶ を下回ります。一方は谷の片方の壁を這うように下り、もう一方はステップごとに底を完全に飛び越えて左右交互に着地します。これらが同じコストで済むのは、乗数が一方では 1 − aη であり、もう一方ではその符号を反転させたものだからです。そして負の乗数は、その正のペアと全く同じ速さで数値を縮小させます。この対称性は近似的なものではありません。0.5 と 1.5 を試してみてください。どちらも二十二ステップです。つまり、ジグザグの経路は最適レートのどちら側にいるのかを教えてくれるだけであり、進みすぎたかどうかについては何も語っていません。それを判断するために重要な唯一の数値が 2/a なのです。

実際の学習率がいまだに手探りで決められる理由 🖖

このページには次元が一つのため、曲率も一つしかありません。実際のネットワークには数百万のパラメータがあり、損失曲面は方向ごとに異なる具合で曲がっています。しかし、a を曲面上のどこよりも大きな曲率、つまりヘッセ行列の最大固有値に置き換えれば、ここでの理屈はそのまま成り立ちます。一つの学習率はすべての方向に対して同時に安全でなければならないため、全体がいつ崩壊するかは最も急な方向によって決まります。一方で最も平坦な方向は、どれだけ待たされるかを決定します。その方向に沿った進み具合は、それ自体の小さな曲率に支配されるからです。この二つの比率が条件数であり、ある問題で調整した学習率が別の問題ではひどく役に立たない理由を説明してくれます。損失に関するどんな情報も二つの固有値を前もって教えてはくれませんし、一億ものパラメータに対して最大固有値を計算する作業は、誰も朝飯前に行えるようなものではありません。安定するものと素早いものとの間にあるこの隙間を広げるためにこそ、モメンタムや、Adam のようなパラメータごとの手法が存在するのです。

全プロセスの詳細解説

  1. あなたの学習率 0.4 は上手く機能しています。これが機能しなくなる正確な曲率を見つけ、その点の両側で破綻がどのように見えるかを説明してください。 ツールを η = 0.4、a = 1、x₀ = 8 に設定して始めましょう。ステップ乗数 の行には 0.6000 と表示され、経路は片方の壁を静かに下っていきます。

    この問題をツールで開く

    1. このページのすべての問いは、r = 1 − aη としたときの |r| < 1 に関する問いです。学習率は 0.4 に固定されており、動かせるのは曲率のほうなので、η ではなく a を使って条件式を書いてみましょう。

    2. |1 − 0.4a| < 1 を展開すると −1 < 1 − 0.4a < 1 となり、そこから 0 < 0.4a < 2、したがって a < 5 となります。この学習率は 5 未満のすべての曲率で生き残りますが、それを超える曲率では一つも生き残りません。これはおなじみの η < 2/a を逆から読み、a < 2/η としたものです。不等式としては同じであり、この二番目の形こそが問われた内容に答えるものとなっています。

    3. きっちり a = 5 に設定して表を読んでください。r = −1.0000 となり、20 ステップ後の位置 には開始時の数値である 8.000 が表示されます。初期損失に対する割合は 1.000 です。これこそが境界そのものです。ステップごとに前回と同じだけ最小値から離れた反対側へ着地するため、この経路は放っておく限り 8 と −8 の間を永遠に行ったり来たりします。

    4. ここで a = 5.1 へ少し動かしてみます。r = −1.0400 となり、二十ステップ後には x が 8 ではなく 17.529 になっています。これが実際の発散であり、それがどれほど穏やかに見えるかは注目に値します。二十回のステップで距離がだいたい二倍になっただけです。境界のすぐこちら側にある試行は、数値が明らかに不条理なものになるまでの長い間、単にノイズが多いだけのように見えることがあるのです。

    5. 逆方向に戻ると、a = 4.9 では依然として収束します。r = −0.9600 で |r| は 1 を下回り、表には 飛び越えつつ収束 と表示されます。しかし |x| が 10⁻⁶ を下回るまでのステップ数 は、a = 4 のときの 32 に対して、今度は 390 となっています。かろうじて安定している状態というのは、役に立たない状態に近いのです。

    解答

    a = 5 であり、これは 2/η です。これを下回れば学習率は収束し、この値では損失が変化せず、上回れば損失は際限なく増大します。 コストがかかるのはそこに近づく部分です。境界付近では、2/a − η の差を g と書くと |r| は 1 − a·g となるため、log|r| ≈ −a·g であり、ステップ数はおおよそ log(|x₀|/許容誤差) を a·g で割ったものになります。これは限界までの距離の逆数に比例して変化します。つまり、差を半分にすれば作業は二倍になるということです。x₀ = 8 で a = 5 に設定したとき、0.05、0.025、0.0125 の差に対してそれぞれ 56、120、247 ステップが必要となり、各ステップ数にそれぞれの差を掛けると 2.8、3.0、3.1 となって、log(8 × 10⁶)/5 = 3.18 に近づいていきます。だからこそ、調整された学習率が安定性のギリギリの端に置かれることは決してないのです。境界の手前にある最後の安全な薄い領域は、軸全体の中で最も遅い場所の一つでもあり、すべてのうちで最も速い学習率は中央の 1/a にあるものなのです。

学習の道すじ

データへの直線当てはめ

参考文献 (3)