從梯度下降到擬牛頓法:詳解訓練神經網絡的五大學習算法

2020-12-06 機器之心Pro

選自 Neuraldesigner作者:Alberto Quesada機器之心編譯參與:蔣思源

在神經網絡中,系統的學習過程一般是由訓練算法所主導。而現如今有許多不同的學習算法,它們每一個都有不同的特徵和表現。因此本文力圖描述清楚五大學習算法的基本概念及優缺點,給讀者們闡明最優化在神經網絡中的應用。

問題形式化

神經網絡中的學習過程可以形式化為最小化損失函數問題,該損失函數一般是由訓練誤差和正則項組成。誤差項會衡量神經網絡擬合數據集的好壞,也就是擬合數據所產生的誤差。正則項主要就是通過給特徵權重增加罰項而控制神經網絡的有效複雜度,這樣可以有效地控制模型過擬合問題。

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

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

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

最小化多變量連續可導函數的方法廣泛應用於學習過程中,許多常規方法都將這種最優化方法直接應用於神經網絡的訓練中。

單變量函數優化(One-dimensional optimization)

雖然損失函數是由多變量決定的(權重的數量通常十分巨大),但首先理解單變量函數的優化方法是十分重要的。並且實際上單變量優化方法經常應用到神經網絡的訓練過程中,超參數的調整就可以使用單變量優化法。

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

點η1 和點η2 定義了包含單變量函數 f(η)最優點η*的子區間

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

多變量函數優化(Multidimensional optimization)

神經網絡的學習過程可以形式化為求將訓練損失函數 f 最小化的參數向量 w*。數學或實際都證明如果神經網絡的損失函數達到了極小值,那麼梯度也必定為 0 向量。

通常情況下,損失函數為參數的非線性函數,所以找到一個封閉的訓練算法(closed training algorithms)求最優解是不可能的。相反,我們考慮通過一系列迭代步在參數空間內搜尋最優解。在每一步迭代中,我們可以通過調整神經網絡的參數降低損失函數的值。

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

下面,本文將描述在神經網絡中最重要的學習算法。

梯度下降

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

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

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

下面是一張使用梯度下降算法進行學習的流程圖。我們可以看到,參數向量通過兩步進行優化:首先,計算梯度下降的訓練方向。其次,尋找合適的學習速率。

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

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

牛頓法

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

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

因此,從參數向量 w0 開始,牛頓法服從以下方式進行迭代:

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

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

使用牛頓法的訓練過程狀態圖就如下圖所示。從此圖可以看出來,系統首先通過獲得牛頓訓練方向,然後獲得合適的學習速率來進行參數的更新優化。

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

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

共軛梯度法(Conjugate gradient)

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

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

我們用 d 表示訓練方向向量,然後從初始參數向量 w0 和初始訓練方向向量 d0=-g0 開始,共軛梯度法所構建的訓練方向序列為:

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

參數通過下面的表達式得以更新和優化。通常學習速率η可使用單變量函數優化方法求得。

共軛梯度法的訓練過程流程圖就如下所示。從圖中我們可以看出來模型是通過第一次計算共軛梯度訓練方向而優化參數的,然後再尋找適當的學習速率。

共軛梯度法已經證實其在神經網絡中要比梯度下降法有效得多。並且由於共軛梯度法並沒有要求使用海塞矩陣,所以在大規模神經網絡中其還是可以做到很好的性能。

擬牛頓法(Quasi-Newton method)

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

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

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

擬牛頓法的訓練過程流程圖就如下所示。從圖中我們可以看出來模型是通過第一次計算擬牛頓訓練方向而優化參數的,然後再尋找適當的學習速率。

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

Levenberg-Marquardt 算法

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

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

在上式中,m 是數據集樣本的數量。

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

其中 m 是數據集樣本的數量,n 是神經網絡的參數數量。那麼雅可比矩陣就是 m×n 階矩陣。

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

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

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

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

下面的表達式定義了 Levenberg-Marquardt 算法中參數的更新和優化過程:

當衰減參數λ為 0 時,Levenberg-Marquardt 算法就是使用海塞矩陣逼近值的牛頓法。而當 λ很大時,該算法就近似於採用很小學習速率的梯度下降法。如果進行迭代導致了損失函數上升,衰減因子λ就會增加。如果損失函數下降,那麼λ就會下降,從而 Levenberg-Marquardt 算法更接近於牛頓法。該過程經常用於加速收斂到極小值點。

使用 Levenberg-Marquardt 法的神經網絡訓練過程狀態圖就如下圖所示。第一步就是計算損失函數、梯度和海塞矩陣逼近值,隨後再在每次迭代降低損失中調整衰減參數。

正如我們所了解到的,Levenberg-Marquardt 算法是為平方誤差和函數所定製的。這就讓使用這種誤差度量的神經網絡訓練地十分迅速。然而 Levenberg-Marquardt 算法還有一些缺點,第一就是其不能用於平方根誤差或交叉熵誤差(cross entropy error)等函數,此外該算法還和正則項不兼容。最後,對於大型數據集或神經網絡,雅可比矩陣會變得十分巨大,因此也需要大量的內存。所以我們在大型數據集或神經網絡中並不推薦採用 Levenberg-Marquardt 算法。

