自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從梯度下降到擬牛頓法:詳解訓(xùn)練神經(jīng)網(wǎng)絡(luò)的五大學(xué)習(xí)算法

開發(fā) 開發(fā)工具 算法
在神經(jīng)網(wǎng)絡(luò)中,系統(tǒng)的學(xué)習(xí)過程一般是由訓(xùn)練算法所主導(dǎo)。而現(xiàn)如今有許多不同的學(xué)習(xí)算法,它們每一個都有不同的特征和表現(xiàn)。因此本文力圖描述清楚五大學(xué)習(xí)算法的基本概念及優(yōu)缺點,給讀者們闡明最優(yōu)化在神經(jīng)網(wǎng)絡(luò)中的應(yīng)用。

在神經(jīng)網(wǎng)絡(luò)中,系統(tǒng)的學(xué)習(xí)過程一般是由訓(xùn)練算法所主導(dǎo)。而現(xiàn)如今有許多不同的學(xué)習(xí)算法,它們每一個都有不同的特征和表現(xiàn)。因此本文力圖描述清楚五大學(xué)習(xí)算法的基本概念及優(yōu)缺點,給讀者們闡明***化在神經(jīng)網(wǎng)絡(luò)中的應(yīng)用。

問題形式化

神經(jīng)網(wǎng)絡(luò)中的學(xué)習(xí)過程可以形式化為最小化損失函數(shù)問題,該損失函數(shù)一般是由訓(xùn)練誤差和正則項組成。誤差項會衡量神經(jīng)網(wǎng)絡(luò)擬合數(shù)據(jù)集的好壞,也就是擬合數(shù)據(jù)所產(chǎn)生的誤差。正則項主要就是通過給特征權(quán)重增加罰項而控制神經(jīng)網(wǎng)絡(luò)的有效復(fù)雜度,這樣可以有效地控制模型過擬合問題。

[[185190]]

訓(xùn)練損失函數(shù)取決于神經(jīng)網(wǎng)絡(luò)中的自適應(yīng)參數(shù)(偏置項和突觸權(quán)重)。我們很容易地將神經(jīng)網(wǎng)絡(luò)的權(quán)重組合成一個 n 維權(quán)重向量 w,而訓(xùn)練損失就是以這些權(quán)重為變量的函數(shù)。下圖描述了損失函數(shù) f(w)。

損失函數(shù) f(w)

如上圖所示,點 w* 是訓(xùn)練損失函數(shù)的極小值點。在任意點 A,損失函數(shù)能分別對權(quán)重求一階偏導(dǎo)數(shù)和二階偏導(dǎo)數(shù)。損失函數(shù)的一階偏導(dǎo)可以使用梯度算符來表示,其中每一個權(quán)重的損失函數(shù)梯度表示如下:

每一個權(quán)重的損失函數(shù)梯度表示

同樣,損失函數(shù)的二階偏導(dǎo)可以使用海塞矩陣(Hessian matrix)來表示,以下就是損失函數(shù)對權(quán)重向量每個元素的二階偏導(dǎo)數(shù):

損失函數(shù)對權(quán)重向量每個元素的二階偏導(dǎo)數(shù)

最小化多變量連續(xù)可導(dǎo)函數(shù)的方法廣泛應(yīng)用于學(xué)習(xí)過程中,許多常規(guī)方法都將這種***化方法直接應(yīng)用于神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中。

單變量函數(shù)優(yōu)化(One-dimensional optimization)

雖然損失函數(shù)是由多變量決定的(權(quán)重的數(shù)量通常十分巨大),但首先理解單變量函數(shù)的優(yōu)化方法是十分重要的。并且實際上單變量優(yōu)化方法經(jīng)常應(yīng)用到神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程中,超參數(shù)的調(diào)整就可以使用單變量優(yōu)化法。

在實際模型中,許多訓(xùn)練算法都是首先計算出訓(xùn)練方向 d,然后確定在此訓(xùn)練方向上最小化訓(xùn)練損失 f(η)的學(xué)習(xí)速率η。下圖就展示了單變量函數(shù) f(η)的優(yōu)化過程,該優(yōu)化可求得***學(xué)習(xí)速率η*。

點η1 和點η2 定義了包含單變量函數(shù) f(η)***點η*的子區(qū)間

