最適化

Mathematical Optimization

最適化とは

最適化(数理最適化)とは、与えられた制約条件の下で目的関数を最小化(または最大化)する変数の値を求める数学的手法である。工学、経済学、機械学習など幅広い分野で応用される。

図1:最適化問題の一般形式

$$\begin{array}{ll} \textbf{最小化} & f(\mathbf{x}) \\[6pt] \textbf{制約条件} & g_i(\mathbf{x}) \le 0, \quad i = 1, \dots, m \\ & h_j(\mathbf{x}) = 0, \quad j = 1, \dots, p \\ & \mathbf{x} \in X \end{array}$$

最適化問題の分類

  • 線形計画:目的関数と制約がすべて線形
  • 凸最適化:目的関数が凸、実行可能領域が凸集合
  • 非線形計画:目的関数または制約が非線形
  • 整数計画:変数の一部または全部が整数
  • 確率的最適化:不確実性を含む最適化

図2:凸関数と非凸関数

凸関数 大域的最小点 = 局所的最小点 非凸関数 複数の局所的最小点

どこで使われるか

  • 機械学習:損失関数の最小化、ニューラルネットワークの学習
  • オペレーションズリサーチ:生産計画、輸送問題、スケジューリング
  • 金融工学:ポートフォリオ最適化、リスク管理
  • 制御工学:最適制御、モデル予測制御
  • 信号処理:フィルタ設計、圧縮センシング

本シリーズでは、最適化理論の基礎から高度なアルゴリズムまで4段階で体系的に学ぶ。

直感的な例

例1:2次関数の最小化

$$f(x) = x^2 - 4x + 5 = (x - 2)^2 + 1$$

平方完成により、$x = 2$ で最小値 $f(2) = 1$ が直ちに求まる。 これは最も単純な制約なし最適化問題であり、微分を使えば $f'(x) = 2x - 4 = 0$ から同じ結果を得る。

例2:山登り法の直感

霧の中で山頂を目指す登山者を想像しよう。 見える範囲で最も急な上り坂を選んで進む——これが勾配降下法(符号を反転すれば最小化)の直感である。 ただし、目の前の丘が最も高い山とは限らない(局所的最適解の問題)。

例3:制約付き最適化の幾何学

予算制約 $p_1 x_1 + p_2 x_2 \le B$ の下で効用 $u(x_1, x_2)$ を最大化する消費者の問題。 等高線(無差別曲線)と制約領域の接点が最適解であり、 接点では勾配と制約の法線が平行になる——ラグランジュの未定乗数法の幾何学的意味である。

レベル別コンテンツ

主要アルゴリズムの比較

アルゴリズム 収束速度 1反復のコスト メモリ 適用範囲
勾配降下法 線形 $O(n)$ $O(n)$ 大規模・滑らかな目的関数
確率的勾配降下法 (SGD) 準線形 $O(n)$ $O(n)$ 大規模データ・機械学習
共役勾配法 超線形 $O(n)$ $O(n)$ 大規模な2次関数・対称正定値系
ニュートン法 2次 $O(n^3)$ $O(n^2)$ 小〜中規模・2回微分可能
準ニュートン法 (BFGS) 超線形 $O(n^2)$ $O(n^2)$ 中規模・1階微分のみ
L-BFGS 超線形 $O(mn)$ $O(mn)$ 大規模・メモリ制約あり
信頼領域法 2次 $O(n^3)$ $O(n^2)$ 非凸問題・頑健な収束
Nelder-Mead 法 準線形 $O(n)$ $O(n^2)$ 微分不可能・低次元
内点法 多項式 $O(n^3)$ $O(n^2)$ 線形計画・凸2次計画
シンプレックス法 (最悪指数) $O(mn)$ $O(mn)$ 線形計画・実用上高速
遺伝的アルゴリズム 確率的 $O(Nn)$ $O(Nn)$ ブラックボックス・組合せ最適化
焼きなまし法 確率的 $O(n)$ $O(n)$ 離散・連続の非凸問題

$n$:変数の次元、$m$:制約数またはメモリサイズ、$N$:集団サイズ。 収束速度は十分滑らかな凸問題での典型値。

主要な概念・公式

勾配の定義

$$\nabla f(x) = \left( \frac{\partial f}{\partial x_1}, \ldots, \frac{\partial f}{\partial x_n} \right)^T$$

1次の最適性条件

$$\nabla f(x^*) = 0$$

勾配降下法

$$x_{k+1} = x_k - \alpha_k \nabla f(x_k)$$

ラグランジアン

$$L(x, \lambda, \mu) = f(x) + \sum_i \lambda_i g_i(x) + \sum_j \mu_j h_j(x)$$

KKT条件

$$\nabla f(x^*) + \sum_i \lambda_i^* \nabla g_i(x^*) + \sum_j \mu_j^* \nabla h_j(x^*) = 0$$

$$\lambda_i^* g_i(x^*) = 0, \quad \lambda_i^* \geq 0$$

凸関数の定義

$$f(\theta x + (1-\theta)y) \leq \theta f(x) + (1-\theta) f(y)$$

($0 \leq \theta \leq 1$)

ヘッセ行列(2次の最適性条件)

$$\nabla^2 f(x^*) = \left[\frac{\partial^2 f}{\partial x_i \partial x_j}\right] \succeq 0$$

停留点 $x^*$ が極小点であるための必要条件

強凸性

$$f(y) \geq f(x) + \nabla f(x)^T(y - x) + \frac{m}{2}\|y - x\|^2$$

($m > 0$:強凸パラメータ。大域的最小点が一意に存在)

双対ギャップ

$$\eta = f(x) - g(\lambda, \mu) \geq 0$$

($f$:主問題の値、$g$:双対問題の値。$\eta = 0$ で強双対性)

ニュートン法の更新

$$x_{k+1} = x_k - [\nabla^2 f(x_k)]^{-1} \nabla f(x_k)$$

双対問題

$$\max_{\lambda \geq 0, \mu} \min_{x} L(x, \lambda, \mu)$$

弱双対性は常に成立。凸問題では強双対性($\eta = 0$)

前提知識

  • 入門:微分積分(1変数・多変数)、線形代数の基礎
  • 初級:入門の内容、行列論
  • 中級:初級の内容、数値解析の基礎
  • 上級:中級の内容、関数解析、組合せ論