[本文链接:http://www.cnblogs.com/breezedeus/p/3426757.html,转载请注明出处]
假设我们要求解以下的最小化问题:
minxf(x)
如果 f(x) 可导,那么一个简单的方法是使用 Gradient Descent (GD)方法,也即使用以下的式子进行迭代求解:
xk+1:=xk−α∇f(xk)。
对GD的一种解释是 xk 沿着当前目标函数的下降方向走一小段,只要步子足够小,总能保证得到 f(xk+1)≤f(xk)。
如果
∇f(x)
满足L-Lipschitz,即:
||∇f(x′)−∇f(x)||≤L||x′−x||,
那么我们可以在点 xk 附近把 f(x) 近似为:
f^(x,xk)≐f(xk)+⟨∇f(xk),x−xk⟩+L2||x−xk||2。
把上面式子中各项重新排列下,可以得到:
f^(x,xk)≐f(xk)+⟨∇f(xk),x−xk⟩+L2||x−xk||2=L2||x−(xk−1L∇f(xk))||22+φ(xk)。
这里 φ(xk) 不依赖于x,因此可以忽略。
显然,
f^(x,xk)
的最小值在
xk+1=xk−1L∇f(xk)
获得。所以,从这个角度看的话, GD的每次迭代是在最小化原目标函数的一个二次近似函数。

在很多最小化问题中,我们往往会加入非光滑的惩罚项 g(x) ,比如常见的 L1 惩罚: g(x)=||x||1 。这个时候,GD就不好直接推广了。但上面的二次近似思想却可以推广到这种情况:
xk+1=argminxF^(x,xk)=argminxL2||x−(xk−1L∇f(xk))||22+g(x)
这就是所谓的 Proximal Gradient Descent (PGD)算法。只要给定 g(x) 时下面的最小化问题能容易地求解,PGD就能高效的使用:
proxug(z)=argminx12||x−z||22+μg(x)。
比如 g(x)=||x||1 时, proxug(z) 能够通过所谓的 soft thresholding获得:
proxug(z)=sign(z)max{|z|−μ,0}。
[Reference]
- John Wright. Lecture III: Algorithms, 2013.