在該案例中,單變量優(yōu)化法在給定單變量函數(shù)的情況下搜尋函數(shù)極小值。其中廣泛應(yīng)用的搜尋算法有黃金分割法(golden section)和 Brent 法。兩者都是在減少極小值所在的子區(qū)間,直到子區(qū)間中兩個端點間的距離小于定義的可容忍誤差。

多變量函數(shù)優(yōu)化(Multidimensional optimization)

神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過程可以形式化為求將訓(xùn)練損失函數(shù) f 最小化的參數(shù)向量 w*。數(shù)學(xué)或?qū)嶋H都證明如果神經(jīng)網(wǎng)絡(luò)的損失函數(shù)達(dá)到了極小值,那么梯度也必定為 0 向量。

通常情況下,損失函數(shù)為參數(shù)的非線性函數(shù),所以找到一個封閉的訓(xùn)練算法(closed training algorithms)求***解是不可能的。相反,我們考慮通過一系列迭代步在參數(shù)空間內(nèi)搜尋***解。在每一步迭代中,我們可以通過調(diào)整神經(jīng)網(wǎng)絡(luò)的參數(shù)降低損失函數(shù)的值。

通過這種方式,一般我們會由初始參數(shù)向量開始(通常為隨機初始化)訓(xùn)練神經(jīng)網(wǎng)絡(luò)。然后,算法會更新生成一組新參數(shù),訓(xùn)練損失函數(shù)也會在每一次算法迭代中使用更新的參數(shù)進(jìn)行函數(shù)值的降低。兩步迭代之間的的訓(xùn)練損失減少又稱之為訓(xùn)練損失衰減率(loss decrement)。***,當(dāng)訓(xùn)練過程滿足特定的條件或停止標(biāo)準(zhǔn)時,訓(xùn)練算法就會停止迭代,而這個時候的參數(shù)也就是***參數(shù)(神經(jīng)網(wǎng)絡(luò)中可能是局部***解),神經(jīng)網(wǎng)絡(luò)的性能也由它們所決定。

下面,本文將描述在神經(jīng)網(wǎng)絡(luò)中最重要的學(xué)習(xí)算法。

神經(jīng)網(wǎng)絡(luò)中最重要的學(xué)習(xí)算法

梯度下降

梯度下降,又稱為最速下降法是一種非常簡單和直觀的訓(xùn)練算法。該算法從梯度向量中獲取優(yōu)化信息,因此其為一階算法(通過一階偏導(dǎo)求***權(quán)重)。

如果我們指定 f(wi)= fi、ᐁf(wi)= gi,那么該優(yōu)化方法由點 w0 開始迭代,在滿足終止條件之前,就在訓(xùn)練方向 di=-gi 上將 wi 移向 wi+1。因此,梯度下降法就是如下方程式進(jìn)行迭代。

梯度下降法就是如下方程式進(jìn)行迭代

其中參數(shù) η 是學(xué)習(xí)速率。該學(xué)習(xí)速率的值可以設(shè)定為一個常量也可以沿著訓(xùn)練方向使用單變量優(yōu)化法求得。通常學(xué)習(xí)速率的***值可以在連續(xù)迭代步(successive step)上通過線最小化(line minimization)獲得。然而,現(xiàn)在還是有很多機器學(xué)習(xí)模型僅僅只使用固定的學(xué)習(xí)速率。

下面是一張使用梯度下降算法進(jìn)行學(xué)習(xí)的流程圖。我們可以看到,參數(shù)向量通過兩步進(jìn)行優(yōu)化:首先,計算梯度下降的訓(xùn)練方向。其次,尋找合適的學(xué)習(xí)速率。

計算梯度下降的訓(xùn)練方向

梯度下降算法也有一些缺點,首先就是其迭代方向會呈現(xiàn)一種鋸齒現(xiàn)象,其并不能朝著極小值點徑直優(yōu)化,所以迭代的次數(shù)也就多,收斂的速度也就慢。當(dāng)它的函數(shù)梯度圖又窄又長時(變量沒有歸一化,值處于不同的量級),迭代所需要的步數(shù)就會更多了。最速下降法確實沿著最陡的梯度下降,損失函數(shù)減少得最迅速,但這并不代表梯度下降法或最速下降法會最快收斂(因為鋸齒現(xiàn)象)。下圖就可以直觀地了解到這種鋸齒現(xiàn)象,因為非線性函數(shù)局部的梯度方向并不一定就是朝著***點。并且該圖還表明,如果橫軸量級與縱軸量級有差別時,損失函數(shù)梯度圖會呈現(xiàn)為一種橢圓形,而如果從橢圓長半軸端點開始下降,那么迭代步數(shù)就會很多。

