?
神經(jīng)網(wǎng)絡(luò)模型的每一類學(xué)習(xí)過(guò)程通常被歸納為一種訓(xùn)練算法。訓(xùn)練的算法有很多,它們的特點(diǎn)和性能各不相同。
?
問(wèn)題的抽象
人們把神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過(guò)程轉(zhuǎn)化為求損失函數(shù)f的最小值問(wèn)題。一般來(lái)說(shuō),損失函數(shù)包括誤差項(xiàng)和正則項(xiàng)兩部分。誤差項(xiàng)衡量神經(jīng)網(wǎng)絡(luò)模型在訓(xùn)練數(shù)據(jù)集上的擬合程度,而正則項(xiàng)則是控制模型的復(fù)雜程度,防止出現(xiàn)過(guò)擬合現(xiàn)象。
損失函數(shù)的函數(shù)值由模型的參數(shù)(權(quán)重值和偏置值)所決定。我們可以把兩部分參數(shù)合并為一個(gè)n維的權(quán)重向量,記為w。下圖是損失函數(shù)f(w)的圖示。

?
如上圖所示,w*是損失函數(shù)的最小值。在空間內(nèi)任意選擇一個(gè)點(diǎn)A,我們都能計(jì)算得到損失函數(shù)的一階、二階導(dǎo)數(shù)。一階導(dǎo)數(shù)可以表示為一個(gè)向量:
?if(w) = df/dwi (i = 1,…,n)
同樣的,損失函數(shù)的二階導(dǎo)數(shù)可以表示為海森矩陣( Hessian Matrix ):
Hi,jf(w) = d2f/dwi·dwj (i,j = 1,…,n)
多變量的連續(xù)可微分函數(shù)的求解問(wèn)題一直被人們廣泛地研究。許多的傳統(tǒng)方法都能被直接用于神經(jīng)網(wǎng)絡(luò)模型的求解。
一維優(yōu)化方法
盡管損失函數(shù)的值需要由多個(gè)參數(shù)決定,但是一維優(yōu)化方法在這里也非常重要。這些方法常常用于訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型。
許多訓(xùn)練算法首先計(jì)算得到一個(gè)訓(xùn)練的方向d,以及速率η來(lái)表示損失值在此方向上的變化,f(η)。下圖片展示了這種一維函數(shù)。

?
f和η*在η1和η2所在的區(qū)間之內(nèi)。
由此可見(jiàn),一維優(yōu)化方法就是尋找到某個(gè)給定的一維函數(shù)的最小值。黃金分段法和Brent方法就是其中兩種廣泛應(yīng)用的算法。這兩種算法不斷地縮減最小值的范圍,直到η1和η2兩點(diǎn)之間的距離小于設(shè)定的閾值。
多維優(yōu)化方法
我們把神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)問(wèn)題抽象為尋找參數(shù)向量w*的問(wèn)題,使得損失函數(shù)f在此點(diǎn)取到最小值。假設(shè)我們找到了損失函數(shù)的最小值點(diǎn),那么就認(rèn)為神經(jīng)網(wǎng)絡(luò)函數(shù)在此處的梯度等于零。
通常情況下,損失函數(shù)屬于非線性函數(shù),我們很難用訓(xùn)練算法準(zhǔn)確地求得最優(yōu)解。因此,我們嘗試在參數(shù)空間內(nèi)逐步搜索,來(lái)尋找最優(yōu)解。每搜索一步,重新計(jì)算神經(jīng)網(wǎng)絡(luò)模型的參數(shù),損失值則相應(yīng)地減小。
我們先隨機(jī)初始化一組模型參數(shù)。接著,每次迭代更新這組參數(shù),損失函數(shù)值也隨之減小。當(dāng)某個(gè)特定條件或是終止條件得到滿足時(shí),整個(gè)訓(xùn)練過(guò)程即結(jié)束。
現(xiàn)在我們就來(lái)介紹幾種神經(jīng)網(wǎng)絡(luò)的最重要訓(xùn)練算法。

?
1. 梯度下降法(Gradient descent)
梯度下降方法是最簡(jiǎn)單的訓(xùn)練算法。它僅需要用到梯度向量的信息,因此屬于一階算法。
我們定義f(wi) = fiand ?f(wi) = gi。算法起始于W0點(diǎn),然后在第i步沿著di= -gi方向從wi移到wi+1,反復(fù)迭代直到滿足終止條件。梯度下降算法的迭代公式為:
wi+1 = wi- di·ηi, i=0,1,…
參數(shù)η是學(xué)習(xí)率。這個(gè)參數(shù)既可以設(shè)置為固定值,也可以用一維優(yōu)化方法沿著訓(xùn)練的方向逐步更新計(jì)算。人們一般傾向于逐步更新計(jì)算學(xué)習(xí)率,但很多軟件和工具仍舊使用固定的學(xué)習(xí)率。
下圖是梯度下降訓(xùn)練方法的流程圖。如圖所示,參數(shù)的更新分為兩步:第一步計(jì)算梯度下降的方向,第二步計(jì)算合適的學(xué)習(xí)率。

?
梯度下降方法有一個(gè)嚴(yán)重的弊端,若函數(shù)的梯度變化如圖所示呈現(xiàn)出細(xì)長(zhǎng)的結(jié)構(gòu)時(shí),該方法需要進(jìn)行很多次迭代運(yùn)算。而且,盡管梯度下降的方向就是損失函數(shù)值減小最快的方向,但是這并不一定是收斂最快的路徑。下圖描述了此問(wèn)題。

?
當(dāng)神經(jīng)網(wǎng)絡(luò)模型非常龐大、包含上千個(gè)參數(shù)時(shí),梯度下降方法是我們推薦的算法。因?yàn)榇朔椒▋H需要存儲(chǔ)梯度向量(n空間),而不需要存儲(chǔ)海森矩陣(n2空間)
電子發(fā)燒友App











評(píng)論