フランク・ウルフのアルゴリズム

**フランク・ウルフのアルゴリズム** () とは、付き凸最適化問題を反復的一次最適化により解くアルゴリズム である。**条件付き勾配法** ()、 **簡約勾配法** ()、 **凸結合法** () とも呼ばれ、1956年におよびにより提案された。このアルゴリズムでは、各反復毎に目的関数の線形近似を行い、この（定義域を同じくする）線形関数を最適化する方向へと移動する。

## 問題定義
\mathcal{D} をベクトル空間上のコンパクトな凸集合とし、f \colon \mathcal{D} \to \mathbb{R} を微分可能な凸実関数とする。フランク・ウルフのアルゴリズムは、以下の最適化問題を解く。

: Minimize  f(\mathbf{x})
: subject to  \mathbf{x} \in \mathcal{D}.

## アルゴリズム

: 初期化:  k \leftarrow 0 とし、\mathbf{x}_0 \! を \mathcal{D} に含まれる任意の点とする。

: **ステップ 1.** 降下方向の決定: 次の条件を満たす \mathbf{s}_k を解く。
:: Minimize   \mathbf{s}^T \nabla f(\mathbf{x}_k)
:: Subject to \mathbf{s} \in \mathcal{D}
: （この部分問題は、f を \mathbf{x}_k \! 近傍で1次までテイラー近似して得られる線形関数を最小化するものと捉えることができる。）
: **ステップ 2.** ステップサイズの決定: \alpha \leftarrow \frac{2}{k+2} とする。もしくは、 0 \le \alpha \le 1 を満す範囲内で、  f(\mathbf{x}_k+\alpha(\mathbf{s}_k -\mathbf{x}_k)) を最小化するような  を算出する。
: **ステップ 3.** 更新: \mathbf{x}_{k+1}\leftarrow \mathbf{x}_k+\alpha(\mathbf{s}_k-\mathbf{x}_k) とし、 k \leftarrow k+1 とした上でステップ 1. に戻る。

## 性質
たとえば最急降下法など、他の条件付き最適化問題の解法においては各反復毎に許容範囲を射影する必要があるのに対し、フランク・ウルフのアルゴリズムは全ての反復で同一の範囲について部分問題を解けば、解は自動的に許容範囲に収まる。

フランク・ウルフのアルゴリズムの収束性は一般には劣線形である。勾配がなんらかのノルムについてリプシッツ連続であれば、*k* 回の反復の後の目的関数の値と最適値との誤差は O(1/k) となる。部分問題を近似的に解いた場合でも同様の収束速度を実現することが示されている。

本アルゴリズムの各反復は、つねに許容範囲の極点の疎凸結合で表現することができる。このため、機械学習や信号処理および、例えば最小コストフロー問題などのによく用いられる疎貪欲法アルゴリズムを応用することができる。

許容範囲がもし一連の線形拘束条件により与えられている場合、各反復における部分問題は線型計画法により解くことができる。

一般の問題について最悪収束速度 O(1/k) を改善することは不可能であるが、たとえば強凸問題など特定の種類の問題について、より早い収束速度を得ることはできる。

## 解の値の下限と主双対解析
f は凸関数であるから、任意の二点 \mathbf{x}, \mathbf{y} \in \mathcal{D} に対し次の不等式が成立する。

: 
  f(\mathbf{y}) \geq f(\mathbf{x}) +  (\mathbf{y} - \mathbf{x})^T \nabla f(\mathbf{x})


この不等式は（未知の）最適解 \mathbf{x}^*f(\mathbf{x}^*) \ge f(\mathbf{x}) +  (\mathbf{x}^* - \mathbf{x})^T \nabla f(\mathbf{x})ある点 \mathbf{x} について、最適な下限は次のように与えられる。

: 
  \begin{align}
f(\mathbf{x}^*) 
& \ge f(\mathbf{x}) +  (\mathbf{x}^* - \mathbf{x})^T \nabla f(\mathbf{x}) \\ 
&\geq \min_{\mathbf{y} \in D} \left\{ f(\mathbf{x}) +  (\mathbf{y} - \mathbf{x})^T \nabla f(\mathbf{x}) \right\} \\
&= f(\mathbf{x}) - \mathbf{x}^T \nabla f(\mathbf{x}) + \min_{\mathbf{y} \in D} \mathbf{y}^T \nabla f(\mathbf{x})
\end{align}


フランク・ウルフのアルゴリズムは、各反復において上式最終項の最適化問題を解くので、降下方向決定部分問題における解 \mathbf{s}_k を用いて解の下限 l_k を徐々に更新していくことができる。すなわち、 l_0 = - \infty とおくと次のように更新すればよい。

: 
  l_k := \max (l_{k - 1}, f(\mathbf{x}_k) +  (\mathbf{s}_k - \mathbf{x}_k)^T \nabla f(\mathbf{x}_k))


このように未知の最適値の下限を知ることができると、終止条件として用いることができるため実用上有用である。また、各反復においてつねに l_k \leq f(\mathbf{x}^*) \leq f(\mathbf{x}_k) が成立するため、近似の精度を効率的にみつもることができる。

この双対ギャップ、すなわち f(\mathbf{x}_k) と l_k との差も同一の収束速度で減少すること、つまり 
  f(\mathbf{x}_k) - l_k = O(1/k) 
 が成立することが知られている。

## 脚注

## 参考文献
*  （概要論文）
* The Frank–Wolfe algorithm 解説
* .
* Gábor Braun, Alejandro Carderera, Cyrille W. Combettes, Hamed Hassani, Amin Karbasi, Aryan Mokhtari, and  Sebastian Pokutta: *Conditional Gradient Methods: From Core Principles to AI Applications*, SIAM, ISBN 978-1-61197-855-1 (2025).

## 関連項目
* 近接勾配法

## 外部リンク
* Marguerite Frank giving a personal account of the history of the algorithm
* "Some comments on Wilfe's away step", Mathematical Programming, vol.35 (1986),pp.110-119.
* "Pairwise Away Steps for the Frank-Wolfe Algorithm".