在訓(xùn)練大規(guī)模神經(jīng)網(wǎng)絡(luò)時,因為有上萬的參數(shù),所以梯度下降法是比較有效的。因為梯度下降算法儲存的梯度算符向量規(guī)模為 n,而海塞矩陣儲存的規(guī)模就為 n^2 了,同時梯度和海塞矩陣的計算量也是天差地別。

牛頓法

牛頓法是二階算法,因為該算法使用了海塞矩陣(Hessian matrix)求權(quán)重的二階偏導(dǎo)數(shù)。牛頓法的目標(biāo)就是采用損失函數(shù)的二階偏導(dǎo)數(shù)尋找更好的訓(xùn)練方向。現(xiàn)在我們將采用如下表示: f(wi) = fi、ᐁf(wi) = gi 和 Hf(wi) = Hi。在 w0 點使用泰勒級數(shù)展開式二次逼近函數(shù) f。

使用泰勒級數(shù)展開式二次逼近函數(shù) f

H0 為函數(shù) f 在點 w0 的海塞矩陣。通過將 g 設(shè)定為 0,我們就可以找到 f(w) 的極小值,也就得到了以下方程式。

因此,從參數(shù)向量 w0 開始,牛頓法服從以下方式進(jìn)行迭代:

牛頓法服從以下方式進(jìn)行迭代

向量 Hi-1·gi(參考上式)也就是所說的牛頓下降步(Newton's step)。注意,參數(shù)的這些變化將朝著極大值而不是極小值逼近,出現(xiàn)這樣的情況是因為海塞矩陣非正定。因此在不能保證矩陣正定的情況下,損失函數(shù)并不能保證在每一次迭代中都是減少的。為了防止上述問題,牛頓法的方程式通常可以修改為:

牛頓法的方程式通??梢孕薷臑? title=

學(xué)習(xí)速率η同樣可是設(shè)定為固定常數(shù)或通過單變量優(yōu)化取值。向量 d=Hi-1·gi(參考上式)現(xiàn)在就稱為牛頓訓(xùn)練方向(Newton's training direction)。

使用牛頓法的訓(xùn)練過程狀態(tài)圖就如下圖所示。從此圖可以看出來,系統(tǒng)首先通過獲得牛頓訓(xùn)練方向,然后獲得合適的學(xué)習(xí)速率來進(jìn)行參數(shù)的更新優(yōu)化。

使用牛頓法的訓(xùn)練過程狀態(tài)圖

下面的梯度圖展示了牛頓法的性能。因為牛頓法是采用其損失函數(shù)的二階偏導(dǎo)數(shù)尋找更好的訓(xùn)練下降方向,所以它相比梯度下降只要更少的迭代次數(shù)就能下降到損失函數(shù)的極小值,因此函數(shù)收斂速度也會大幅度地加快。

牛頓法的性能

然而,牛頓法的困難之處在于其計算量,因為對海塞矩陣及其逆的精確求值在計算量方面是十分巨大的。

共軛梯度法(Conjugate gradient)

共軛梯度法可認(rèn)為是梯度下降法和牛頓法的中間物。該算法希望能加速梯度下降的收斂速度,同時避免使用海塞矩陣進(jìn)行求值、儲存和求逆獲得必要的優(yōu)化信息。

在共軛梯度訓(xùn)練算法中,因為是沿著共軛方向(conjugate directions)執(zhí)行搜索的,所以通常該算法要比沿著梯度下降方向優(yōu)化收斂得更迅速。共軛梯度法的訓(xùn)練方向是與海塞矩陣共軛的。

我們用 d 表示訓(xùn)練方向向量,然后從初始參數(shù)向量 w0 和初始訓(xùn)練方向向量 d0=-g0 開始,共軛梯度法所構(gòu)建的訓(xùn)練方向序列為:

共軛梯度法所構(gòu)建的訓(xùn)練方向序列

在上式中,γ 稱之為共軛參數(shù),并且有一些方法計算這個參數(shù)。兩種最常用的方法是源自 Fletcher、Reeves 和 Polak 、Ribiere。對于所有的共軛梯度算法,訓(xùn)練方向周期性地重置為負(fù)梯度向。

參數(shù)通過下面的表達(dá)式得以更新和優(yōu)化。通常學(xué)習(xí)速率η可使用單變量函數(shù)優(yōu)化方法求得。

共軛梯度法的訓(xùn)練過程流程圖就如下所示。從圖中我們可以看出來模型是通過***次計算共軛梯度訓(xùn)練方向而優(yōu)化參數(shù)的,然后再尋找適當(dāng)?shù)膶W(xué)習(xí)速率。

共軛梯度法的訓(xùn)練過程流程圖

共軛梯度法已經(jīng)證實其在神經(jīng)網(wǎng)絡(luò)中要比梯度下降法有效得多。并且由于共軛梯度法并沒有要求使用海塞矩陣,所以在大規(guī)模神經(jīng)網(wǎng)絡(luò)中其還是可以做到很好的性能。

擬牛頓法(Quasi-Newton method)

因為需要很多的操作求解海塞矩陣的值還有計算矩陣的逆,應(yīng)用牛頓法所產(chǎn)生的計算量是十分巨大的。因此有一種稱之為擬牛頓法(quasi-Newton)或變量矩陣法來解決這樣的缺點。這些方法并不是直接計算海塞矩陣然后求其矩陣的逆,擬牛頓法是在每次迭代的時候計算一個矩陣,其逼近海塞矩陣的逆。最重要的是,該逼近值只是使用損失函數(shù)的一階偏導(dǎo)來計算。

海塞矩陣由損失函數(shù)的二階偏導(dǎo)組成,擬牛頓法背后的思想主要是僅使用損失函數(shù)的一階偏導(dǎo)數(shù),通過另一矩陣 G 逼近海塞矩陣的逆。擬牛頓法的公式可以表示為:

擬牛頓法的公式

學(xué)習(xí)速率 η可以設(shè)定為固定常數(shù),也可以通過單變量函數(shù)優(yōu)化得到。其中矩陣 G 逼近海塞矩陣的逆,且有不同的方式進(jìn)行逼近。通常,最常用的兩種方式是 Davidon–Fletcher–Powell formula (DFP) 和 the Broyden–Fletcher–Goldfarb–Shanno formula (BFGS)。

擬牛頓法的訓(xùn)練過程流程圖就如下所示。從圖中我們可以看出來模型是通過***次計算擬牛頓訓(xùn)練方向而優(yōu)化參數(shù)的,然后再尋找適當(dāng)?shù)膶W(xué)習(xí)速率。

