ランダムな200箇所から出発したら、勾配降下法は1つも正解にたどり着けなかった。焼きなまし法で局所最適解から抜け出す実験
約10分で読めます

ランダムな200箇所から出発したら、勾配降下法は1つも正解にたどり着けなかった。焼きなまし法で局所最適解から抜け出す実験


勾配降下法は「今いる場所から見て、坂を下る方向に進み続ける」という手法だ。理屈はシンプルで、実際に多くの場面でうまく機能する。ただ、この方法には構造的な弱点がある。一度谷底に着いてしまうと、そこが本当の最下点でなくても、そこから動けなくなるという点だ。

これは人生の意思決定にも重なる話だと思う。「今より悪くなる選択はしない」を徹底すると、目の前の小さな谷(そこそこ快適な現状)に落ち着いた時点で、その先によりよい選択肢があっても、そこへは絶対に辿り着けない。一度でも「今より悪化する」ステップを踏まなければ、そこへ抜け出せないからだ。

この「一時的な悪化を受け入れる」ことの効果を、局所最適解だらけの地形を使って実際に検証してみた。

Ackley関数: エッグクレート状の地形

局所最適解の実験によく使われるベンチマーク関数にAckley関数がある。

f(x,y)=20exp(0.20.5(x2+y2))exp(0.5(cos2πx+cos2πy))+e+20f(x, y) = -20\exp\left(-0.2\sqrt{0.5(x^2+y^2)}\right) - \exp\left(0.5(\cos 2\pi x + \cos 2\pi y)\right) + e + 20

原点(0,0)(0,0)に唯一の大域最適解(f=0f=0)があり、その周りには整数座標付近に無数の浅い局所最適解が、卵パックのように規則正しく並んでいる。

def ackley(pos):
    x, y = pos[..., 0], pos[..., 1]
    r = np.sqrt(0.5 * (x ** 2 + y ** 2))
    term1 = -20 * np.exp(-0.2 * r)
    term2 = -np.exp(0.5 * (np.cos(2 * np.pi * x) + np.cos(2 * np.pi * y)))
    return term1 + term2 + np.e + 20

実際に3D表示してみると、この「無数の浅い谷に囲まれた、たった一つの深い谷」という構造がよく分かる(ドラッグで回転できます)。

3つの手法で競走させる

3つの手法を実装して比較する。

  • 通常のGD: 勾配方向に、常に一定の歩幅で下り続ける
  • Momentum: これまでの移動の慣性を持ち越しながら下る。慣性の力で、浅い谷を惰性で乗り越えられることがある
  • 焼きなまし法(Simulated Annealing, SA): ランダムな方向に一歩動いてみて、改善するなら採用。悪化する場合でも、確率exp(Δ/T)\exp(-\Delta / T)で採用してしまう。温度TTは徐々に下げていく
def run_sa(start, iters, step_size, T0, cooling, rng):
    pos = start.copy()
    f_pos = ackley(pos)
    T = T0
    for _ in range(iters):
        candidate = pos + rng.normal(0, step_size, size=2)
        f_cand = ackley(candidate)
        delta = f_cand - f_pos
        if delta < 0 or rng.random() < np.exp(-delta / max(T, 1e-8)):
            pos, f_pos = candidate, f_cand
        T *= cooling
    return pos

温度TTが高い最初のうちは、多少の悪化にも寛容になる(悪化幅Δ\Deltaが大きくてもexp(Δ/T)\exp(-\Delta/T)がそこそこの値を持つ)。学習が進むにつれてTTを下げていくと、だんだん「悪化を受け入れる寛容さ」が減り、最後はほぼ通常のGDと同じように、改善する方向にしか動かなくなる。

結果: GDは0%、SAは100%

[5,5]2[-5, 5]^2の範囲からランダムに選んだ200箇所を開始点として、それぞれの手法を500ステップ動かし、最終的に大域最適解(原点)から距離0.5以内にたどり着けたかを調べた。

200箇所のランダムな開始点から、大域最適解にたどり着けた割合を示す棒グラフ。通常のGDは0.0%、Momentumは2.5%、焼きなまし法(SA)は100.0%

gd: 0.000
momentum: 0.025
sa: 1.000

正直、ここまではっきり差が出るとは思っていなかった。通常のGDは200箇所すべてで、開始点の近くにあった浅い局所最適解に落ちて動けなくなった。1つも大域最適解にたどり着けていない。 Momentumも多少はましだが、200回中5回(2.5%)成功しただけだった。一方で焼きなまし法は、200箇所すべてから大域最適解にたどり着いた

同じ開始点(隅の方、(4.59,4.83)(-4.59, -4.83)付近)から3手法を動かした軌跡を地形図に重ねてみると、差は一目瞭然だ。

Ackley関数の等高線図に、同じ開始点から出発した通常のGD・Momentum・焼きなまし法(SA)の軌跡を重ねたもの。GDとMomentumの軌跡はほぼ開始点から動いておらず線として見えないほど短い。焼きなまし法の軌跡だけが、開始点の隅から地形の中心にある大域最適解の星印まで、大きくジグザグに動き回っている

