梯度下降
考慮一個無約束的,平滑的凸優化問題
xminf(x)
其中,f是凸函數,且在定義域dom(f)=Rn上是可微的。
算法
選擇一個初始點x(0)∈Rn,重複操作:
x(k)=x(k−1)−tk⋅∇f(x(k−1)), k=1,2,3.,..
直到達到某閾值後停止。梯度下降法就是沿着梯度減小的方向,每次走一定的步長,直到到達最優點爲止。
梯度下降的解釋
在每一次迭代中,對當前點做二次泰勒展開:
f(y)≈f(x)+∇f(x)T(y−x)+2t1∥y−x∥22
這裏用t1I代替了二次項係數海森矩陣∇2f(x)。
選擇下一個點y=x+去最小化該二次近似可以得到:
x+=x−t∇f(x)
所以,梯度下降相當於在函數的每個點處都做二次近似,然後求解最小點的位置。
步長的選擇
既然梯度下降每次迭代都要走一定的步長,那這個步長要怎麼選擇呢?
一種簡單的方式是把步長固定,每次都移動常數距離,tk=t, for all k=1,2,3,...。但是這樣存在問題,如果t太大,梯度下降可能會發散而不收斂;如果t太小,梯度下降就會收斂很慢。只有t選得“剛好”時,才能兼顧收斂性和收斂速度。另一種方法可以自適應地調整步長——回溯線性搜索
回溯線性搜索
- 首先固定參數0<β<1和0<α≤1/2
- 在每次迭代中,首先設置t=tinit,然後只要:
f(x−t∇f(x))>f(x)−αt∥∇f(x)∥22就收縮t=βt
- 重複步驟2,直到滿足條件爲止。然後進行梯度下降更新:
x+=x−t∇f(x)
在實踐中可以進一步簡化α=1/2。
收斂性分析
已知f是凸函數,且在定義域dom(f)=Rn上是可微的。而且∇f是關於常數L>0 Lipschitz連續的:
∥∇f(x)−∇f(y)∥2≤L∥x−y∥2for any x,y(或者說二次微分∇2f(x)⪯LI)
那麼,梯度下降有O(1/k)的收斂率,k爲迭代次數。也就是說,在O(1/ϵ)次迭代後,可以找到ϵ誤差的次優點。
如果f是強凸的,即存在m>0,使得f(x)−2m∥x∥22是凸的(或者說二次微分∇2f(x)⪰mI),那麼收斂率將會達到指數收斂率O(γk),0<γ<1。也就是說,在O(log(1/ϵ))次迭代後,可以找到ϵ誤差的次優點。
優缺點
優點
- 方法簡單,每次迭代都很快;
- 對於良態的,強凸問題有很快的收斂速度。
缺點
- 由於許多問題是非強凸或良態的,因此梯度下降往往需要很多次迭代,收斂速度很慢;
- 不能應對不可微的函數。
在非凸問題上的分析
假設f是可微的,且∇f是Lipschitz連續的,但是非凸的。在這種情況下,我們不再尋找最優點,而是尋找穩定點解,那麼梯度下降有O(1/k)(或O(1/ϵ2))的收斂率。
參考資料
CMU:Convex Optimization