在深度學習過程中經常會聽到**優化 算法雲雲,優化算法即通過迭代的方法計算目標函數的最優解,為什么要用到優化算法呢?
1、如果是凸優化問題,如果數據量特別大,那么計算梯度非常耗時,因此會選擇使用迭代的方法求解,迭代每一步計算量小,且比較容易實現
2、對於非凸問題,只能通過迭代的方法求解,每次迭代目標函數值不斷變小,不斷逼近最優解
因此優化問題的重點是使用何種迭代方法進行迭代,即求迭代公式。下面簡單介紹幾種優化算法 :梯度下降法,牛頓法,擬牛頓法,BFGS
梯度下降法:
梯度下降法是求解無約最優化問題的一種最常用的方法,設f(x)具有一階連續偏導數的函數,要求解的無約束最優化問題是:
min f(x)
X*表示目標函數的的極小點。
主要核心思想: 負梯度方向是使函數值下降最快的方向,在迭代的每一步以負梯度方向更新x的值,從而達到減少函數值的目的。
f(x)的一階泰勒展開:
即函數在x處的值可以通過,Xk處的函數值與Xk處的梯度方向來表示,那么Xk+1可以由Xk與gk來表示,即
, Pk為搜索方向,取負梯度方向,
為搜索步長,由一維搜索確定,即
使得:
當目標函數是凸函數時,梯度下降法的解是全局最優解。
由於使用梯度下降法時,每一步都需要計算在當前迭代值xk處的梯度值,而計算梯度需要使得全部樣本進行計算, 這樣計算量將非常大,因此為了降低計算量,有人提出了隨機梯度下降法,即每次隨機選擇一個樣本計算梯度,大大提高了
計算速度。
牛頓法:
考慮約束問題
min f(x)
其中x*為目標函數的極小點。
f(x)的二階泰勒展開:
這里gk是f(x)在梯度向量在點xk處的值,H(xk)是f(x)的海森矩陣在點xk處的值。函數有極值的條件的必要條件是在極值點處一階導數為0,即梯度向量為0。
牛頓法利用極小點的必要條件:
每次迭代從點Xk開始,求目標函數的極小點,作為第k+1次迭代值x(k+1),假設,由式(1-1)有
式(1-3)即為牛頓法的迭代公式
擬牛頓法:
在牛頓法的迭代中,需要計算海賽矩陣的逆矩陣H-1這一計算比較復雜,考慮用一個n階矩陣來近似代替H-1,這就是擬牛頓法的基本思路。
DFP(Davidon-Fletcher-Powell)使用一個n階矩陣Gk+1來近似H-1
BFGS(Broyden-Fletcher-Goldfarb-Shanno)使用一個n階矩陣Bk來逼近H
L-BFGS(Limited -BFGS ):由於上述兩種擬牛頓法都要保存一個n階矩陣,對於內存消耗非常大,因此在此基礎上提出了一種節約內存的方法L-BFGS
由於牛頓法的迭代公式有考慮目標函數的具體分布,因此相對於梯度下降算法收斂速度更快,在實際應用中經常使用LBFGS方法。
關於Conjugate Gradient方法,請參考博文http://www.cnblogs.com/dupuleng/articles/4165092.html