GDとMomentumの軌跡は、凡例には出しているものの、グラフ上ではほとんど見えない。開始点のすぐ近くの谷に落ちて、そこからぴくりとも動いていないからだ。実際の到達点は次のようになった。

gd final:       [-5.0, -5.0]        f=12.64
momentum final: [-4.99, -4.99]      f=12.63
sa final:       [0.003, 0.029]      f=0.10

GDとMomentumは、開始点から一番近い(だが本命ではない)谷の底に到達しただけで、そこから一歩も動けていない。焼きなまし法だけが、盤面を大きく横切って本当の谷まで辿り着いている。

Momentumは強めれば強めるほど良いわけではない

Momentumがほとんど役に立たなかったのは、慣性の強さ(momentum係数)が足りなかっただけなのか、それとも慣性をどれだけ強めても構造的に無理なのか、β\betaを0から0.99まで振って確認してみた。

momentum係数beta(横軸)に対する大域最適解到達率(縦軸)の折れ線グラフ。beta=0〜0.7まではほぼ0%で推移し、beta=0.8で3.0%まで山になり、そこからbeta=0.99に向かって再び0%まで下がっていく

β=0.8\beta=0.8あたりで到達率が3.0%とわずかにピークを作るが、そこからさらに慣性を強めると、β=0.99\beta=0.99では逆に0%まで落ちてしまう。慣性を強めれば強めるほど脱出しやすくなるわけではなく、途中に山がある。慣性が弱すぎると浅い谷をほとんど乗り越えられず、強すぎると今度は勢い余って別の浅い谷に飛び込んでしまい、結局同じように動けなくなる。過学習の記事転移学習の記事でも見た「強めれば強めるほど良いとは限らず、途中に最適な強さがある」という形が、ここでも同じように現れた。

いずれにせよ、この程度の慣性では、Ackley関数の谷の深さ・広さに対してはほとんど無力だった。

一時的な悪化を受け入れる、という設計

今回の実験でもっとも印象に残ったのは、焼きなまし法が最初のうちは平気で「悪化する方向」に動いていたことだ。上のアニメーションでも、温度が高い序盤(iter=100あたり)は粒子たちが盤面を広く動き回り、終盤(iter=500)になるとほとんどが中心の谷に収束している。

左に通常のGD、右に焼きなまし法(SA)で、40個の粒子がAckley関数の地形上をiter=0から500まで動いていく様子を示すアニメーション。GDの粒子群は序盤ですぐに散らばった状態のまま停止するのに対し、SAの粒子群は序盤に地形を広く動き回った後、終盤にはほとんどが中心の大域最適解に集まっている

GD側の粒子は、最初の数十ステップでそれぞれ最寄りの谷に落ちてしまい、あとはずっと同じ場所に固まったままになる。SA側の粒子は、序盤は地形全体をランダムに探り、温度が下がるにつれて徐々に「改善する方向にしか動かない」通常のGDに近い挙動へと収束していく。この「最初は広く探り、後から絞り込む」設計そのものが、局所最適解を回避できた理由だ。

一度も後退しない戦略は、一見もっとも合理的に見える。しかし、それは同時に「最初にたまたま近くにあった、そこそこの答え」に永遠に縛られる戦略でもある。焼きなまし法は、序盤にあえて「改悪」を許容することで、その縛りから逃れている。ただし無制限に許容するわけではなく、温度を下げることで、その許容範囲は時間とともに狭めていく。ずっと悪化を許し続けていたら、いつまで経っても一つの場所に定まらない。

これは、キャリアや人生の選択にもそのまま重なる話だと思う。今より条件が悪くなる転職、うまくいっていた環境をあえて離れる決断、時間や信頼を一時的に失うかもしれない挑戦。「今より悪くなる選択は絶対にしない」を徹底していたら、最初にたまたま流れ着いた、そこそこ快適な場所からは一生動けない。焼きなまし法が教えてくれるのは、悪化を受け入れる勇気を無期限に持ち続けろということではなく、まだ何も分かっていない初期のうちほど大胆に、経験や情報が積み上がってきたら徐々に慎重に、という温度スケジュールそのものの合理性だ。

まとめ

  • 無数の局所最適解を持つAckley関数の上で、200箇所のランダムな開始点から通常のGD・Momentum・焼きなまし法(SA)を競走させたところ、GDは0%、Momentumは2.5%、SAは100%が大域最適解に到達した
  • GDとMomentumは、開始点から最も近い(本命ではない)谷に落ちたら最後、そこから一歩も動けなかった
  • Momentumの強さ(momentum係数)を0から0.99まで振ると、β=0.8\beta=0.8付近でわずかに到達率が上がるものの、そこからさらに強めると再び悪化する、非単調な関係になった。「強めるほど良い」わけではない
  • 焼きなまし法は、温度が高い序盤は悪化する方向にも動くことを許容し、温度が下がるにつれて徐々に「改善する方向にしか動かない」通常のGDに近づいていく。この「最初は大胆に、後から慎重に」という設計が、局所最適解からの脱出を可能にしていた