?
神經網絡模型的每一類學習過程通常被歸納為一種訓練算法。訓練的算法有很多,它們的特點和性能各不相同。
?
問題的抽象
人們把神經網絡的學習過程轉化為求損失函數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) = fiand ?f(wi) = gi。算法起始于W0點,然后在第i步沿著di= -gi方向從wi移到wi+1,反復迭代直到滿足終止條件。梯度下降算法的迭代公式為:
wi+1 = wi- di·ηi, i=0,1,…
參數η是學習率。這個參數既可以設置為固定值,也可以用一維優化方法沿著訓練的方向逐步更新計算。人們一般傾向于逐步更新計算學習率,但很多軟件和工具仍舊使用固定的學習率。
下圖是梯度下降訓練方法的流程圖。如圖所示,參數的更新分為兩步:第一步計算梯度下降的方向,第二步計算合適的學習率。
?
梯度下降方法有一個嚴重的弊端,若函數的梯度變化如圖所示呈現出細長的結構時,該方法需要進行很多次迭代運算。而且,盡管梯度下降的方向就是損失函數值減小最快的方向,但是這并不一定是收斂最快的路徑。下圖描述了此問題。
?
當神經網絡模型非常龐大、包含上千個參數時,梯度下降方法是我們推薦的算法。因為此方法僅需要存儲梯度向量(n空間),而不需要存儲海森矩陣(n2空間)
評論