內存與收斂速度的比較

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

總而言之,如果我們的神經網絡有數萬參數,為了節約內存,我們可以使用梯度下降或共軛梯度法。如果我們需要訓練多個神經網絡,並且每個神經網絡都只有數百參數、數千樣本,那麼我們可以考慮 Levenberg-Marquardt 算法。而其餘的情況,擬牛頓法都能很好地應對。

相關焦點

  • 訓練神經網絡的五大算法
    訓練神經網絡的五大算法 Alberto Quesada 發表於 2017-11-16 15:30:54   神經網絡模型的每一類學習過程通常被歸納為一種訓練算法。
  • 一文看懂各種神經網絡優化算法:從梯度下降到Adam方法
    原標題:一文看懂各種神經網絡優化算法:從梯度下降到Adam方法 王小新 編譯自 Medium 量子位 出品 | 公眾號 QbitAI 在調整模型更新權重和偏差參數的方式時,你是否考慮過哪種優化算法能使模型產生更好且更快的效果?
  • 詳解梯度下降算法 正確訓練模型利刃!
    【IT168 資訊】梯度下降是目前最流行的優化策略,目前用於機器學習和深度學習。它在訓練模型時使用,可以與每種算法結合使用,易於理解和實施。因此,每個使用機器學習的人都應該理解它的概念。閱讀完這篇文章後,你將了解梯度下降是如何工作的,它今天使用了哪些類型,以及它們的優點和權衡。
  • 梯度下降算法詳解
    梯度下降算法是一種非常經典的求極小值的算法,比如在線性回歸裡我們可以用最小二乘法去解析最優解,但是其中會涉及到對矩陣求逆,由於多重共線性問題的存在是很讓人難受的,無論進行L1正則化的Lasso回歸還是L2正則化的嶺回歸,其實並不讓人滿意,因為它們的產生是為了修復此漏洞,而不是為了提升模型效果,甚至使模型效果下降。
  • 今日面試題分享:牛頓法和梯度下降法有什麼不同?
    關於牛頓法和梯度下降法的效率對比: a)從收斂速度上看 ,牛頓法是二階收斂,梯度下降是一階收斂,前者牛頓法收斂速度更快。但牛頓法仍然是局部算法,只是在局部上看的更細緻,梯度法僅考慮方向,牛頓法不但考慮了方向還兼顧了步子的大小,其對步長的估計使用的是二階逼近。 b)根據wiki上的解釋,從幾何上說,牛頓法就是用一個二次曲面去擬合你當前所處位置的局部曲面,而梯度下降法是用一個平面去擬合當前的局部曲面,通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。
  • 前沿| 利用遺傳算法優化神經網絡:Uber提出深度學習訓練新方式
    Stanley、Jeff Clune 機器之心編譯 參與:陳韻竹、劉曉坤 在深度學習領域,對於具有上百萬個連接的多層深度神經網絡(DNN),現在往往通過隨機梯度下降(SGD)算法進行常規訓練許多人認為,SGD 算法有效計算梯度的能力對於這種訓練能力而言至關重要。但是,Uber 近日發布的五篇論文表明,神經進化(neuroevolution)這種利用遺傳算法的神經網絡優化策略,也是訓練深度神經網絡解決強化學習(RL)問題的有效方法。
  • [算法系列]最優化問題綜述
    2)隨機梯度下降(StochasticGradient Descent,SGD)  (1)上面的風險函數可以寫成如下這種形式,損失函數對應的是訓練集中每個樣本的粒度,而上面批量梯度下降對應的是所有的訓練樣本:
  • 技術| 深度解讀最流行的優化算法:梯度下降
    > 梯度下降法,是當今最流行的優化(optimization)算法,亦是至今最常用的優化神經網絡的方法。本文旨在讓你對不同的優化梯度下降法的算法有一個直觀認識,以幫助你使用這些算法。我們首先會考察梯度下降法的各種變體,然後會簡要地總結在訓練(神經網絡或是機器學習算法)的過程中可能遇到的挑戰。
  • 今日面試題分享:什麼是擬牛頓法(Quasi-Newton Methods)?
    >參考答案:解析:擬牛頓法是求解非線性優化問題最有效的方法之一,於20世紀50年代由美國Argonne國家實驗室的物理學家W.C.Davidon所提出來。Davidon設計的這種算法在當時看來是非線性優化領域最具創造性的發明之一。不久R. Fletcher和M. J. D. Powell證實了這種新的算法遠比其他方法快速和可靠,使得非線性優化這門學科在一夜之間突飛猛進。擬牛頓法的本質思想是改善牛頓法每次需要求解複雜的Hessian矩陣的逆矩陣的缺陷,它使用正定矩陣來近似Hessian矩陣的逆,從而簡化了運算的複雜度。
  • 谷歌大腦發現神經網絡「牛頓法」:網絡足夠寬就能簡化成線性模型
    雖然這些理論結果只是在無限寬度條件下成立,但谷歌發現原始網絡的預測與線性版本的預測之間的一致性極好。而且對不同的體系結構、優化方法和損失函數都適用。隨著網絡寬度變大,神經網絡可以被其初始化參數的一階泰勒展開項所取代。 而一階線性模型動態的梯度下降是可解析的。
  • 【乾貨】機器學習最常用優化之一——梯度下降優化算法綜述
    【新智元導讀】梯度下降算法是機器學習中使用非常廣泛的優化算法,也是眾多機器學習算法中最常用的優化方法。幾乎當前每一個先進的(state-of-the-art)機器學習庫或者深度學習庫都會包括梯度下降算法的不同變種實現。
  • 把梯度下降算法變成酷炫遊戲,這有一份深度學習通俗講義
    如果代碼和公式讓你感到枯燥,那麼不妨從這段酷炫的SGD視頻入手,再讀一讀這篇文章,它會幫你更直觀地理解深度學習。梯度下降算法的可視化到底什麼是梯度?深度學習的架構和最新發展,包括CNN、RNN、造出無數假臉的GAN,都離不開梯度下降算法。梯度可以理解成山坡上某一點上升最快的方向,它的反方向就是下降最快的方向。
  • 吳恩達深度學習(20)-激活函數的導數和神經網絡的梯度下降
    激活函數的導數(Derivatives of activation functions)在神經網絡中使用反向傳播的時候,你真的需要計算激活函數的斜率或者導數。)g(z)=max(0,z)註:通常在z= 0的時候給定其導數1,0;當然z=0的情況很少4)Leaky linear unit (Leaky ReLU)與ReLU類似註:通常在z=0的時候給定其導數1,0.01;當然z=0的情況很少神經網絡的梯度下降(Gradient descent for neural
  • MAC 的可變多隱層神經網絡
    目前只實現了一個學習方法:Im(Levenberg-Marquardt訓練算法),你可以添加不同的學習方法到NeuralNetwork類。什麼是最優化,可分為幾大類?回答:Levenberg-Marquardt算法是最優化算法中的一種。
  • 從零開始:教你如何訓練神經網絡
    在理解這些基礎後,本文詳細描述了動量法等當前十分流行的學習算法。此外,本系列將在後面介紹 Adam 和遺傳算法等其它重要的神經網絡訓練方法。 I.簡介 本文是作者關於如何「訓練」神經網絡的一部分經驗與見解,處理神經網絡的基礎概念外,這篇文章還描述了梯度下降(GD)及其部分變體。
  • 谷歌大腦提出「洗髮水」二階優化算法,Transformer訓練時間減少40%
    無論是SGD還是Adam,此類優化算法在都是計算損失函數的一階導數——梯度,然後按照某種規定的方式讓權重隨梯度下滑方向迭代。其實二階梯度會有更好的特性,因為它是計算梯度的導數,能夠更快地找到最合適的下降方向和速度。然而出於計算量和存儲成本的考慮,二階優化算法很少用到。
  • 吳恩達深度學習筆記(12)-計算圖計算梯度下降
    邏輯回歸中的梯度下降(Logistic Regression Gradient Descent)本節我們討論怎樣通過計算偏導數來實現邏輯回歸的梯度下降算法。它的關鍵點是幾個重要公式,其作用是用來實現邏輯回歸中梯度下降算法。但是在本節中,將使用計算圖對梯度下降算法進行計算。
  • 一文詳解神經網絡 BP 算法原理及 Python 實現
    最近這段時間系統性的學習了 BP 算法後寫下了這篇學習筆記,因為能力有限,若有明顯錯誤,還請指正。 什麼是梯度下降和鏈式求導法則 假設我們有一個函數 J(w),如下圖所示。
  • 盤點| 機器學習入門算法:從線性模型到神經網絡
    原標題:盤點 | 機器學習入門算法:從線性模型到神經網絡 選自Dataconomy 機器之心編譯 參與:王宇欣、吳攀、蔣思源而實際上機器學習是如何工作的呢?答案很簡單:算法(algorithm)。 機器學習是人工智慧(artificial intelligence)的一種,其本質上講,就是計算機可以在無需編程的情況下自己學習概念(concept)。這些電腦程式一旦接觸新的數據,就將會改變它們的「思考」(或者輸出)。為了實現機器學習,算法是必需的。
  • 機器學習算法盤點:人工神經網絡、深度學習
    常見算法有邏輯回歸(Logistic Regression)和反向傳遞神經網絡(Back Propagation Neural Network)   非監督式學習:      算法類似性   根據算法的功能和形式的類似性,我們可以把算法分類,比如說基於樹的算法,基於神經網絡的算法等等。當然,機器學習的範圍非常龐大,有些算法很難明確歸類到某一類。而對於有些分類來說,同一分類的算法可以針對不同類型的問題。這裡,我們儘量把常用的算法按照最容易理解的方式進行分類。