5.

最適化とは?AI 学習を支える勾配降下法・Adam・凸最適化の基礎

編集
この記事の要点
  • 最適化は「ある関数を最小(最大)にする変数を求める数学」。AI の学習はすべて損失関数の最適化問題
  • 中核は 勾配降下法 とその発展形(SGD, Momentum, RMSProp, Adam
  • 制約付き最適化なら ラグランジュ未定乗数法 / KKT 条件。線形計画なら シンプレックス法 / 内点法
  • AI 実装ではライブラリの Optimizer クラスを選ぶだけだが、なぜ Adam が選ばれるかを理解しているとチューニングが速い

 

本稿は AI / 機械学習に必要な最適化 の入門です。AI モデルの学習は 「損失関数を最小にするパラメータを探す」最適化問題そのもの。最適化を理解すれば、なぜ Adam が標準なのか・なぜ収束しないのかが分かるようになります。

なぜ AI に最適化が必要なのか

場面最適化の役割
ニューラルネット学習損失関数を最小にする重み w を探す
SVMマージン最大化(制約付き 2 次計画)
線形回帰最小二乗法(解析解 or 勾配降下)
強化学習期待報酬を最大にする方策を探す
ハイパーパラメータチューニングベイズ最適化 / グリッド / Optuna
推論時の探索ビームサーチ / モンテカルロ木探索
LoRA / プルーニング少ないパラメータで損失を最小化

最適化問題の分類

分類軸種類
制約の有無制約なし / 制約ありNN 学習(制約なし)/ SVM(制約あり)
凸性凸 / 非凸線形回帰(凸)/ NN(非凸)
変数の種類連続 / 離散 / 混合パラメータ調整 / ハイパラ選択
微分可能性滑らか / 非滑らかL2 正則化(滑らか)/ L1 正則化(非滑らか)
確率性決定論的 / 確率的バッチ最適化 / SGD

主要なアルゴリズム

手法更新式の要点特徴
勾配降下法 (GD)w ← w - η·∇Lシンプル。全データで勾配計算(遅い)
SGD1 サンプル/ミニバッチで勾配近似速い・ノイズあり・並列化容易
Momentumv ← β·v + ∇L; w ← w - η·v慣性で局所最適・鞍点を脱出しやすい
NesterovMomentum の改良(先読み)収束が速い
AdaGradパラメータごとに学習率を 勾配の累積で割るスパース勾配に強い。長期的に学習率が落ちすぎる欠点
RMSPropAdaGrad を指数移動平均にした版長期学習でも止まりにくい
AdamMomentum + RMSProp現代の事実上の標準
AdamWAdam に重み減衰を正しく分離Transformer 系で標準
Newton 法ヘシアン(2 階微分)を使う収束は速いが大規模 NN には重すぎる
L-BFGS準ニュートン法小〜中規模問題で強い

勾配降下法のチューニング要素

要素意味と効果
学習率 (learning rate) η1 ステップで動かす量。大きすぎ→発散、小さすぎ→停滞
学習率スケジューリングwarmup / cosine decay / step decay などで段階的に変化
バッチサイズ小→ノイズ大・汎化良 / 大→安定・並列効率良
重み減衰 (Weight Decay) λL2 正則化と等価。過学習を抑える
勾配クリッピング勾配の大きさに上限を設けて爆発を防ぐ
勾配累積 (Gradient Accumulation)少ない GPU メモリで大きなバッチを擬似的に再現

制約付き最適化

手法用途
ラグランジュ未定乗数法等式制約付き最適化(SVM の双対問題など)
KKT 条件不等式制約も含む一般的な最適性条件
線形計画 (LP)線形目的関数 + 線形制約。シンプレックス法 / 内点法
2 次計画 (QP)SVM の主問題など
射影勾配法各ステップ後に制約領域に射影する

離散最適化・ブラックボックス最適化

手法用途
ベイズ最適化評価が高コストなハイパーパラメータ探索
進化計算 / 遺伝的アルゴリズム離散・複雑探索空間
シミュレーテッドアニーリング離散最適化の古典
Optuna / Hyperoptハイパラチューニングの実装

典型コード(PyTorch)

import torch
from torch import optim

model = MyModel()

# Adam optimizer(事実上の標準)
optimizer = optim.AdamW(model.parameters(), lr=1e-3, weight_decay=0.01)

# 学習率スケジューラ(cosine decay)
scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=100)

for epoch in range(100):
    for x, y in loader:
        optimizer.zero_grad()
        loss = criterion(model(x), y)
        loss.backward()
       
        # 勾配クリッピング
        torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
       
        optimizer.step()
    scheduler.step()

学習のステップ

段階学ぶ内容
1. 凸性と局所最適凸関数なら局所最適 = 大域最適、と知っている
2. 勾配降下法勾配の反対方向に動く意味が分かる
3. SGD・Momentum・Adam違いと使い分けが説明できる
4. 学習率スケジューリングwarmup / cosine decay の効果を理解
5. 制約付き最適化SVM の双対問題などラグランジュを理解

つまずきやすいポイント

  • 学習率が一番影響する。まずはここを変える
  • Adam は 1e-3 〜 1e-4、SGD は 1e-2 〜 1e-1 が初期値の目安
  • 非凸最適化(NN)は理論保証がない。実験的に Adam + 適切な学習率が経験的に強い
  • 収束しないときは: 学習率を下げる / 勾配クリッピング / バッチサイズを変える / Optimizer を変える
  • 過学習は最適化の問題ではなく汎化の問題。早期停止 / 正則化 / データ拡張で対処
  • Adam は汎化が SGD に劣ることがある(画像系で SGD + Momentum が選ばれる場面も)

使える教材・ライブラリ

種類名前
教科書(日本語)これなら分かる最適化数学」(金谷健一) / 「機械学習プロフェッショナルシリーズ: 連続最適化」
教科書(英語)「Convex Optimization」(Boyd & Vandenberghe) — 凸最適化の決定版・無料 PDF あり
動画Boyd の Stanford 講義(YouTube 公開)
ライブラリPyTorch torch.optim / SciPy scipy.optimize / CVXPY(凸最適化)/ Optuna(ハイパラ)

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 線形代数
  2. 微積分
  3. 確率統計
  4. 情報理論
  5. 最適化

最近更新/作成されたページ