凸最適化理論
概要
凸最適化は最適化理論における最も重要な分野の一つです。凸性という特別な性質により、局所最適解が大域最適解となることが保証され、効率的なアルゴリズムが存在します。
凸集合(Convex Set)
定義と基本性質
凸集合の定義: 任意の2点 を含む集合 に対して、線分 ()も集合内に含まれるとき、集合 を凸集合と呼びます。
直感的理解
凸集合は「内側に向かって凹んでいない」集合です。集合内の任意の2点を結ぶ直線が完全に集合内に収まります。
凸集合の例
基本的な例
- ユークリッド空間の球:
- 直方体(超立方体):
- 半空間:
- アフィン集合:
重要な性質
- 凸集合の交集合は凸集合
- 凸集合のアフィン変換は凸集合
- 凸集合の凸結合は凸集合
凸集合の定義は線形結合の概念と密接に関連しています。 という制約により、2点間の「内挿」が表現されます。
凸包(Convex Hull)
集合 の凸包 は、 を含む最小の凸集合です:
凸関数(Convex Function)
定義
関数 が凸集合 上で定義されていて、以下の条件を満たすとき、 を凸関数と呼びます:
すべての および に対して成り立ちます。
幾何学的解釈
凸関数のグラフは「上に膨らむ」形状を持ち、任意の2点を結ぶ線分が常にグラフの上側に位置します。
凸関数の例
基本的な例
- 二次関数: ( 上)
- 指数関数: ( 上)
- 絶対値関数: ( 上)
- ノルム関数: ()
- 二次形式: ()
合成による凸関数の構成
- 正の線形結合: ()
- 最大値:
- 合成関数: 特定の条件下での合成
凸関数の判定法
一次条件(勾配条件)
が微分可能な場合、以下が成り立つとき は凸関数:
この条件は、接線が関数の下界となることを示します。
二次条件(ヘッセ行列条件)
が二回微分可能な場合、以下が成り立つとき は凸関数:
ここで はヘッセ行列(二次微分行列)です。
(正定値)の場合、 は厳密凸関数となり、最適解が一意に決まります。
凸計画問題(Convex Optimization Problem)
定義
目的関数が凸関数で、制約条件が凸集合で表される最適化問題を凸計画問題と呼びます:
ここで:
- は凸関数(目的関数)
- は凸集合(制約集合)
標準形
より一般的な凸計画問題の標準形は以下のように表現されます:
ここで:
- は凸関数
- はアフィン関数()
凸最適化の基本定理
定理: 凸計画問題において、局所最適解は大域最適解である。
証明のアイデア: 局所最適解 が大域最適解でないと仮定すると、より良い点 が存在する。凸性により、 と を結ぶ線分上の点で より良い目的関数値を持つ点が の近傍に存在し、局所最適性に矛盾。
この定理により、凸問題では局所探索アルゴリズムで大域最適解を求めることができます。
典型的な凸計画問題
線形計画問題(LP: Linear Programming)
二次計画問題(QP: Quadratic Programming)
ここで
LASSO回帰
解法アルゴリズム
内点法(Interior Point Methods)
- 多項式時間アルゴリズム
- 大規模問題に有効
- 制約の内部を通る経路で最適解に収束
勾配法
- 単純で実装が容易
- 収束速度は線形
- 大規模問題での並列化が可能
近接勾配法(Proximal Gradient Methods)
- 非平滑凸関数に対応
- 構造を利用した効率的な解法
- 機械学習での応用が広い
双対理論
ラグランジュ双対
凸計画問題のラグランジュ関数は以下で定義されます:
双対関数は:
双対問題
元の問題(主問題)に対する双対問題は:
強双対性
凸問題では、適当な制約想定(スレーター条件など)の下で強双対性が成り立ちます:
双対理論は最適性条件の導出、アルゴリズムの設計、感度解析などに重要な役割を果たします。
KKT条件
最適性の必要十分条件
凸計画問題において、点 が最適解であるための必要十分条件はKKT条件(Karush-Kuhn-Tucker条件)です:
-
停留条件:
-
実行可能性: ,
-
双対実行可能性:
-
相補性:
経済学的解釈
- : 制約 のシャドウ価格(限界価値)
- 相補性: 制約が有効でない場合、そのシャドウ価格は0
応用例
機械学習での応用
サポートベクターマシン(SVM)
ロジスティック回帰
ポートフォリオ最適化
マルコビッツの平均分散モデル
ここで:
- : ポートフォリオウェイト
- : 共分散行列
- : 期待収益率ベクトル
- : 目標収益率
数値解法の実装
Python実装例
import cvxpy as cp
import numpy as np
# 二次計画問題の例
def solve_quadratic_program(Q, c, A, b):
"""
min (1/2)x^T Q x + c^T x
s.t. Ax <= b
"""
n = Q.shape[0]
x = cp.Variable(n)
objective = cp.Minimize(0.5 * cp.quad_form(x, Q) + c.T @ x)
constraints = [A @ x <= b]
problem = cp.Problem(objective, constraints)
problem.solve()
return x.value, problem.value
# LASSO回帰の例
def solve_lasso(A, b, lambda_reg):
"""
min (1/2)||Ax - b||_2^2 + λ||x||_1
"""
m, n = A.shape
x = cp.Variable(n)
objective = cp.Minimize(
0.5 * cp.sum_squares(A @ x - b) + lambda_reg * cp.norm(x, 1)
)
problem = cp.Problem(objective)
problem.solve()
return x.value, problem.value
MATLAB実装例
% 二次計画問題
function [x, fval] = solve_qp_matlab(Q, c, A, b)
options = optimoptions('quadprog', 'Display', 'off');
[x, fval] = quadprog(Q, c, A, b, [], [], [], [], [], options);
end
% 線形計画問題
function [x, fval] = solve_lp_matlab(c, A, b)
options = optimoptions('linprog', 'Display', 'off');
[x, fval] = linprog(c, A, b, [], [], [], [], options);
end
高度なトピック
半正定値計画(SDP)
半正定値計画問題は凸最適化の重要な拡張です:
ここで は が半正定値行列であることを表します。
錐計画(Conic Programming)
一般的な錐計画問題:
ここで は凸錐です。
ロバスト最適化
不確実性を考慮した最適化:
多くの場合、適切な不確実性集合 の選択により凸問題となります。
まとめ
凸最適化理論の主要なポイント:
- 凸集合と凸関数の基本概念の理解
- 局所最適解 = 大域最適解という強力な性質
- KKT条件による最適性の特徴づけ
- 双対理論の理論的・実践的重要性
- 効率的なアルゴリズムの存在
- 幅広い応用分野での有用性
参考文献
- Boyd, S., & Vandenberghe, L. (2004). Convex Optimization. Cambridge University Press.
- Rockafellar, R. T. (1970). Convex Analysis. Princeton University Press.
- Ben-Tal, A., & Nemirovski, A. (2001). Lectures on Modern Convex Optimization. SIAM.
- Beck, A. (2017). First-Order Methods in Optimization. SIAM.