擬牛頓法適用于絕大多數(shù)案例中:它比梯度下降和共軛梯度法收斂更快,并且也不需要確切地計算海塞矩陣及其逆矩陣。

Levenberg-Marquardt 算法

Levenberg-Marquardt 算法,也稱之為衰減最小二乘法(damped least-squares method),該算法的損失函數(shù)采用平方誤差和的形式。該算法的執(zhí)行也不需要計算具體的海塞矩陣,它僅僅只是使用梯度向量和雅可比矩陣(Jacobian matrix)。

該算法的損失函數(shù)如下方程式所示為平方誤差和的形式:

該算法的損失函數(shù)如下方程式所示為平方誤差和的形式

在上式中,m 是數(shù)據(jù)集樣本的數(shù)量。

我們可以定義損失函數(shù)的雅可比矩陣以誤差對參數(shù)的偏導(dǎo)數(shù)為元素,如下方程式所示:

定義損失函數(shù)的雅可比矩陣以誤差對參數(shù)的偏導(dǎo)數(shù)為元素

其中 m 是數(shù)據(jù)集樣本的數(shù)量,n 是神經(jīng)網(wǎng)絡(luò)的參數(shù)數(shù)量。那么雅可比矩陣就是 m×n 階矩陣。

損失函數(shù)的梯度向量就可以按如下計算出來:

損失函數(shù)的梯度向量就可以按如下計算出來

e 在這里是所有誤差項的向量。

最終,我們可以用以下表達(dá)式逼近海塞矩陣:

逼近海塞矩陣

其中λ為衰減因子,它確保了海塞矩陣的正定性(positiveness),I 是單位矩陣。

下面的表達(dá)式定義了 Levenberg-Marquardt 算法中參數(shù)的更新和優(yōu)化過程:

定義了 Levenberg-Marquardt 算法中參數(shù)的更新和優(yōu)化過程

