1 梯度下降
1.1 SGD
算法介紹
SGD(Stochasitic Gradient Descent)很簡單,就是沿着梯度的反方向更新參數,優化目標函數。優化公式如下:
其中 爲當前位置的梯度,也就是損失函數關於參數的一階導數
優點
操作簡單,計算量小,在損失函數是凸函數的情況下能夠保證收斂到一個較好的全局最優解
缺點
- 是個定值(在最原始的版本),它的選取直接決定了解的好壞,過小會導致收斂太慢,過大會導致震盪而無法收斂到最優解。
- 對於非凸問題,只能收斂到局部最優,並且沒有任何擺脫局部最優的能力(一旦梯度爲0就不會再有任何變化)
對於非凸的優化問題,我們可以將其轉化爲對偶問題,對偶函數一定是凹函數,但是這樣求出來的解並不等價於原函數的解,只是原函數的一個確下界
1.2 Momentum
算法介紹
Momentum改進自SGD,讓每一次的參數更新方向不僅取決於當前位置的梯度,還受到上一次參數更新方向的影響。 Momentum的意思就是動量,也就意味着上一次更新的方向對本次更新仍然有影響。優點
一定程度上緩解了SGD收斂不穩定的問題,並且有一定的擺脫局部最優的能力(當前梯度爲0時,仍可能按照上次迭代的方向衝出局部最優點),直觀上理解,它可以讓每次迭代的“掉頭方向不是那個大“。缺點
這裏又多了另外一個超參數 需要我們設置,它的選取同樣會影響到結果。一般取0.9
1.3 Nestrov Momentum
算法介紹
Nestrov Momentum的意義在於,既然下一次一定會更新 ,那麼求梯度的時候就可以用提前位置的梯度 ,則:優點
實驗中,一般用Nestrov Momentum比較多,由於結合了二階導數的信息,收斂比Momentum要更快一些。缺點
仍然是多了一個超參數需要調整2 自適應方法
2.1 Adagrad
算法介紹
其中, 是一個cache,保存了各位置梯度的平方, 一般取值爲 ,爲了防止分母取零。優點
Adagrad不需要手動調節學習率 ,因爲整體來看,學習率爲 ,它會根據 的大小發生自適應的變化(不同位置上變化的幅度不同)。缺點
- 學習率單調遞減,在迭代後期可能導致學習率變得特別小而導致收斂及其緩慢。
- 同樣的,我們還需要手動設置初始
2.2 RMSprop
算法介紹
優點
- 可以看出,Rmsprop與Adagrad類似,只不過cache的計算略微複雜一些,利用了一個衰減因子 ,這樣可以使得c_i並不是一直處於增大的情況,可以解決Adagrad學習率迅速減小的問題。其中,衰減因子 通常取值爲[0.9,0.99,0.999]。
- 不再需要手動調整學習率,可以根據 的變化自動調整
缺點
同樣的,我們還需要手動設置初始
2.3 Adadelta
算法介紹
優點
- Adadelta與Rmsprop類似,自適應的學習率
- 不需要手動設置
缺點
後期容易在小範圍內產生震盪
2.4 Adam
算法介紹
在參數更新的最初幾步中,由於初始化 與 ,爲了防止最初幾步的更新向0偏差,Adam利用 的t次冪來修正這種偏差(t每次更新加1)。
優點
結合Momentum和Adaprop,穩定性好,同時相比於Adagrad,不用存儲全局所有的梯度,適合處理大規模數據
缺點
有三個超參數需要調整
通常 取值爲0.9, 取值爲0.999, 取值爲
3 牛頓法與擬牛頓法
3.1 牛頓法
算法介紹
牛頓法和梯度下降法類似,也是求解無約束最優化問題的方法。
其中, 是優化目標函數L在第i-1步的海森矩陣。
優點
收斂速度較快(考慮到了二階導數的信息)
缺點
牛頓法的缺點就是 計算比較複雜,因此有其他改進的方法,例如擬牛頓法。
3.2 擬牛頓法
算法介紹
擬牛頓法用一個矩陣 來近似代替 (或 來代替 ),其中 滿足擬牛頓條件:
其中 , 。因此按照擬牛頓條件,每次只需更新 (或 )即可,使得 。
牛頓法有多種的具體實現,其中DFP算法選擇更新 ,BFGS選擇更新 。