ReZero:使用加權殘差連接加速深度模型收斂

2021-02-28 PaperWeekly

論文標題:

Thomas Bachlechner, Bodhisattwa Prasad Majumder, Huanru Henry Mao, Garrison W. Cottrell, Julian McAuley

論文作者:

Thomas Bachlechner, Bodhisattwa Prasad Majumder, Huanru Henry Mao, Garrison W. Cottrell, Julian McAuley

論文連結:

https://arxiv.org/abs/2003.04887

代碼連結:

https://github.com/majumderb/rezero

在NLP領域,如Transformer的深度模型由於梯度消失/爆炸難以訓練,往往需要花費很長的時間才能收斂。

為此,本文提出ReZero:在殘差連接前增加一個權重,使模型能夠更好接受到梯度信號,加快收斂速度。

這種方法能在上百層的Transformer上收斂,並在常見深層模型上大大縮短訓練時間,同時取得相近的結果。

一般來說,模型越深效果越好。但是同時,模型越深也更難訓練——即無法收斂到訓練集上一個好的值。

普遍認為,這是深度模型的梯度消失/梯度爆炸現象導致的:梯度的指數級爆炸使得訓練極其不穩定,指數級消失使得訓練非常緩慢。

拿Transformer來說,模型越深,底層收到的梯度就越低,如下圖所示(來自Improving Deep Transformer with Depth-Scaled Initialization and Merged Attention):

比如看圖中紅色曲線,在高層的時候,梯度的範數尚且較大,但當來到底層的時候,梯度的範數就非常小,特別是在Decoder端,幾乎趨於零。這說明了深層模型仍然有比較嚴重的梯度消失問題。

那麼,這個問題的解決方案有什麼呢?在計算機視覺上,Normalization和殘差連接有很大幫助,但在NLP領域,它們的作用就相當有限,因為Transformer本身就內置了殘差連接和Normalization技術。

為了能夠更好地解決NLP模型上的訓練問題,本文提出了一種非常簡單的方法:ReZero——對每個殘差連接加上一個可學習的係數——使得模型能在訓練初期更加穩定,進而促進整個訓練過程。

本方法在12層的Transformer上取得約56%的訓練加速,在32層前饋網絡上取得15倍的加速,在ResNet54上實現了32%的加速。

更重要的是,該方法能夠直接在128層的Transformer上取得收斂,同時還能丟掉Transformer中的Normalization和訓練時的warm-up環節。

在閱讀完本文後,讀者可以思考如下問題:

首先來簡要回顧一下殘差連接。對一個層的模型,第層的輸入(也即第層的輸出)可以表示為:

而ReZero做的很簡單,它只是在殘差連接前加了一個可學習的參數:

並且所有的都初始為0。我們通過一個簡單的實驗說明並分析該方法的有效性。

設現在有個模型有層,每一層只有一個神經元,而且所有層都共享這一個神經元,那麼,模型的輸出就可以表示為:

顯然,當時就是殘差網絡,當初始化時就是ReZero。此時,輸入對輸出的Jacobian矩陣就是

此時,如果初始化,那麼就趨近,這就會導致輸入很小的擾動造成輸出的巨大變化,從而梯度非常不穩定。

而當時,這種不穩定就會大大緩解。下面我們用反向傳播加以解釋。設學習率為,損失函數為,那麼參數的更新就是:

在這個式子裡,我們主要看學習率,參數。當,上式右邊第二項(忽略損失項和輸入)成為,這個時候為了讓訓練更加穩定,學習率就需要正比於

但是對於過大的和接近-1的參數,單純依靠學習率的手動調整就難以解決這個問題了。

當初始化的時候,上述問題就可以得到解決。因為初始化,從而第一輪的梯度更新沒有更新參數,但是是可以更新的:

這樣,在下一輪梯度更新的時候,由於此時不為0,則模型參數就可以更新。把當前的帶入到上面更新的式子中,我們有:

比較兩式,其最大的不同在於括號內的損失函數。換言之,如果損失函數是合理的,那麼當前的更新就不會導致過分的梯度波動(),每次梯度下降使得模型參數既可以更新,又不會不穩定。

下圖是模型擬合的對數等高線示意圖,左圖是使用二次損失的損失圖,右圖是對應的梯度範數。紅線是初始化和不同的初始化在訓練中的變化軌跡。我們注意到以下事實:

訓練全連接模型

首先我們在簡單的全連接模型上實驗。該全連接模型激活函數為ReLU,層數為32,數據集為CIFAR-10,比較的模型有:

FC:單純的全連接

FC+Res:全連接和殘差結合 

FC+Norm:全連接和normalization

FC+Res+Pre-Norm: 全連接和殘差和pre-normalization

FC+Res+Post-Norm:全連接和殘差和post-normalization

FC+ReZero:

注意到,ReZero沒有使用Normalization。下圖是各個模型的收斂情況:

可以看到,ReZero比其他三個模型能夠快7~15倍收斂,而且,當我們把全連接層加到10K層,ReZero依然可以收斂,而其他模型卻無法收斂。

訓練Transformer

我們的重點是訓練Transformer,一個被普遍認為非常難以訓練的模型。我們把Transformer的結構修正為:

同樣,我們丟掉了Transformer本來的Normalization,而且也不需要warm-up。下圖呈現了Transformer輸出-輸入的Jacobian矩陣中的奇異值在不同層的模型下的分布。

先看左圖,當層數較少(4)時,保持在附近(圖中取了對數),這就表明輸入的變化既不會造成輸出的太大變化,也能使得模型得以訓練。

而當層數增加,尤其是增加到64層時,該值非常小,這說明無論輸入怎麼改變,模型的輸出都八九不離十,模型難以訓練。

再看右圖是使用ReZero對64層的Transformer訓練的情況。在一開始的時候,由於被初始化為0,模型參數無法更新,值都是1,而當模型開始訓練後,也能保持以1為中心的分布,使得模型能夠訓練下去。

下面來具體看ReZero的速度提升和最終的效果。下表是12層的Transformer使用各方法在enwiki8數據集上的收斂情況。可以看到,ReZero只需要8800次迭代,而原始Transformer需要13690次迭代,速度方面加快了56%。

下表是各方法在enwiki8測試集上的結果。128層的Transformer能夠在ReZero下收斂,並且取得了和Char-level的Transformer非常相似的結果,而參數量只有後者的一半。

最後我們來可視化64層Transformer在訓練過程中,各層的係數參數的變化情況,如下圖所示。

由於我們初始化,故在訓練的開始階段所有層的係數都比較小,這可以使得各層訓練穩定。

當模型訓練到一定階段之後,輸入的擾動不會造成輸出的劇烈改變,係數開始增大,這是模型加速訓練、訓練的階段。

在此之後,係數再一次減小,使得模型訓練進入第三個階段,直到最終收斂。

訓練ResNet

最後,我們也將ReZero應用到了ResNet56上。在CIFAR-10上的結果顯示,使用ReZero可以降低基線模型的Error rate,同時也加快了約30%的收斂速度。

本文提出了一個非常簡單但是非常有效的殘差網絡變體——ReZero。和殘差網絡不同,它是在殘差連接前增加一個可學習的係數,並初始化為0,使得模型在訓練初期更加穩定。

實驗表明,運用這種方法可以直接在非常深的Transformer上收斂,而且丟掉了原有的Normalization和warmup。如果它能經得住大量實驗的檢驗,那麼ReZero非常有希望成為今後Transformer的標配。

ReZero和Highway的區別;Highway的公式是,其中表示各部分前饋的信息量。

在開始的時候,初始化為負值,這時候,就趨近於0,也就是上式趨近於,這實際上是和ReZero的想法是一致的——在訓練開始的時候保持穩定有助於深層模型的收斂。

不同的是,ReZero更加簡單粗暴——直接使用一個可學習的係數而不是所謂的門控,降低了模型學習的難度,簡化了複雜度,從而更有利於模型控制訓練過程。

