在機器學習的世界中,通常我們會發現有很多問題并沒有最優的解,或是要計算出最優的解要花費很大的計算量,面對這類問題一般的做法是利用迭代的思想盡可能的逼近問題的最優解。我們把解決此類優化問題的方法叫做優化算法,優化算法本質上是一種數學方法,常見的優化算法包括梯度下降法、牛頓法、Momentum,Nesterov Momentum,Adagrad,Adam等。其實大部分機器學習算法的本質都是建立優化模型,通過優化算法對損失函數(優化的目標函數)進行優化,從而訓練出最好的模型。
(1)梯度下降法
梯度下降法是最常用的一種優化算法。其核心思想是:在當前位置尋找梯度下降最快的方向,來逐漸逼近優化的目標函數。且離目標函數越近,逼近的“步伐”也就越小。梯度下降法本質是一種迭代方法,常用于機器學習算法的模型參數求解。其示意圖如下圖1所示:
圖1梯度下降法
梯度下降法的更新公式為:
其中α為梯度上每次逼近的步長,前邊的“-”表示搜索方向為負梯度的方向,L我損失函數。算法更新終止的條件是梯度向量接近于0即可。此外需要特別注意的是,梯度下降法不一定能夠找到全局的最優解,很有可能找到的是一個局部最優解。
(2)梯度下降法的變式
通常基于梯度的下降方法又有很多變式,我們主要為大家介紹:隨機梯度下降法(SGD), Momentum, Nesterov Momentum, Adagrad, Adam。
隨機梯度下降法是每次使用一批數據進行梯度的計算,而非計算全部數據的梯度,因為如果每次計算全部數據的梯度,會導致運算量加大,運算時間變長,容易陷入局部最優解,而隨機梯度下降可能每次不是朝著真正最小的方向,這樣反而可以跳出局部的最優解。
Momentum是在隨機梯度下降法的基礎上,增加了動量(Momentum)的技術。其核心是通過優化相關方向的訓練和弱化無關方向的振蕩,來加速SGD訓練。Momentum的方法能夠在一定程度上緩解隨機梯度下降法收斂不穩定的問題,并且有一定的擺脫陷入局部最優解的能力。
Nesterov Momentum是基于Momentum的加速算法,相比于傳統的動量算法,最大的優化是計算經過動量更新之后的位置梯度。
Adagrad即adaptive gradient,是一種自適應學習率的梯度法。它通過記錄并調整每次迭代過程中的前進方向和距離,使得針對不同問題都有一套自適應學習率的方法。Adagrad最大的優勢是不需要手動來調整學習率,但與此同時會降低學習率。
Adam即Adaptive Moment Estimation,是能夠自適應時刻的估計方法,能夠針對每個參數,計算自適應學習率。這是一種綜合性的優化方法,在機器學習實際訓練中,往往能夠取得不錯的效果。
(3)牛頓法和擬牛頓法
與上述梯度類型的優化算法最大的不同是,牛頓法是一種二階收斂算法,所以它的收斂速度相較于一階算法會更快。牛頓法二階的意義在于它不僅會沿著梯度最大的方向下降,還會考慮走的下一步坡度是不是也很大,它能夠以較遠的目光全局的逼近目標函數。其算法的具體步驟為:
1)首先選擇接近于函數f(x)的零點x0,并計算f(x0)處的斜率f’(x0)。然后我們求解以下方程,得到比剛剛的x0更加準確的解x1。
2)接下來我們利用x1進行下一輪的迭代,迭代公式如下所示。這樣經過反復的迭代過程,我們便能取得函數f(x)的最優解。
牛頓法的迭代示意圖如下所示:
圖2 牛頓法
雖然牛頓法相較于梯度下降法等優化算法收斂速度更快,但每一步都需要求解復雜的Hessian矩陣,計算非常不易。所以后來美國Argonne國家實驗室的物理學家W.C.Davidon又針對牛頓法計算復雜的缺陷提出了擬牛頓法。它的核心思想是使用正定矩陣來近似Hessian矩陣的逆,從而簡化了運算的復雜。另外,因為擬牛頓法不需要二階導數的信息,所以現在擬牛頓法在機器學習實際問題中應用更加的廣泛。
【總結】:除了以上幾類較為常見的優化算法以外,還有共軛梯度法、啟發式優化算法等。在實際的機器學習問題中,往往需要具體問題具體分析,根據每類優化問題的特征,選擇合適的優化算法。
-
算法
+關注
關注
23文章
4629瀏覽量
93202 -
機器學習
+關注
關注
66文章
8438瀏覽量
132954
發布評論請先 登錄
相關推薦
評論