天天看點

梯度下降法小結

1. 前言

今天我們聊一聊機器學習和深度學習裡面都至關重要的一個環節,優化損失函數。我們知道一個模型隻有損失函數收斂到了一定的值,才有可能會有好的結果,降低損失方式的工作就是優化方法需要做的事。下面會讨論一些常用的優化方法:梯度下降法家族、牛頓法、拟牛頓法、共轭梯度法、Momentum、Nesterov Momentum、Adagrad、RMSprop、Adam等。

優化過程的示意圖如下:

梯度下降法小結

2. 梯度下降法

2.1 梯度下降法原理

舉個形象的例子,梯度下降法就好比一個蒙着眼睛的人下山,每次在負梯度最大的方向,向前走一步,走出一步後,比較前後的的落差,若落差小于一定門檻值,則認為到達山谷,若落差大于門檻值,則繼續向前走,直到到達山谷。

梯度下降法小結

2.2 梯度下降法概念

在詳細了解梯度下降的算法之前,我們先看看相關的一些概念。

  1. 步長(Learning rate):步長又稱學習率,決定了在梯度下降疊代的過程中,每一步沿梯度負方向前進的長度。用上面下山的例子,步長就是在目前這一步所在位置沿着最陡峭最易下山的位置走的那一步的長度。
  2. 損失函數(loss function):為了評估模型拟合的好壞,通常用損失函數來度量拟合的程度。損失函數極小化,意味着拟合程度最好,對應的模型參數即為最優參數。線上性回歸中,損失函數通常為樣本輸出和假設函數的差取平方。

2.3 梯度下降法調優

在梯度下降法中調優比較重要的是3個因素,步長、初始值、歸一化。

  1. 步長:步長太小,收斂慢,步長太大,會遠離最優解。是以需要從小到大,分别測試,選出一個最優解。
  2. 初始值:随機選取初始值,當損失函數是非凸函數時,找到的解可能是局部最優解,需要多測試幾次,從局部最優解中選出最優解。當損失函數是凸函數時,得到的解就是最優解。
  3. 歸一化:如果不歸一化,會收斂的很慢,會形成之字的路線。

2.4 梯度下降法分類

2.4.1 批量梯度下降法(BGD)

計算梯度時使用所有的樣本,這樣每次算出來的梯度都是目前最優的方向。

  • 優點
  1. 疊代次數少
  2. 若損失函數為凸函數,能夠保證收斂到全局最優解;若為非凸函數,能夠收斂到局部最優值(結果的準确度)
  • 缺點
  1. 訓練速度慢(時間,每一次訓練需要的時間)
  2. 需要記憶體大(空間)
  3. 不支援線上更新

2.4.2 随機梯度下降法(SGD)

随機梯度下降法,其實和批量梯度下降法原理類似,差別在與求梯度時沒有用所有的m個樣本的資料,而是僅僅選取一個樣本j來求梯度

  1. 訓練速度快
  2. 支援線上更新
  3. 有幾率跳出局部最優解
  1. 容易收斂到局部最優,并且容易被困在鞍點
  2. 疊代次數多

2.4.3 小批量梯度下降法(MBGD)

小批量梯度下降法是批量梯度下降法和随機梯度下降法的折衷,也就是對于m個樣本,我們采用x個樣子來疊代,\(1<x<m\)。一般可以取\(x=10\)。

3. 其他優化算法

3.1 牛頓法

牛頓法又名切線法,它的基本思想是對損失函數的二階泰勒展開進行求導。

從本質上去看,牛頓法是二階收斂,梯度下降是一階收斂,是以牛頓法就更快。

如果更通俗地說的話,比如你想找一條最短的路徑走到一個盆地的最底部,梯度下降法每次隻從你目前所處位置選一個坡度最大的方向走一步,牛頓法在選擇方向時,不僅會考慮坡度是否夠大,還會考慮你走了一步之後,坡度是否會變得更大。是以,可以說牛頓法比梯度下降法看得更遠一點,能更快地走到最底部。(牛頓法目光更加長遠,是以少走彎路;相對而言,梯度下降法隻考慮了局部的最優,沒有全局思想。)

切線法形象化如下:

梯度下降法小結

從幾何上說,牛頓法就是用一個二次曲面去拟合你目前所處位置的局部曲面,而梯度下降法是用一個平面去拟合目前的局部曲面,通常情況下,二次曲面的拟合會比平面更好,是以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。

  1. 梯度下降的速度很快
  1. 牛頓法是一種疊代算法,每一步都需要求解目标函數的Hessian矩陣的逆矩陣,計算比較複雜。

3.2 拟牛頓法

拟牛頓法的本質思想是改善牛頓法每次需要求解複雜的Hessian矩陣的逆矩陣的缺陷,它使用正定矩陣來近似Hessian矩陣的逆,進而簡化了運算的複雜度。拟牛頓法和最速下降法一樣隻要求每一步疊代時計算目标函數的梯度(一階導數)。

  1. 使用正定矩陣模拟Hessian矩陣,使得疊代速度比BGD快
  2. 隻計算了函數的梯度,是以訓練時間比牛頓法快

3.3 共轭梯度法

共轭梯度法是介于最速下降法與牛頓法,拟牛頓法之間的一個方法,它僅需利用一階導數資訊,但克服了最速下降法收斂慢的缺點,又避免了牛頓法需要存儲和計算Hesse矩陣并求逆的缺點,克服了拟牛頓法需要很大的存儲空間,共轭梯度法不僅是解決大型線性方程組最有用的方法之一,也是解大型非線性最優化最有效的算法之一。

  1. 需存儲量小
  2. 穩定性高
  3. 不需要任何外來參數

4. SGD延伸算法

4.1 Momentum(動量法)

Momentum旨在加速學習,特别是處理高曲率、小但一緻的梯度,或帶噪音的梯度。Momentum算法會觀察曆史梯度(動量),若目前梯度的方向與曆史梯度一緻(表明目前樣本不太可能為異常點),則會增強這個方向的梯度,若目前梯度與曆史梯方向不一緻,則梯度會衰減。

一種形象的解釋

我們把一個球推下山,球在下坡時積累慣性(動量),在途中若球運動方向不變,因為慣性,球會越來越快,若球的方向發生變化,因為慣性,球的速度會變慢。

左邊是SGD,右邊是Momentum旨在加速學習:

梯度下降法小結

4.2 Nesterov Momentum(NAG)

Nesterov Momentum是Momentum的變種,用于解決SGD容易陷入局部最優的問題。我們知道Momentum方法中梯度方向由積累的動量和目前梯度方法共同決定,與其看目前梯度方向,不妨先看看跟着積累的動量走一步是什麼情況,再決定怎麼走。

在小球向下滾動的過程中,我們希望小球能夠提前知道在哪些地方坡面會上升,這樣在遇到上升坡面之前,小球提前就開始減速,就不容易陷入局部最優解。

梯度下降法小結

4.3 Adagrad

Adagrad是自适應梯度法。它通過記錄每次疊代過程中的前進方向和距離,進而使得針對不同問題,有一套自适應調整學習率的方法,對于出現頻率較低參數采用較大的α更新;相反,對于出現頻率較高的參數采用較小的α更新。

4.4 RMSprop

Adagrad會累加之前所有的梯度平方,而RMSprop僅僅是計算對應的平均值,是以可緩解Adagrad算法學習率下降較快的問題。

4.5 Adam

Adam(Adaptive Moment Estimation)是另一種自适應學習率的方法。總結以上算法,以SGD作為最初的算法,Momentum在其基礎上加入了一階動量(曆史梯度的累計),AdaGrad和RMSProp在其基礎上加入了二階動量(曆史梯度的平方累計),Adam就是結合了一階動量和二階動量算法。

4.6 Nadam

我們說Adam是集大成者,而Nadam = Adam + NAG。

4.7 展示

介紹了上面的幾種學習率的優化方法,大家可能一下不太好了解,這裡放兩張動圖,幫助大家加深了解。

梯度下降法小結
梯度下降法小結

5. 總結

本文對機器學習中常用的優化算法做了一個簡短的總結,隻介紹了算法各自的最大的特點,并沒有涉及具體的公式和細節。具體針對每種算法各自的實作方式和适用範圍還需讀者自己了解。希望本文能給讀者展現出一個機器學習中優化算法的大概的知識圖譜。

繼續閱讀