[本文鏈接:http://www.cnblogs.com/breezedeus/p/3426757.html,轉載請注明出處]
假設我們要求解以下的最小化問題:
\( \min\limits_x f(x) \) 。
如果\( f(x) \)可導,那么一個簡單的方法是使用Gradient Descent (GD)方法,也即使用以下的式子進行迭代求解:
\( x_{k+1} := x_{k} - \alpha \nabla f(x_{k}) \) 。
對GD的一種解釋是\( x_{k} \)沿着當前目標函數的下降方向走一小段,只要步子足夠小,總能保證得到 \( f(x_{k+1}) \leq f(x_{k}) \)。
如果\( \nabla f(x) \)滿足L-Lipschitz,即:
\( ||\nabla f(x') - \nabla f(x)|| \leq L ||x’ - x|| \),
那么我們可以在點\( x_{k} \)附近把\( f(x) \)近似為:
\( \hat{f}(x, x_k) \doteq f(x_k) + \langle \nabla f(x_k), x - x_k \rangle + \frac{L}{2} ||x - x_k||^2 \)。
把上面式子中各項重新排列下,可以得到:
顯然\( \hat{f}(x, x_k) \)的最小值在
\( x_{k+1} = x_k - \frac 1 L \nabla f(x_k) \)
獲得。所以,從這個角度上看的話,GD的每次迭代是在最小化原目標的一個二次近似函數。
在很多最小化問題中,我們往往會加入非光滑的懲罰項\( g(x) \),比如常見的L1懲罰:\( g(x) = ||x||_1 \)。這個時候,GD就不好直接推廣了。但上面的二次近似思想卻可以推廣到這種情況:
這就是所謂的proximal gradient descent(PGD)算法。只要給定\( g(x) \)時下面的最小化問題能容易地求解,PGD就能高效地使用:
比如\( g(x) = ||x||_1 \)時, \(\text{prox}_{\mu g} (z)\)能夠通過所謂的soft thresholding獲得:
\( \text{prox}_{\mu g} (z) = \text{sign}(z) \max\{|z| - \mu, \ 0\} \)。
[References]
[1] John Wright. Lecture III: Algorithms, 2013.