機械学習のための最適化入門
機械学習における最適化は、損失関数を最小化することでモデルの予測性能を得るための中核である。微分・凸性・確率性という3つの視点を押さえると、多様な手法が一つの枠組みで理解できるのである。
参考ドキュメント
- 東京大学(講義資料), 情報数理科学 VII 最適化の手法(PDF) https://ml.c.u-tokyo.ac.jp/wp-content/uploads/2020/05/optimization.pdf
- Boyd, S. and Vandenberghe, L., Convex Optimization(書籍ページ) https://stanford.edu/~boyd/cvxbook/
- Bottou, L., Curtis, F. E., and Nocedal, J., Optimization Methods for Large-Scale Machine Learning(SIAM Review) https://epubs.siam.org/doi/10.1137/16M1080173
1. 最適化が機械学習で果たす役割
機械学習の学習は、多くの場合「ある目的関数を小さくする」問題として表現される。目的関数は、データに対する誤差(損失)と、複雑さを抑える項(正則化)から構成されるのが基本である。
データ
:損失関数(例:二乗誤差、ロジスティック損失、交差エントロピー) :正則化(例: 、 、群正則化) :正則化の強さ
深層学習では目的関数が非凸になることが多い一方、線形回帰やリッジ回帰、SVM の一部などは凸最適化として扱えることが多い。凸か非凸かにより、理論保証やアルゴリズム設計の発想が変わるのである。
2. 最適化問題の分類(制約なし・制約付き・確率的)
最適化の基本形は以下である。
制約なし最小化
制約付き最小化
機械学習では、データが巨大であるため目的関数の勾配
期待損失の最小化として
を考え、ミニバッチで近似して更新するのが基本となる。
3. 勾配・ヘッセ行列の意味
3.1 勾配(gradient)の意味
関数
であり、
3.2 ヘッセ行列(Hessian)の意味
2階微分をまとめたヘッセ行列
である。曲率が大きい方向では大きく動くと増加しやすく、曲率が小さい方向では大きく動ける。2階法はこの曲率情報を使うが、計算量・メモリが大きくなるため、準2階法や近似が多用されるのである。
4. 凸性・滑らかさ・強凸性
最適化の収束議論では、次の性質が基礎になる。
凸性(convexity)
-滑らか(勾配リプシッツ) -強凸
直観として、凸性は「谷が一つ」であることを意味し、強凸性は「谷底が十分に丸い」ことを意味する。滑らかさは「勾配が急に変わりすぎない」ことを意味する。これらが揃うと、単純な一階法でも収束速度が議論できるのである。
5. 一階法:勾配だけで進む
5.1 勾配降下法
最も基本の更新は
である。
5.2 確率的勾配法(SGD)
全データの損失平均
である。SGD は
と近似更新する。ミニバッチ
である。勾配推定にばらつきがあるため、学習率を一定にすると「最適解の近傍に漂う」振る舞いになりやすい。学習率減衰(例:
5.3 モメンタム(heavy-ball)と Nesterov 加速
モメンタムは速度
とする。
Nesterov 加速(NAG)は先読み点で勾配を評価する形式として表されることが多い。
凸最適化では
6. 適応学習率法:AdaGrad・RMSProp・Adam・AdamW
勾配のスケールが座標ごとに異なる場合、単一の学習率では進み方が不均一になりやすい。適応学習率法は、各座標に異なるスケーリングを入れて更新する発想である。
6.1 AdaGrad
勾配
を用いて
と更新する。
6.2 RMSProp
AdaGrad は
6.3 Adam
Adam は一次モーメント
初期バイアス補正
更新は
である。学習率調整が容易で、深層学習で広く使われるが、収束性や汎化の性質は問題設定で変わりうる。
6.4 AdamW(重み減衰の分離)
のように扱う(表現は流儀で異なる)。深層学習の標準設定として採用されることが増えている。
7. 二階法・準二階法
7.1 Newton 法
Newton 法は2次近似に基づき
とする。標準的には速いが、ヘッセ行列の構築や線形方程式の解法が高コストであり、大規模深層学習ではそのままでは使いにくい。
7.2 準二階法(BFGS, L-BFGS)
ヘッセ逆行列
7.3 信頼領域法
2次モデルが当てになりやすい範囲(信頼領域)だけで最小化する考え方である。線形代数計算が中心となり、理論的整理が進んでいる。
8. 制約付き最適化
8.1 ラグランジュ関数
不等式制約
を導入する。凸問題では KKT 条件が最適性条件として重要である。
- 一次条件:
- 実行可能性:
- 双対実行可能性:
- 相補性:
8.2 射影勾配法
制約集合
と更新する。
9. 正則化と近接勾配法: ・スパース性・ADMM
のように「滑らかな項 + 非滑らかな項」に分かれる場合、近接勾配法が基本となる。
ここで近接作用素(prox)は
であり、ソフトしきい値
として計算できる。凸最適化の枠組みでは、ADMM(交互方向乗数法)などの分解法も広く使われる。
10. 収束の見方
最適化の進み具合は、目的関数値
- 勾配ノルム:
- 制約なし問題で
は最適性の必要条件である。 - 近接勾配法では「近接勾配写像」のノルムが停留性の指標として使われる。
- 期待値で議論する場合:
などが扱われる。
深層学習では、訓練損失と評価損失(別データでの損失)の両方を記録し、最適化の進行と汎化の関係を観察するのが自然である。
11. 学習率設計
学習率
- 一定:
- 逆平方根:
- ステップ減衰:一定期間ごとに
を小さくする - コサイン減衰:滑らかに減衰させる
- ウォームアップ:初期に小さく、徐々に大きくする
などがある。理論では凸・強凸・確率性の仮定の下で適切な減衰が導かれることが多く、経験則はそこに工学的調整を加えたものとみなせる。
12. 主要手法の比較
| 手法 | 使う情報 | 1ステップ計算 | 主な利点 | 主な留意点 |
|---|---|---|---|---|
| GD | 全勾配 | 高い(全データ) | 解析が明快、安定 | 大規模データで重い |
| SGD | 近似勾配 | 低い | 大規模に強い | ばらつきがある |
| Momentum | 近似勾配+速度 | 低い | ジグザグ抑制、加速 | ハイパラ調整が必要 |
| NAG | 先読み勾配 | 低い | 凸で加速理論 | 実装流儀が複数 |
| AdaGrad | 二乗勾配和 | 低い | 疎な特徴に強い | 学習率が早く縮みやすい |
| RMSProp | 二乗勾配EMA | 低い | 非定常に強い | 理論整理は課題が残る |
| Adam | 1次/2次EMA | 低い | 標準設定が広く普及 | 問題設定で性質が変わる |
| AdamW | Adam+分離減衰 | 低い | 重み減衰の整合性 | 減衰係数の扱いに注意 |
| Newton | 勾配+ヘッセ | 非常に高い | 収束が速い場合がある | 大規模で難しい |
| L-BFGS | 勾配+低メモリ近似 | 中 | 大規模でも使える場合 | ミニバッチと相性に注意 |
| Prox(ISTA) | 勾配+prox | 中 | ステップ幅条件が重要 | |
| ADMM | 分解+双対 | 中〜高 | 構造を活かせる | 収束は設定に依存 |
13. ロジスティック回帰をSGDで学習
以下は、二値分類のロジスティック回帰を NumPy だけで SGD 学習し、損失推移を描く例である。
import numpy as np
import matplotlib.pyplot as plt
# データ生成(合成)
rng = np.random.default_rng(0)
n, d = 2000, 20
X = rng.normal(size=(n, d))
w_true = rng.normal(size=d)
logits = X @ w_true
p = 1 / (1 + np.exp(-logits))
y = rng.binomial(1, p).astype(np.float64)
# ロジスティック損失(負の対数尤度)+L2正則化
def loss_and_grad(w, Xb, yb, lam):
z = Xb @ w
s = 1 / (1 + np.exp(-z))
# loss: 平均
eps = 1e-12
loss = -np.mean(yb * np.log(s + eps) + (1 - yb) * np.log(1 - s + eps)) + 0.5 * lam * np.sum(w**2)
grad = (Xb.T @ (s - yb)) / len(yb) + lam * w
return loss, grad
# SGD
w = np.zeros(d)
lam = 1e-3
lr0 = 0.2
batch = 64
T = 500
losses = []
for t in range(T):
idx = rng.integers(0, n, size=batch)
Xb, yb = X[idx], y[idx]
lr = lr0 / np.sqrt(t + 1) # 逆平方根減衰
L, g = loss_and_grad(w, Xb, yb, lam)
w = w - lr * g
losses.append(L)
plt.plot(losses)
plt.xlabel("iteration")
plt.ylabel("mini-batch loss")
plt.tight_layout()
plt.show()この例では、更新式
まとめと展望
機械学習の最適化は、(i) 目的関数の定式化、(ii) 勾配・曲率の幾何、(iii) 凸性や確率性の仮定、という三層で整理すると見通しが立つのである。GD/SGD とその加速(モメンタム、Nesterov)、適応学習率(Adam/AdamW)、さらに凸最適化の近接法・双対性までを同じ言語で扱えるようになると、モデルやデータ規模が変わっても選択と設計が一貫して行える。
今後の展望として、(1) 非凸最適化での停留点回避や曲率利用、(2) 分散学習における通信と最適化の結合、(3) 目的関数そのものの設計(正則化、ロバスト化、制約化)を含む統合的最適化、が重要になる。これらはアルゴリズムだけでなく、数値線形代数・確率過程・情報理論との接続で理解が深まり、より大規模で安定な学習へつながるのである。
参考文献
- Kingma, D. P. and Ba, J., Adam: A Method for Stochastic Optimization(arXiv PDF) https://arxiv.org/pdf/1412.6980
- Loshchilov, I. and Hutter, F., Decoupled Weight Decay Regularization(OpenReview) https://openreview.net/forum?id=Bkg6RiCqY7
- Nocedal, J. and Wright, S. J., Numerical Optimization, 2nd ed.(PDFの公開版) https://www.math.uci.edu/~qnie/Publications/NumericalOptimization.pdf
- Nesterov, Y., A method of solving a convex programming problem with convergence rate o(1/k^2)(1983, 英訳PDF) https://hengshuaiyao.github.io/papers/nesterov83.pdf
- Tohoku University(土屋氏資料), 凸最適化の情報幾何と多項式時間内点法(PDF) https://www.math.is.tohoku.ac.jp/~amf/workshops/pdf/tsuchiya.pdf
- 愛媛大学(二宮氏資料), 深層学習の基礎と演習(PDF) https://aiweb.cs.ehime-u.ac.jp/~ninomiya/enpitpro/deeplearning.pdf