當(dāng)衰減參數(shù)λ為 0 時,Levenberg-Marquardt 算法就是使用海塞矩陣逼近值的牛頓法。而當(dāng) λ很大時,該算法就近似于采用很小學(xué)習(xí)速率的梯度下降法。如果進(jìn)行迭代導(dǎo)致了損失函數(shù)上升,衰減因子λ就會增加。如果損失函數(shù)下降,那么λ就會下降,從而 Levenberg-Marquardt 算法更接近于牛頓法。該過程經(jīng)常用于加速收斂到極小值點。

使用 Levenberg-Marquardt 法的神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程狀態(tài)圖就如下圖所示。***步就是計算損失函數(shù)、梯度和海塞矩陣逼近值,隨后再在每次迭代降低損失中調(diào)整衰減參數(shù)。

正如我們所了解到的,Levenberg-Marquardt 算法是為平方誤差和函數(shù)所定制的。這就讓使用這種誤差度量的神經(jīng)網(wǎng)絡(luò)訓(xùn)練地十分迅速。然而 Levenberg-Marquardt 算法還有一些缺點,***就是其不能用于平方根誤差或交叉熵誤差(cross entropy error)等函數(shù),此外該算法還和正則項不兼容。***,對于大型數(shù)據(jù)集或神經(jīng)網(wǎng)絡(luò),雅可比矩陣會變得十分巨大,因此也需要大量的內(nèi)存。所以我們在大型數(shù)據(jù)集或神經(jīng)網(wǎng)絡(luò)中并不推薦采用 Levenberg-Marquardt 算法。

內(nèi)存與收斂速度的比較

下圖展示了所有上文所討論的算法,及其收斂速度和內(nèi)存需求。其中收斂速度最慢的是梯度下降算法,但該算法同時也只要求最少的內(nèi)存。相反,Levenberg-Marquardt 算法可能是收斂速度最快的,但其同時也要求最多的內(nèi)存。比較折衷方法是擬牛頓法。

總而言之,如果我們的神經(jīng)網(wǎng)絡(luò)有數(shù)萬參數(shù),為了節(jié)約內(nèi)存,我們可以使用梯度下降或共軛梯度法。如果我們需要訓(xùn)練多個神經(jīng)網(wǎng)絡(luò),并且每個神經(jīng)網(wǎng)絡(luò)都只有數(shù)百參數(shù)、數(shù)千樣本,那么我們可以考慮 Levenberg-Marquardt 算法。而其余的情況,擬牛頓法都能很好地應(yīng)對。

 

原文:https://www.neuraldesigner.com/blog/5_algorithms_to_train_a_neural_network

【本文是51CTO專欄機構(gòu)機器之心的原創(chuàng)譯文,微信公眾號“機器之心( id: almosthuman2014)”】

 

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2021-10-26 16:10:50

神經(jīng)網(wǎng)絡(luò)AI算法

2020-11-02 08:00:00

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)人工智能

2017-07-25 12:59:10

機器學(xué)習(xí)梯度下降算法

2022-10-17 15:43:14

深度學(xué)習(xí)回歸模型函數(shù)

2020-10-20 09:45:23

神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)圖形

2020-09-09 10:20:48

GraphSAGE神經(jīng)網(wǎng)絡(luò)人工智能

2017-03-10 12:16:46

機器學(xué)習(xí)

2018-07-03 16:10:04

神經(jīng)網(wǎng)絡(luò)生物神經(jīng)網(wǎng)絡(luò)人工神經(jīng)網(wǎng)絡(luò)

2018-11-26 07:04:59

神經(jīng)網(wǎng)絡(luò)優(yōu)化函數(shù)

2020-08-06 10:11:13

神經(jīng)網(wǎng)絡(luò)機器學(xué)習(xí)算法

2020-08-03 11:43:01

神經(jīng)網(wǎng)絡(luò)優(yōu)化機器學(xué)習(xí)

2024-05-29 10:08:40

2019-08-19 00:31:16

Pytorch神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)

2024-08-22 08:21:10

算法神經(jīng)網(wǎng)絡(luò)參數(shù)

2022-02-15 23:38:22

Python機器學(xué)習(xí)算法

2017-12-22 08:47:41

神經(jīng)網(wǎng)絡(luò)AND運算

2015-07-02 09:48:11

2010-08-30 16:01:37

2017-03-22 12:25:29

機器學(xué)習(xí)梯度下降法

2010-10-08 14:04:10

JavaScript網(wǎng)
點贊
收藏

51CTO技術(shù)棧公眾號