多様体上の最適化の概論
最適化問題とは
- 集合 X 上で定義された実数値関数 f をある集合 \Omega \subset X 上で最小化する問題
- f を目的関数という
- x\in \Omega を制約条件という
- 変数 x を決定変数という
- \Omega を実行可能集合といい, x\in \Omega を実行可能界という
- 無制約最適化問題と, 制約付き最適化問題がある
- \Omega = X のときと, そうでないとき
最適化問題における制約条件と多様体
例えば, n 次元ユークリッド空間 \mathbb{R}^n における制約条件 \mathbf{x}^T \mathbf{x}=1 が定められていると見る代わりに, n 次元球面 S^{n-1} における無制約最適化問題とみなすことができる
- ユークリッド空間 \mathbb{R}^n における制約問題では, 最急降下法などの無制約最適化アルゴリズムは使えない
- そのため, 3章で学ぶようなバリア法などを使う必要が生じる
- 無制約最適化アルゴリズムを多様体上に拡張できれば, 最急降下法などの収束性を引き継ぐことが期待できる
最適化問題に現れる多様体の例
一旦, 多様体の構造は入れずに単に集合として例を挙げる
- \mathbb{R}^n … n 次の実ベクトル全体
- \mathbb{R}^{m\times n} … m\times n 実行列全体
- \mathrm{Sym}(n) … n 次の実対称行列全体
- \mathrm{Skew}(n) … n 次の実歪対称行列全体
- S^{n-1}=\{\mathbf{x}\in \mathbb{R}^n \mid \| \mathbf{x} \| = 1\} … (n-1) 次元球面
- O(n)=\{X\in \mathbb{R}^{m\times n} \mid X^TX =I_n\} … n 次直交群
- シュティーフェル多様体
- 一般化シュティーフィル多様体
- グラスマン多様体
- n 次正定値対称行列全体
多様体上の最適化の応用問題例
固有値分解への応用
- 第一固有値に対応するを求めるレイリー商の最小化問題は単位球面における最小化問題
- p < n 個の固有値に対応する固有ベクトルを求めるのも, シュティーフェル多様体上の最適化問題になる(命題9.2.1)
- 直交行列による同一視のもとで, グラスマン多様体上の最適化問題と帰着される
特異値分解
- 対称行列でも正方行列でもない場合
- シュティーフェル多様体の積多様体における最適化問題とみなせる(命題9.2.3)
主成分分析
- 上の事実を組み合わせるとできる
混合正規分布モデルにおける最尤推定
- 前提
- n 変量からなるデータが K 個の正規分布が咬合された確率分布から生成されたと仮定する.
- 混合の重みは総和が 1 となる \mathbf{w}=[w_k]_k\in \mathbb{R}^K によって表し
- 各 k=1,2,\ldots ,K に対する重みは w_k>0とし, 多変量正規分布は平均ベクトル \mathbf{\mu}_k\in \mathbb{R}^n, 分散共分散行列 \Sigma_k \in \mathrm{Sym}_{++}(n) を持つものとする
以上の条件のもとで, 最尤推定量を求める問題は次のように定式化される
- \Delta_K=\{\mathbf{w}\in \mathbb{R}^K \mid \mathbf{1}_K^T \mathbf{w}=1, \mathbf{w} >0\} とおく
- 積多様体 \Delta_K\times (\mathbb{R}^n)^K\times (\mathrm{Sym}_{++}(n))^K 上の無条件最適化問題として
- 目的関数は以下のようになる(対数尤度を取り, 最小化問題なので符号を入れ替えている) f(\mathbf{w}, \mathbf{\mu}_1, \mathbf{\mu}_2,\ldots, \mathbf{\mu}_K, \Sigma_1, \Sigma_2,\ldots, \Sigma_K) = -\sum_{t=1}^T \log\left(\sum_{k=1}^K w_k p(\mathbf{x_t}; \mathbf{\mu}_k, \Sigma_k)\right)
このようにしておくと, ユークリッド空間における最小化問題とみなすよりも, 分散共分散行列が正値対称行列であることが扱いやすいらしい
非負主成分分析
発展的らしいので一旦スルー
多様体上の最適化のためのライブラリ
- MATLAB では Manopt
- Python では Pymanopt
- Julia では Manopt.jl
- C++ のための ROPTLIB
- R では ManifoldOptim
- 書籍のサンプルは MATLAB で Manopt を使って計算した例が載っている
- 実際のコードや導入方法は著者によるサポートページにある