序盤はAdamのように速く、終盤はSGDのように堅実に——。2つの人気オプティマイザの「いいとこ取り」を目指したのがAdaBoundです。学習率に動的な上限と下限を設けるというシンプルな発想で、Adamの弱点だった学習率の暴れを抑え込みます。最適化手法の系譜の「合流点」として位置を押さえましょう。

📖 ひと言でいうと

AdaBoundとは、Adamに「学習率の上限と下限を動的に調整する仕組み」を追加した最適化アルゴリズムで、学習の序盤はAdamのように、終盤はSGD(確率的勾配降下法)のように振る舞います。

身近な例えでいえば、自動車の運転支援に似ています。序盤は状況に応じてアクセルを細かく自動調整(Adam的)しますが、走行が安定してきたら速度の許容幅を徐々に狭め、最終的にはほぼ一定速度の巡航(SGD的)に落ち着かせるイメージです。厳密には速度そのものではなく「パラメータごとの学習率」に許容幅を設けるのですが、「自由な調整から一定値へ幅を絞っていく」という構造は同じです。

🖼 1枚でわかるAdaBound

AdaBound
  • 正体 — AdamとSGDの良い側面を組み合わせた最適化アルゴリズム
  • 固有の工夫 — 学習率に動的な上限・下限(バウンド)を設ける
  • 振る舞い — 序盤はAdamのように自動調整、終盤はSGDのような固定学習率に接近
  • 効果 — 学習率の急激な変化や振動を抑え、訓練を安定させる
  • 兄弟手法 — AMSBound(AMSGradに同じバウンドを付けた版)
つくもち屋「G検定対策」SUMMARY

📘 公式テキストの説明

AdamとSGD(確率的勾配降下法)の良い側面を組み合わせるための最適化アルゴリズムである。このアルゴリズムは、動的に学習率の上限と下限を調整する機能をAdamに加えることで、学習の安定性を高める。具体的には、訓練の初期段階ではAdamのように自動的に学習率を調整しながら、訓練の後半ではSGDのように固定された学習率に近づく。学習率の急激な変化や振動を抑制し、より安定した訓練が可能となる。

覚えるべき軸は3つです。①ベースはAdamで、そこに「学習率の上限と下限の動的調整」を追加した。②その結果、序盤Adam的→終盤SGD的という時間変化が生まれる。③狙いは学習率の急変・振動の抑制による安定化。

「動的に」という言葉が重要です。上限と下限は固定の数値ではなく、学習が進むにつれて幅が狭まっていき、最終的に1つの値へ収束するように設計されています。この幅の収縮こそが、AdamからSGDへの滑らかな移行を実現します。

🔍 しっかり理解する

なぜAdamとSGDを「つなぐ」必要があったのか

最適化手法の系譜では、SGDから出発し、AdaGrad→RMSProp→Adamと「学習率をパラメータごとに自動調整する」方向へ進化してきました。Adamは収束が速く扱いやすい一方で、課題も指摘されるようになります。適応的な学習率は勾配の統計量から計算されるため、パラメータによっては極端に大きな、あるいは極端に小さな学習率が生じることがあり、これが学習の不安定さや、最終的な汎化性能(テストデータでの性能)がSGDに及ばないケースの一因と考えられました。

一方の古典的なSGDは、収束は遅いものの、シンプルな固定学習率でじっくり進むぶん最終性能が良いことが多い。「序盤の速さはAdam、終盤の仕上げはSGD」——この2つの長所を1つのアルゴリズムで実現しようというのがAdaBoundの動機です。

🅰 Adam(序盤に強い)
  • 学習率をパラメータごとに自動調整
  • 収束が速く立ち上がりが良い
  • 学習率が極端な値になることがある
  • 最終的な汎化で伸び悩む場合が指摘された
🅱 SGD(終盤に強い)
  • 固定的な学習率で素直に更新
  • 収束は遅く序盤に時間がかかる
  • 挙動が安定し極端な更新が起きにくい
  • じっくり進むぶん最終性能が良いことが多い

固有の工夫: 学習率の「動的バウンド」

