| この記事の要点 |
- 最適化は「ある関数を最小(最大)にする変数を求める数学」。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 | シンプル。全データで勾配計算(遅い) |
| SGD | 1 サンプル/ミニバッチで勾配近似 | 速い・ノイズあり・並列化容易 |
| Momentum | v ← β·v + ∇L; w ← w - η·v | 慣性で局所最適・鞍点を脱出しやすい |
| Nesterov | Momentum の改良(先読み) | 収束が速い |
| AdaGrad | パラメータごとに学習率を 勾配の累積で割る | スパース勾配に強い。長期的に学習率が落ちすぎる欠点 |
| RMSProp | AdaGrad を指数移動平均にした版 | 長期学習でも止まりにくい |
| Adam | Momentum + RMSProp | 現代の事実上の標準 |
| AdamW | Adam に重み減衰を正しく分離 | Transformer 系で標準 |
| Newton 法 | ヘシアン(2 階微分)を使う | 収束は速いが大規模 NN には重すぎる |
| L-BFGS | 準ニュートン法 | 小〜中規模問題で強い |
勾配降下法のチューニング要素
| 要素 | 意味と効果 |
| 学習率 (learning rate) η | 1 ステップで動かす量。大きすぎ→発散、小さすぎ→停滞 |
| 学習率スケジューリング | warmup / cosine decay / step decay などで段階的に変化 |
| バッチサイズ | 小→ノイズ大・汎化良 / 大→安定・並列効率良 |
| 重み減衰 (Weight Decay) λ | SGD では L2 正則化と等価(Adam では等価にならない)。過学習を抑える |
| 勾配クリッピング | 勾配の大きさに上限を設けて爆発を防ぐ |
| 勾配累積 (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(ハイパラ) |
関連
同階層のページ
-
線形代数
-
微積分
-
確率統計
-
情報理論
-
最適化