和Transformer中warmup訓練的聯繫。在我們的回答神經網絡中 warmup 策略為什麼有效;有什麼理論解釋麼?中,我們說:「剛開始模型對數據的「分布」理解為零,在第一輪訓練的時候,每個數據點對模型來說都是新的,模型會很快地進行數據分布修正,如果這時候學習率就很大,極有可能導致開始的時候就對該數據「過擬合」,後面要通過多輪訓練才能拉回來,浪費時間。

當訓練了一段時間(比如兩輪、三輪)後,模型已經對每個數據點看過幾遍了,或者說對當前的batch而言有了一些正確的先驗,較大的學習率就不那麼容易會使模型學偏,所以可以適當調大學習率。

這個過程就可以看做是warmup。那麼為什麼之後還要decay呢?當模型訓到一定階段後(比如十個epoch),模型的分布就已經比較固定了,或者說能學到的新東西就比較少了。

如果還沿用較大的學習率,就會破壞這種穩定性,用我們通常的話說,就是已經接近loss的local optimal了,為了靠近這個point,我們就要慢慢來。」

從本文最後的可視化圖中可見,我們的解釋是完全符合這種直覺的。所以說,ReZero和warmup的作用都是為了訓練的穩定,只是一個選擇了自動學習,一個選擇手動調整。

🔍

現在,在「知乎」也能找到我們了

進入知乎首頁搜索「PaperWeekly」

點擊「關注」訂閱我們的專欄吧

關於PaperWeekly

PaperWeekly 是一個推薦、解讀、討論、報導人工智慧前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號後臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群裡。