AdaBoundの中心アイデアは、Adamが計算する実効的な学習率を、そのまま使わずに「下限と上限の間」に収める(クリッピングする)ことです。ポイントは、この下限と上限が時間とともに変化する点です。

💡 ポイント
  • 学習の序盤 — 下限は0近く、上限は大きく、幅が広い。Adamの自動調整がほぼそのまま活きる
  • 学習が進むにつれて — 下限は上がり、上限は下がって、幅がだんだん狭まる
  • 学習の終盤 — 上下限がほぼ1つの値に収束し、全パラメータが実質的に同じ固定学習率で更新される=SGDと同様の挙動

こうして「切り替えスイッチ」を人手で操作することなく、Adam的な挙動からSGD的な挙動へ連続的に移行できます。極端な学習率はバウンドで強制的に遮断されるため、学習率の急激な変化や振動も同時に抑えられます。

系譜の中での位置

SGD→AdaGrad→RMSProp/AdaDelta→Adamという流れが「適応性を高める」進化だったのに対し、AdaBoundは「適応性を段階的に手放してSGDへ回帰する」という逆向きの発想を持ち込んだ点がユニークです。同じ論文では、Adamの改良版であるAMSGradに同じバウンド機構を付けたAMSBoundも提案されており、「〜Bound」という名前は「学習率に境界(bound)を設ける」ことに由来します。

💡 具体例で考える

画像分類モデルの訓練を想像してください。素のAdamで訓練すると、序盤は損失が気持ちよく下がるのに、終盤になってもテスト精度が伸びきらない——一方、素のSGDに切り替えると最終精度は出るが、そこに至るまでの訓練が長い、という悩ましい二択に直面することがあります。実務では「途中までAdamで訓練し、あるエポックからSGDへ手動で切り替える」という職人技も使われてきましたが、切り替えのタイミング選びが難しいのが難点でした。AdaBoundはこの切り替えをバウンドの収縮という形で自動化・連続化したものと理解できます。人手のスケジューリングをアルゴリズム自身に埋め込んだ、という点が固有の貢献です。

⚠️ よくある誤解・紛らわしい用語

💡 ポイント
  • AMSBoundとの違い — どちらも「動的バウンド」を使う兄弟手法ですが、AdaBoundはAdamが土台、AMSBoundはAMSGradが土台です。試験で並んだら土台の違いで見分けます。
  • 「勾配」をクリップするのではない — 勾配クリッピング(勾配爆発対策)と混同しがちですが、AdaBoundがバウンドで挟むのは学習率です。対象が違います。
  • 序盤と終盤の対応を逆にしない — 「序盤=Adam的、終盤=SGD的」です。逆に書かれた誤答選択肢が作りやすいポイントです。
  • AdaGrad・AdaDeltaとの名前の混同 — 「Ada」で始まる名前が多いですが、AdaGrad/AdaDeltaは勾配の二乗和(の平均)で学習率を調整する初期の適応的手法、AdaBoundはAdam以後の「SGDとの折衷」という新しい世代です。

📝 試験でのポイント

💡 ポイント
  • 定義問題では「AdamとSGDの良い側面を組み合わせる」「学習率の上限と下限を動的に調整」の2フレーズが正解の目印です。
  • 「訓練の初期はAdamのように、後半はSGDのように振る舞う手法はどれか」という挙動ベースの出題が最も想定されます。
  • AMSBoundとの対比(ベースがAdamかAMSGradか)を問う二択に備えましょう。
  • 目的が「学習の安定性向上(急激な変化や振動の抑制)」である点も、誤答の「学習の高速化のみ」などと区別する材料になります。

📚 まとめ

💡 ポイント
  • AdaBoundは、Adamに動的な学習率の上限・下限(バウンド)を加えた最適化アルゴリズムです。
  • バウンドの幅が学習とともに狭まることで、序盤はAdamのような自動調整、終盤はSGDのような固定学習率へ滑らかに移行します。
  • 狙いは学習率の急激な変化や振動の抑制で、Adamの速さとSGDの安定・汎化の両立を目指した設計です。
  • AMSGradを土台にした兄弟手法AMSBoundとの区別(土台の違い)が試験対策上の要点です。