オプティマイザOptimizer

勾配を受け取り値の動かし方を決める規則

ポイント
  • オプティマイザは、勾配を受け取って値を実際にどう動かすかを決める規則です。方向は勾配降下法が、基本の幅は学習率が決めます。
  • 一つ目のコツは慣性です。同じ方向へ進み続けているなら、前の一歩の勢いを受け継いで大きく進みます。
  • 二つ目のコツは方向ごとに歩幅を変えることです。よく大きく揺れる値は細かく、なかなか変わらない値は大きく動かします。
  • このコツのおかげで、狭くて長い谷で左右に振れる無駄が減り、同じ時間でずっと下まで下りられます。
  • オプティマイザを変えても学習率を決めなくてよくなるわけではありません。基準となる幅は依然として人が決めます
目次

1たとえで理解する

リレーでバトンを渡すとき、次の走者が出発線でじっと立っていたらチームの記録は大きく遅れます。受け取ってから止まった状態で速度をまた上げなければならないからです。だから前の走者が近づいてくるのを見て先に走り出し、前の走者の速度をそのまま受け継ぎます。

トラックの回り方も区間ごとに違います。カーブでは体が外へ押されるので歩幅を狭めて細かく踏み、まっすぐな直線では大きく伸ばして走ります。同じトラックでも、どこを走るかによって足の運びを変えるわけです。

オプティマイザがすることはこの二つです。前の一歩の速度を受け継ぐことと、区間によって歩幅を変えることです。どちらへ行くかはすでに決まっていて、その道をどんなコツで走るかだけを受け持ちます。

2くわしく

方向だけ分かっても損が大きい

勾配は今いる場所でどちらが下り坂かを教えてくれます。ところがその方向へ素直に動くだけだと無駄が生まれます。特に一方は急で反対側はゆるやかな、狭くて長い谷でそうなります。

こういう場所では、急な方へ大きく跳ねて戻ってくることを繰り返しながら、肝心のゆるやかな方へはほんの少しずつしか進みません。谷に沿ってまっすぐ下りるべきなのに、壁にぶつかりながらジグザグにしか動けないわけです。一歩の数は大量に使うのに、実際に下りた深さはわずかです。

オプティマイザは勾配をそのまま使わず、一度手を加えて使います。前の一歩を覚えておき、今の勾配と混ぜて実際の移動量を作ります。勾配そのものを変えるのではなく、勾配をどう使うかという手順を挟み込むイメージです。

慣性を付けると揺れが減る

一つ目のコツは、前の一歩の移動量を一定の割合で受け継ぐことです。同じ方向へ進み続けていれば受け継いだ分が積み重なって一歩がだんだん大きくなり、方向が毎回反転していた方は互いに打ち消し合って収まっていきます。

谷に当てはめると、壁にぶつかって左右に揺れていた動きは減り、谷に沿って下りる動きだけが残って速度が付きます。浅い場所に出くわしても、乗せてきた速度で乗り越えることが起き、中途半端な場所に居座る危険も減ります。

受け継ぐ割合は、たいてい前の分け前をほとんど残す程度に取ります。大きく取りすぎると方向が変わったあともしばらく古い方向へ引きずられ、小さく取りすぎると慣性を付けないのとほとんど変わらなくなります。

方向ごとに歩幅を変えて取る

二つ目のコツは、値ごとに一歩の幅を別々に管理することです。その値がこれまでどれだけ大きく揺れてきたかを記録しておき、大きく揺れた値は幅を狭め、ほとんど動いていない値は幅を広げます。

このコツは、めったに出てこない特徴を扱うときに特に役立ちます。たまに一度だけ現れる特徴に付いた値は更新の機会が少なく、そのとき幅を広げてやれば、数少ない機会をしっかり使えます。広く使われるオプティマイザであるAdamは、この二つのコツを両方使います。値ごとの記録を持つ分、慣性だけを使う方式よりも一歩ごとの計算は増えますが、それでも安定して下りられる利点の方が大きいとされています。

それでも基準の幅は人が決める

オプティマイザが自動で幅を調整してくれるからといって、学習率が要らなくなるわけではありません。方向ごとに調整する値はあくまで倍率で、その倍率が掛かる基準線は依然として人が書き込みます。基準線が大きければ、コツが良くても振れてしまいます。

そのため実務では、広く使われるオプティマイザを基本に置き、学習率だけをいくつか変えながら合わせる手順がよく使われます。オプティマイザを変えるより学習率を直すほうが、結果を大きく揺さぶることがよくあるからです。オプティマイザのコツはあくまで走り方を整えるものであって、どこまで走るかという基準線までは決めてくれません。

3もう少し正確に

オプティマイザは、勾配と過去の更新記録を受け取って今回の更新量を計算する規則です。もっとも単純な形は勾配に学習率だけを掛ける確率的勾配降下法(SGD、Stochastic Gradient Descent)で、そこに過去の移動量を足す慣性項を付けた形、値ごとに過去の勾配の大きさをためて幅を割る形が順に出てきました。慣性と方向ごとの幅を両方使うAdam系が今もっとも広く使われています。

たとえがずれる点もあります。リレーのトラックはカーブと直線が目に見えますが、学習ではどの方向が急かをあらかじめ知ることはできません。これまで揺れてきた記録から見当を付けるだけです。またオプティマイザは値ごとにこうした記録を別々に持つため、モデルを学習するときは値の個数だけメモリが何倍にも余分に必要になります。

4やってみる

5よくある誤解

  • 良いオプティマイザに変えれば学習率は気にしなくてよいと思われがちですが、実際には基準となる幅は依然として人が決めなければならず、その値が結果を一番大きく揺さぶります。

  • オプティマイザがより良い答えを見つけてくれると考えられがちですが、実際には同じ地形をより効率よく下りるだけで、地形そのものを変えることはできません。

  • もっとも新しいオプティマイザが常に優れていると思われがちですが、実際にはデータとモデルによって、古く単純な方式のほうが合う場合も多くあります。

7ひとこと要約

つまりオプティマイザは下り方向を受け取り、前の速度を受け継ぎ方向ごとに歩幅を変える、値を動かすコツです。

誤りや、もっと良いたとえがありますか? 修正を提案する · 最終更新2026-09-02