相關焦點

  • 【ReZero】使用加權殘差連接加速深度模型收斂
    Cottrell, Julian McAuley論文連結:arxiv.org/abs/2003.0488代碼連接:github.com/majumderb/re在NLP領域,如Transformer的深度模型由於梯度消失/爆炸難以訓練,往往需要花費很長的時間才能收斂。
  • 香儂讀 |ReZero: 使用加權殘差連接加速深度模型收斂
    Cottrell, Julian McAuley論文連結:https://arxiv.org/abs/2003.04887代碼連結:https://github.com/majumderb/rezero在NLP領域,如Transformer的深度模型由於梯度消失/
  • ResNet:用於圖像識別的深度殘差網絡
    使用[21]中的標準顏色增強。在每次卷積之後和激活之前,緊接著[16],我們採用批歸一化(BN)[16]。我們按照[13]中的方法初始化權重,並從頭開始訓練所有普通/殘差網絡。我們使用最小批量為256的SGD。學習率從0.1開始,當誤差平穩時除以10,並且對模型進行了多達60×10 4次迭代的訓練。我們使用0.0001的權重衰減和0.9的動量。
  • 譯文 | Inception-v4,Inception-ResNet 和殘差連接對學習的影響(多圖)
    原文:https://arxiv.org/pdf/1602.07261.pdf——前言:作者認為殘差連接在訓練深度卷積模型是很有必要的。至少在圖像識別上,我們的研究似乎並不支持這一觀點。摘要:    近年來,深度卷積神經網絡對圖像識別性能的巨大提升發揮著關鍵作用。以Inception網絡為例,其以相對較低的計算代價取得出色的表現。
  • 「模型解讀」resnet中的殘差連接,你確定真的看懂了?
    編輯 | 言有三1 殘差連接想必做深度學習的都知道skip connect,也就是殘差連接,那什麼是skip connect呢?如下圖上面是來自於resnet【1】的skip block的示意圖。不過,好是好了,隨著網絡深度的增加,帶來了許多問題,梯度消散,梯度爆炸;在resnet出來之前大家沒想辦法去解決嗎?當然不是。更好的優化方法,更好的初始化策略,BN層,Relu等各種激活函數,都被用過了,但是仍然不夠,改善問題的能力有限,直到殘差連接被廣泛使用。
  • 獲獎無數的深度殘差學習,清華學霸的又一次No.1 | CVPR2016 最佳...
    我們提出了一種減輕網絡訓練負擔的殘差學習框架,這種網絡比以前使用過的網絡本質上層次更深。我們明確地將這層作為輸入層相關的學習殘差函數,而不是學習未知的函數。同時,我們提供了全面實驗數據,這些數據證明殘差網絡更容易優化,並且可以從深度增加中大大提高精度。我們在ImageNet數據集用152 層--比VGG網絡深8倍的深度來評估殘差網絡,但它仍具有較低的複雜度。
  • 殘差網絡解決了什麼,為什麼有效?
    1.2 網絡退化問題在前面的討論中,梯度彌散/爆炸問題導致模型訓練難以收斂,但是這個問題很大程度上已經被標準初始化和中間層正規化方法有效控制了,這些方法使得深度神經網絡可以收斂。深度神經網絡面臨的另一朵烏雲是網絡退化問題:在神經網絡可以收斂的前提下,隨著網絡深度增加,網絡的表現先是逐漸增加至飽和,然後迅速下降[1]。需要注意,網絡退化問題不是過擬合導致的,即便在模型訓練過程中,同樣的訓練輪次下,退化的網絡也比稍淺層的網絡的訓練錯誤更高,如下圖[1]所示。
  • 深入探討:殘差網絡解決了什麼,為什麼有效?
    >這個問題很大程度上已經被標準初始化和中間層正規化方法有效控制了,這些方法使得深度神經網絡可以收斂。殘差單元可以以跳層連接的形式實現,即將單元的輸入直接與單元輸出加在一起,然後再激活。因此殘差網絡可以輕鬆地用主流的自動微分深度學習框架實現,直接使用BP算法更新參數[1]。
  • 深度神經網絡發展歷程全回顧:如何加速DNN運算?
    鑑於篇幅,雷鋒網主要針對論文中的如下幾部分詳細介紹:DNN的背景,歷史和應用DNN的組成部分,以及常見的DNN模型簡介如何使用硬體加速DNN運算DNN的背景人工智慧與深度神經網絡之前的模型通常是級聯的,而Inception模型是並行連接的。可以看到,它使用了多種大小的濾波器對輸入進行處理,這是為了能夠在不同尺度上處理輸入。22層網絡包括了三個卷積層,接下來使9個inceptioin層(每層相當於兩個卷積層),以及一個全連接層。
  • 科普丨一文了解殘差網絡
    然而,與人們普遍認為的相反,人們發現,這種模型在提供預期結果方面效率低下。此外,訓練精度在某一點後開始下降。解決上述問題和理解理論與現實之間的差異的一個障礙是眾所周知的梯度消失和梯度爆炸問題。它們從一開始就阻礙了收斂,這使得模型在準確和高效的學習能力方面不穩定。然而,這個問題已經在很大程度上通過遞歸神經網絡(使用LSTM)、歸一初始化和中間歸一化來解決。
  • 何凱明的深度殘差網絡PPT是這樣的|ICML2016 tutorial
    ,使用 ResNet-20到 ResNet-110, 訓練代碼等Lasagne, CIFAR-10, 使用 ResNet-32 和 ResNet-56 以及訓練代碼等Neon, CIFAR-10, 使用預訓練的 ResNet-32到 ResNet-110 模型、代碼等Torch, MNIST, 100層Neon, Place2 (mini),
  • 一文讀懂殘差網絡ResNet
    這就是殘差網路的核心公式,換句話說,殘差是網絡搭建的一種操作,任何使用了這種操作的網絡都可以稱之為殘差網絡。一個具體的殘差模塊的定義如下圖:這部分我們討論了殘差網絡有能力擬合更高維的函數,但是在實際的訓練過程中仍然可能存在各種各樣的問題使得學習到最優的參數非常困難,因此下一小節討論殘差在訓練過程中的優越性。2.殘差網絡訓練過程的優越性這個部分我們討論為什麼殘差能夠緩解深層網絡的訓練問題,以及探討可能的短連接方式和我們最終選擇的殘差的理由。
  • 深度學習之卷積神經網絡經典模型
    因為卷積層與池化層是交替出現的,所以隱藏層的第三層又是一個卷積層,第二個卷積層由16個特徵映射構成,每個特徵映射用於加權和計算的卷積核為10x10的。第四個隱藏層,也就是第二個池化層同樣包含16個特徵映射,每個特徵映射中所用的卷積核是5x5的。第五個隱藏層是用5x5的卷積核進行運算,包含了120個神經元,也是這個網絡中卷積運算的最後一層。之後的第六層便是全連接層,包含了84個特徵圖。
  • 十分鐘一起學會ResNet殘差網絡
    目錄深層次網絡訓練瓶頸:梯度消失,網絡退化ResNet簡介ResNet解決深度網絡瓶頸的魔力ResNet使用的小技巧總結深層次網絡訓練瓶頸:梯度消失,網絡退化深度卷積網絡自然的整合了低中高不同層次的特徵,特徵的層次可以靠加深網絡的層次來豐富。從而,在構建卷積網絡時,網絡的深度越高,可抽取的特徵層次就越豐富。
  • 深度殘差收縮網絡:藉助注意力機制實現特徵的軟閾值化
    本文首先回顧了相關基礎知識,然後介紹了深度殘差收縮網絡的動機和具體實現,希望對大家有所幫助相關基礎深度殘差收縮網絡主要建立在三個部分的基礎之上:深度殘差網絡、軟閾值函數和注意力機制。1.1 深度殘差網絡深度殘差網絡無疑是近年來最成功的深度學習算法之一,在谷歌學術上的引用已經突破四萬次。相較於普通的卷積神經網絡,深度殘差網絡採用跨層恆等路徑的方式,緩解了深層網絡的訓練難度。
  • 深度學習第19講:CNN經典論文研讀之殘差網絡ResNet及其keras實現
    數據挖掘與機器學習,R與Python,理論與實踐並行。及其Tensorflow實現深度學習第17講:keras入門和快速上手指南深度學習第18講:CNN經典論文研讀之VGG網絡及其tensorflow實現      在 VGG 網絡論文研讀中,我們了解到卷積神經網絡也可以進行到很深層,VGG16 和 VGG19 就是證明。
  • 從FM推演各深度CTR預估模型(附代碼)
    AFM通過在逐元素乘法之後形成的向量進行加權求和,而且權重是基於網絡自身來產生的。其方法是引入一個注意力子網絡(Attention Net)。當權重都相等時,AFM退化成無全連接層的NFM。He等提出的深度殘差網絡能夠大大加深神經網絡的深度,同時不會引起退化的問題,顯著提高了模型的精度。Ying Shan等將該思路應用到廣告點擊率預估模型中,提出深度交叉模型(DeepCross,2016)。
  • 綜述論文:當前深度神經網絡模型壓縮和加速方法速覽
    對於只有兆字節資源的手機和 FPGA 等設備,如何使用這些方法壓縮模型就很重要了。實現這個目標需要聯合多個學科以尋找解決方案,包括但不限於機器學習、最優化、計算機架構、數據壓縮、索引和硬體設計等。在本論文中,我們回顧了在壓縮和加速深度神經網絡方面的工作,它們廣泛受到了深度學習社區的關注,並且近年來已經實現了很大的進展。
  • 深度 | 從AlexNet到殘差網絡,理解卷積神經網絡的不同架構
    深度 vanilla 神經網絡就具備大量參數,因為缺乏充分的訓練樣本,它訓練出的系統會發生模型過擬合的情況。但是如果使用卷積神經網絡,從頭訓練網絡的任務可以使用 ImageNet 等大型數據集。其背後的原因是神經元之間的參數共享和卷積層中的稀疏連接。在卷積操作中,一層的神經元僅與輸入神經元存在局部連接,2-D 特徵圖共享參數集。