?
神經(jīng)網(wǎng)絡模型的每一類學習過程通常被歸納為一種訓練算法。訓練的算法有很多,它們的特點和性能各不相同。
?
問題的抽象
人們把神經(jīng)網(wǎng)絡的學習過程轉化為求損失函數(shù)f的最小值問題。一般來說,損失函數(shù)包括誤差項和正則項兩部分。誤差項衡量神經(jīng)網(wǎng)絡模型在訓練數(shù)據(jù)集上的擬合程度,而正則項則是控制模型的復雜程度,防止出現(xiàn)過擬合現(xiàn)象。
損失函數(shù)的函數(shù)值由模型的參數(shù)(權重值和偏置值)所決定。我們可以把兩部分參數(shù)合并為一個n維的權重向量,記為w。下圖是損失函數(shù)f(w)的圖示。
?
如上圖所示,w*是損失函數(shù)的最小值。在空間內任意選擇一個點A,我們都能計算得到損失函數(shù)的一階、二階導數(shù)。一階導數(shù)可以表示為一個向量:
?if(w) = df/dwi (i = 1,…,n)
同樣的,損失函數(shù)的二階導數(shù)可以表示為海森矩陣( Hessian Matrix ):
Hi,jf(w) = d2f/dwi·dwj (i,j = 1,…,n)
多變量的連續(xù)可微分函數(shù)的求解問題一直被人們廣泛地研究。許多的傳統(tǒng)方法都能被直接用于神經(jīng)網(wǎng)絡模型的求解。
一維優(yōu)化方法
盡管損失函數(shù)的值需要由多個參數(shù)決定,但是一維優(yōu)化方法在這里也非常重要。這些方法常常用于訓練神經(jīng)網(wǎng)絡模型。
許多訓練算法首先計算得到一個訓練的方向d,以及速率η來表示損失值在此方向上的變化,f(η)。下圖片展示了這種一維函數(shù)。
?
f和η*在η1和η2所在的區(qū)間之內。
由此可見,一維優(yōu)化方法就是尋找到某個給定的一維函數(shù)的最小值。黃金分段法和Brent方法就是其中兩種廣泛應用的算法。這兩種算法不斷地縮減最小值的范圍,直到η1和η2兩點之間的距離小于設定的閾值。
多維優(yōu)化方法
我們把神經(jīng)網(wǎng)絡的學習問題抽象為尋找參數(shù)向量w*的問題,使得損失函數(shù)f在此點取到最小值。假設我們找到了損失函數(shù)的最小值點,那么就認為神經(jīng)網(wǎng)絡函數(shù)在此處的梯度等于零。
通常情況下,損失函數(shù)屬于非線性函數(shù),我們很難用訓練算法準確地求得最優(yōu)解。因此,我們嘗試在參數(shù)空間內逐步搜索,來尋找最優(yōu)解。每搜索一步,重新計算神經(jīng)網(wǎng)絡模型的參數(shù),損失值則相應地減小。
我們先隨機初始化一組模型參數(shù)。接著,每次迭代更新這組參數(shù),損失函數(shù)值也隨之減小。當某個特定條件或是終止條件得到滿足時,整個訓練過程即結束。
現(xiàn)在我們就來介紹幾種神經(jīng)網(wǎng)絡的最重要訓練算法。
?
1. 梯度下降法(Gradient descent)
梯度下降方法是最簡單的訓練算法。它僅需要用到梯度向量的信息,因此屬于一階算法。
我們定義f(wi) = fiand ?f(wi) = gi。算法起始于W0點,然后在第i步沿著di= -gi方向從wi移到wi+1,反復迭代直到滿足終止條件。梯度下降算法的迭代公式為:
wi+1 = wi- di·ηi, i=0,1,…
參數(shù)η是學習率。這個參數(shù)既可以設置為固定值,也可以用一維優(yōu)化方法沿著訓練的方向逐步更新計算。人們一般傾向于逐步更新計算學習率,但很多軟件和工具仍舊使用固定的學習率。
下圖是梯度下降訓練方法的流程圖。如圖所示,參數(shù)的更新分為兩步:第一步計算梯度下降的方向,第二步計算合適的學習率。
?
梯度下降方法有一個嚴重的弊端,若函數(shù)的梯度變化如圖所示呈現(xiàn)出細長的結構時,該方法需要進行很多次迭代運算。而且,盡管梯度下降的方向就是損失函數(shù)值減小最快的方向,但是這并不一定是收斂最快的路徑。下圖描述了此問題。
?
當神經(jīng)網(wǎng)絡模型非常龐大、包含上千個參數(shù)時,梯度下降方法是我們推薦的算法。因為此方法僅需要存儲梯度向量(n空間),而不需要存儲海森矩陣(n2空間)
評論