淺談訓練神經網絡的五大算法


 

  作者: Alberto Quesada 譯者: KK4SBB

  責編:何永燦,關注人工智能,投稿請聯系 heyc@csdn.net 或微信號 289416419

  神經網絡模型的每一類學習過程通常被歸納為一種訓練算法。訓練的算法有很多,它們的特點和性能各不相同。

  

 

  問題的抽象

  人們把神經網絡的學習過程轉化為求損失函數f的最小值問題。一般來說,損失函數包括誤差項和正則項兩部分。誤差項衡量神經網絡模型在訓練數據集上的擬合程度,而正則項則是控制模型的復雜程度,防止出現過擬合現象。

  損失函數的函數值由模型的參數(權重值和偏置值)所決定。我們可以把兩部分參數合並為一個n維的權重向量,記為w。下圖是損失函數f(w)的圖示。

  

 

  如上圖所示,w*是損失函數的最小值。在空間內任意選擇一個點A,我們都能計算得到損失函數的一階、二階導數。一階導數可以表示為一個向量:

  ᐁif(w) = df/dwi (i = 1,…,n)

  同樣的,損失函數的二階導數可以表示為海森矩陣( Hessian Matrix ):

  Hi,jf(w) = d2f/dwi·dwj (i,j = 1,…,n)

  多變量的連續可微分函數的求解問題一直被人們廣泛地研究。許多的傳統方法都能被直接用於神經網絡模型的求解。

  一維優化方法

  盡管損失函數的值需要由多個參數決定,但是一維優化方法在這里也非常重要。這些方法常常用於訓練神經網絡模型。

  許多訓練算法首先計算得到一個訓練的方向d,以及速率η來表示損失值在此方向上的變化,f(η)。下圖片展示了這種一維函數。

  

 

  f和η*在η1和η2所在的區間之內。

  由此可見,一維優化方法就是尋找到某個給定的一維函數的最小值。黃金分段法和Brent方法就是其中兩種廣泛應用的算法。這兩種算法不斷地縮減最小值的范圍,直到η1和η2兩點之間的距離小於設定的閾值。

  多維優化方法

  我們把神經網絡的學習問題抽象為尋找參數向量w*的問題,使得損失函數f在此點取到最小值。假設我們找到了損失函數的最小值點,那么就認為神經網絡函數在此處的梯度等於零。

  通常情況下,損失函數屬於非線性函數,我們很難用訓練算法准確地求得最優解。因此,我們嘗試在參數空間內逐步搜索,來尋找最優解。每搜索一步,重新計算神經網絡模型的參數,損失值則相應地減小。

  我們先隨機初始化一組模型參數。接着,每次迭代更新這組參數,損失函數值也隨之減小。當某個特定條件或是終止條件得到滿足時,整個訓練過程即結束。

  現在我們就來介紹幾種神經網絡的最重要訓練算法。

  

 

  1. 梯度下降法(Gradient descent)

  梯度下降方法是最簡單的訓練算法。它僅需要用到梯度向量的信息,因此屬於一階算法。

  我們定義f(wi) = fi and ᐁf(wi) = gi。算法起始於W0點,然后在第i步沿着di = -gi方向從wi移到wi+1,反復迭代直到滿足終止條件。梯度下降算法的迭代公式為:

  wi+1 = wi - di·ηi, i=0,1,…

  參數η是學習率。這個參數既可以設置為固定值,也可以用一維優化方法沿着訓練的方向逐步更新計算。人們一般傾向於逐步更新計算學習率,但很多軟件和工具仍舊使用固定的學習率。

  下圖是梯度下降訓練方法的流程圖。如圖所示,參數的更新分為兩步:第一步計算梯度下降的方向,第二步計算合適的學習率。

  

 

  梯度下降方法有一個嚴重的弊端,若函數的梯度變化如圖所示呈現出細長的結構時,該方法需要進行很多次迭代運算。而且,盡管梯度下降的方向就是損失函數值減小最快的方向,但是這並不一定是收斂最快的路徑。下圖描述了此問題。

  

 

  當神經網絡模型非常龐大、包含上千個參數時,梯度下降方法是我們推薦的算法。因為此方法僅需要存儲梯度向量(n空間),而不需要存儲海森矩陣(n2空間)

  2.牛頓算法(Newton’s method)

  因為牛頓算法用到了海森矩陣,所以它屬於二階算法。此算法的目標是使用損失函數的二階偏導數尋找更好的學習方向。

  我們定義f(wi) = fi, ᐁf(wi) = gi and Hf(wi) = Hi。用泰勒展開式估計函數f在w0值

  f = f0 + g0 · (w - w0) + 0.5 · (w - w0)2 · H0

  H0是函數f在w0的海森矩陣值。在f(w)的最小值處g = 0,我們得到了第二個等式

  g = g0 + H0 · (w - w0) = 0

  因此,將參數初始化在w0,牛頓算法的迭代公式為

  wi+1 = wi - Hi-1·gi, i = 0,1,…

  Hi-1·gi 被稱為牛頓項。值得注意的是,如果海森矩陣是一個非正定矩陣,那么參數有可能朝着最大值的方向移動,而不是最小值的方向。因此損失函數值並不能保證在每次迭代都減小。為了避免這種問題,我們通常會對牛頓算法的等式稍作修改:

  wi+1 = wi - (Hi-1·gi) ·ηi, i=0,1,…

  學習率η既可以設為固定值,也可以動態調整。向量d = Hi-1·gi被稱為牛頓訓練方向。

  下圖展示的是牛頓法的流程圖。參數的更新也分為兩步,計算牛頓訓練方向和合適的學習率。

  

 

  此方法訓練神經網絡模型的效率被證明比梯度下降法更好。由於共軛梯度法不需要計算海森矩陣,當神經網絡模型較大時我們也建議使用。

  4. 柯西-牛頓法(Quasi-Newton method)

  由於牛頓法需要計算海森矩陣和逆矩陣,需要較多的計算資源,因此出現了一個變種算法,稱為柯西-牛頓法,可以彌補計算量大的缺陷。此方法不是直接計算海森矩陣及其逆矩陣,而是在每一次迭代估計計算海森矩陣的逆矩陣,只需要用到損失函數的一階偏導數。

  海森矩陣是由損失函數的二階偏導數組成。柯西-牛頓法的主要思想是用另一個矩陣G來估計海森矩陣的逆矩陣,只需要損失函數的一階偏導數。柯西-牛頓法的更新方程可以寫為:

  wi+1 = wi - (Gi·gi)·ηi, i=0,1,…

  學習率η既可以設為固定值,也可以動態調整。海森矩陣逆矩陣的估計G有多種不同類型。兩種常用的類型是Davidon–Fletcher–Powell formula (DFP)和Broyden–Fletcher–Goldfarb–Shanno formula (BFGS)。

  柯西-牛頓法的流程圖如下所示。參數更新的步驟分為計算柯西-牛頓訓練方向和計算學習率。

  

 

  許多情況下,這是默認選擇的算法:它比梯度下降法和共軛梯度法更快,而不需要准確計算海森矩陣及其逆矩陣。

  5. Levenberg-Marquardt算法

  Levenberg-Marquardt算法又稱為衰減的最小 平方法,它針對損失函數是平方和誤差的形式。它也不需要准確計算海森矩陣,需要用到梯度向量和雅各布矩陣。

  假設損失函數f是平方和誤差的形式:

  f = ∑ ei2, i=0,…,m

  其中m是訓練樣本的個數。

  我們定義損失函數的雅各布矩陣由誤差項對參數的偏導數組成,

  Ji,jf(w) = dei/dwj (i = 1,…,m & j = 1,…,n)

  m是訓練集中的樣本個數,n是神經網絡的參數個數。雅各布矩陣的規模是m·n

  損失函數的梯度向量是:

  ᐁf = 2 JT·e

  e是所有誤差項組成的向量。

  最后,我們可以用這個表達式來估計計算海森矩陣。

  Hf ≈ 2 JT·J + λI

  λ是衰減因子,以確保海森矩陣是正的,I是單位矩陣。

  此算法的參數更新公式如下:

  wi+1 = wi - (JiT·Ji+λiI)-1·(2 JiT·ei), i=0,1,…

  若衰減因子λ設為0,相當於是牛頓法。若λ設置的非常大,這就相當於是學習率很小的梯度下降法。

  參數λ的初始值非常大,因此前幾步更新是沿着梯度下降方向的。如果某一步迭代更新失敗,則λ擴大一些。否則,λ隨着損失值的減小而減小,Levenberg-Marquardt接近牛頓法。這個過程可以加快收斂的速度。

  下圖是Levenberg-Marquardt算法訓練過程的流程圖。第一步計算損失值、梯度和近似海森矩陣。然后衰減參數和衰減系數。

  

 

  由於Levenberg-Marquardt算法主要針對平方和誤差類的損失函數。因此,在訓練這類誤差的神經網絡模型時速度非常快。但是這個算法也有一些缺點。首先,它不適用於其它類型的損失函數。而且,它也不兼容正則項。最后,如果訓練數據和網絡模型非常大,雅各布矩陣也會變得很大,需要很多內存。因此,當訓練數據或是模型很大時,我們並不建議使用Levenberg-Marquardt算法。

  內存使用和速度的比較

  下圖繪制了本文討論的五種算法的計算速度和內存需求。如圖所示,梯度下降法往往是最慢的訓練方法,它所需要的內存也往往最少。相反,速度最快的算法一般是Levenberg-Marquardt,但需要的內存也更多。柯西-牛頓法較好地平衡了兩者。

  

 

  總之,如果我們的神經網絡模型有上千個參數,則可以用節省存儲的梯度下降法和共軛梯度法。如果我們需要訓練很多網絡模型,每個模型只有幾千個訓練數據和幾百個參數,則Levenberg-Marquardt可能會是一個好選擇。其余情況下,柯西-牛頓法的效果都不錯。美源星

  http://bbs.clzg.cn/thread-7378359-1-1.html http://www.talkforex.com/thread-829907-1-1.html

  http://www.wangchao.net.cn/hi/detail_237323.htmlhttp://www.wangchao.net.cn/hi/detail_237331.html

  http://www.365128.com/user/myx2/69.html

  http://www.365128.com/user/myx2/70.html

  http://www.365128.com/user/myx2/71.html

  http://www.xianhuo8.cn/bbs/thread-176879-1-1.html

  http://www.xianhuo8.cn/bbs/thread-176880-1-1.html

  http://www.xianhuo8.cn/bbs/thread-176882-1-1.html

  http://www.ttx.cn/read-htm-tid-8234268.html

  http://www.ttx.cn/read-htm-tid-8234270.html

  http://www.ttx.cn/read-htm-tid-8234272.html

  http://t.fx168.com/b4152370

  http://t.fx168.com/b4152386


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM