徹底解決梯度爆炸問題,新方法不用反向傳播也能訓練ResNet

2021-01-09 機器之心Pro

機器之心報導

參與:思、一鳴

反向傳播是深度學習算法中必不可少的組成部分,但是其固有的梯度爆炸(消失),計算速度慢等問題一直困擾著學界。近日,紐西蘭維多利亞惠靈頓大學的研究者提出了一種新型的算法,可以讓深度學習在不依賴反向傳播的情況下進行收斂,徹底解決了梯度爆炸問題。同時,研究者表示,只需要額外訓練單層的網絡就可以達到圖像分類中的 SOTA 性能。

論文地址:https://arxiv.org/pdf/1908.01580v1.pdf

並行計算各層梯度並更新參數解決梯度消失/爆炸問題降低內存佔用

這就是代替反向傳播的 HSIC Bottleneck,反向傳播傳遞的梯度它也能計算,反向傳播帶來的各種缺點它也能彌補。

在這篇論文中,研究者介紹了用於訓練深度神經網絡的希爾伯特·施密特獨立準則(Hilbert-Schmidt independence criterion,HSIC)Bottleneck,用它來代替反向傳播簡直非常美妙了。

研究者表示,HSIC-Bottleneck 的表現在 MNIST/FashionMNIST/CIFAR10 分類中的表現與具有交叉熵目標函數的反向傳播算法相當。且只需要在訓練好的、已凍結參數 HSIC-Bottleneck 網絡上再增加一個基於 SGD 且沒有反向傳播一層網絡能夠實現圖像分類的 SOTA 性能。

標準反向傳播的可視化。

廣受讚譽的 HSIC-Bottleneck

雖然很多研究者都知道我們應該找一種比反向傳播更優秀的方法,但反向傳播應用太廣了,也非常直觀優美。因此,很難有研究者提出真正能 Work,且還非常有優勢的 BP 替代品。在這篇論文放到 Reddit 後,很多研究者都非常贊同這項工作,並表示這個領域非常值得關注。

DontShowYourBack 表示:「這篇論文的附加值並不在於它是否達到了 SOTA 結果,在我看來,作者設法使用了一種既不複雜、又不需要對稱反饋的機制,並獲得了很好的效果,這才是真正重要的因素。理論上,它能應用於更低計算力的平臺和更獨特的架構,因為這些是將反向傳播應用到當前硬體和架構上最大的挑戰。」

該用戶表明,他將親自研究這種方法,並希望能快速看到一些有趣的結果。

HSIC Bottleneck 的作者表示,反向傳播計算梯度的複雜度為 O(D^3),其中 D 表示不同層級的神經元數量。因此整個神經網絡的反傳複雜度為 O(LD^3),其中 L 表示層級數。但是對於 HSIC 來說,它的計算複雜度為 O(M^2),其中 M 表示樣本數量,這樣整個網絡的計算複雜度為 O(LM^2)。

值得注意的是,目前深度模型都是過參數化的,也就是說參數量要遠遠多於數據量,這樣計算量不就大大降低了嗎?

因此有用戶表明:「HSIC 最重要的部分就是將複雜度由反向傳播的 O(D^3) 降低到 O(M^2),這對於擁有數百萬或數十億參數量的神經網絡來說極其重要。」

HSIC 還有很多受到關注的屬性,目前機器學習社區也都在討論它。

探索 BP 替代品的這條不歸路

既然神經網絡可以視為一個複雜的複合函數,且複合的次數就等於層級數,那麼將複合函數的求導法則「鏈式法則」作為導數的獲取方式就非常直觀了。但最直觀的方法並不一定是最優的方法,反向傳播經常會因為各種缺陷刺激著一批批研究者探索新的方法。

儘管反向傳播非常實用、優美,但它的速度、內存佔用、梯度消失/爆炸問題都困惑著一代代研究者。因為前面層級的梯度必須等後面層級的梯度算完,BP 的速度比較慢;因為 BP 需要保存前向傳播的激活值,所以顯存佔用比較高;因為鏈式傳播的連乘方式,梯度非常容易爆炸或消失。

這些都是急需解決的問題,連提出 BP 的 Geoffrey Hinton 都對它充滿了質疑,在 17 年的 CapsNet 中,Hinton 老爺子嘗試通過 Dynamic Routing 找到更好的解,而且這種迭代並不需要反向傳播。Hinton 很早就意識到反向傳播並不是自然界生物大腦中存在的機制,也希望找到更好的反饋機制。

標準前傳與反傳的計算流程,其中紫色點表示計算結果需要保存在內存中。

針對傳播速度,DeepMind 之前曾提出了一種名為解耦層的方法,它採用合成梯度近似經 BP 傳播的梯度,從而使前面層級與後面層級一同更新。而針對內存佔用,OpenAI 也曾嘗試做一個算力與內存間的權衡,他會以某種方式重算部分前傳結果,從而降低內存佔用。

但只要反傳還是鏈式法則,梯度消失和爆炸就不會真正得到解決。在這篇最新的論文中,研究者表示,如果我們直接最大會隱藏層與標註間的互信息,最小化隱藏層與輸入的相互依賴性,我們我們就能直接獲得對應的梯度,這種梯度是不需要反向傳播進行分配額的。因此模型在不要那麼多內存下快速更新權重參數,同時這樣也不會出現梯度爆炸或消失問題。

HSIC Bottleneck 到底是什麼

在論文中,研究人員說明,即使沒有反向傳播,模型依然可以學習分類任務,並獲得相當有競爭力的準確率。他們因此提出了一種深度學習網絡訓練方法。

這一方法由使用近似信息瓶頸的方法訓練而來。只要最大化隱層表示和標籤之間的互信息,並在同時最小化隱層表示和輸入的互相依賴關係即可。從信息瓶頸的角度來說,為了減少模型依賴的參數量,所以要儘可能的讓隱層表示減少從輸入數據中獲得的信息量,而要儘可能讓隱層最大化地「榨乾」學習到的隱層表示,輸出正確的標籤預測結果。因此這一過程可以在儘可能減少數據依賴的情況下獲得能夠預測結果的信息。

由於計算互信息在隨機變量中較為困難,研究人員選擇了基於非參數核的方法——希爾伯特·施密特獨立準則(HSIC),用來刻畫不同層之間的統計學依賴。換句話說,對於每個網絡層,研究人員都會同時最大化層和期望輸入之間的 HSIC,並最小化層和輸入之間的 HSIC。

研究人員進一步證明,按照這樣的訓練方式,網絡中的隱層單元可以組成很有用的表示。具體來說,凍結訓練好的 HSIC 網絡,在不需要反向傳播的情況下,僅更新和訓練一層單層的、使用了卷積 SGD 的網絡就可以達到很近似最佳準確率效果的模型

使用 HSIC-Bottleneck 的優勢在於,相比標準的反向傳播算法,網絡可以快速收斂。這是因為 HSIC-Bottleneck 直接在連續隨機變量上進行運算,相比基於丟棄的傳統信息瓶頸方法更好。這一方法使用了一個傳統的弱訓練網絡用於將表示轉換為輸出標籤的形式。在實際中,研究人員使用了一個網絡,包括很多層和多種維度(如果是全連接層),或者不同數量的核(如果是卷積層)作為開始。

什麼是希爾伯特·施密特獨立準則

說起希爾伯特·施密特獨立準則,我們需要先談談信息瓶頸的問題。信息瓶頸描述的是最小需要多少數據能夠充分預測結果的理論,這是一個隱層表示上的權衡問題,即可以預測輸出所需的信息量和輸入中應當保留多少信息之間的權衡。信息瓶頸原則決定了需要保留多少關於標籤的隱層表示信息,而需要壓縮多少輸入中的信息。

根據信息瓶頸,我們就可以知道,在訓練機器學習模型時,需要對至少多少的輸入信息進行保留,以便隱層表示能夠預測出和標籤相符結果的數據量。

而要計算這個保留的信息量是非常困難的。此外,傳統的信息瓶頸理論大部分基於丟棄信息的方法,因此作者選擇了基於希爾伯特·施密特獨立準則的信息瓶頸方法,用於獲得機器學習過程中的梯度。

那麼,什麼是希爾伯特·施密特獨立準則呢?理論上,希爾伯特·施密特獨立準則可以發現變量之間的任意依賴。當給定正確的核大小(如高斯核)的時候,HSIC 若且唯若兩個隨機變量完全獨立時為 0。因此,只要是兩個變量之間具有非獨立的關係,HSIC 就可以以非參數化的方式將其刻畫出來。

用 HSIC 訓練的網絡是什麼樣的

使用 HSIC-Bottleneck 目標訓練深度學習的網絡被稱為 HSIC-Bottleneck 訓練或預訓練。Bottleneck 訓練網絡的輸出包括分類的必要信息,但不是正確的形式。

研究人員評價了兩種從 HSIC 評價訓練網絡產生分類結果的方法。首先,如果輸出是獨熱向量,則可以根據訓練標籤被直接重新排列。在第二個場景下,研究人員將一個單層和 softmax 輸出層連接到了凍結的 Bottleneck 訓練網絡後,並使用沒有反向傳播的 SGD 方法訓練這個額外增加的層。這一步驟被稱為後訓練(post-training)。

圖 1:HSIC 訓練的網絡(1a)。這是一個標準的前向傳播網絡,但是使用了 HSIC IB 目標函數,這樣可以使最後一層的隱層表示快速地開始訓練。圖 1b 則展示了一個名為「σ-組合」的網絡,每個網絡分支都有一個特定的σ進行訓練。因此,對於從 HSIC 網絡中訓練的每個隱層表示都可能包含在特定尺度下從 HSIC-Bottleneck 目標函數中獲得的不同信息。之後,聚合器會將隱層表示相加,組成一個輸出表示。

研究人員展示的 HSIC 訓練網絡是如下的一個前向輸入網絡。

在網路中,Z = {Zi}, i ∈ {0, ..., L},L 則是隱層的數量。HSIC 訓練網絡可以被理解為是優化的編碼 PθT (Zi |X) 層和 PθT (Y |Zi) where i ∈ {0, ..., L} 解碼層。這個網絡提供了包含用於分類任務信息的隱層。

HSIC-trained 神經網絡效果怎麼樣

首先,研究者繪製了 HSIC-bottleneck 值與激活值的分布,它們都是在訓練中從簡單的模型採樣得出。其次,研究者還提供了 HSIC-bottleneck 和標準反向傳播之間的對比,它們都在相同數據集上使用相同參數量的前饋網絡測試得出。

在對比實驗中,研究者在 MNIST/Fashion MNIST/CIFAR-10 數據集上訓練前饋網絡,並分析了 HSIC-bottleneck 在處理經典分類任務上的表現。其中,前饋網絡還包括非常著名的 ResNet。在研究者完成的所有實驗中,都包含了標準反向傳播、預訓練和後訓練階段,後訓練階段使用的都是 SGD 最優化器。

HSIC-bottleneck 的值長什麼樣

圖 2 展示了 HSIC-bottleneck 的值在訓練深度網絡時的變化。

圖 2:這些實驗展示了,在傳統反向傳播訓練過程中,隨著網絡激活函數 (2a)-(2c) 和深度 (2d)-(2f) 的變化,HSIC-bottleneck 數量 HSIC(X, ZL) 和 HSIC(Y, ZL) 的變化,以及訓練準確率的變化。

圖 3a 和 3b 可視化了前饋網絡中最後一個隱藏層每一個類別的激活值。

圖 3:最優一層 tanh 激活函數值的分布,其神經網絡各層的隱藏單元數為:784-64-32-16-8-4-2-1,它通過 HSIC-bottleneck 目標 (3a) 和反向傳播 (3b) 訓練。

圖 4:MNIST 輸出類別的分布,每一張子圖都展示了類別及對應的分類準確率。

HSIC-bottleneck 效果怎麼樣

圖 5 展示了反向傳播和論文提出的 HSIC 評價訓練方法。在第一個訓練輪中,論文提出的方法的表現就超過了標準的機器學習訓練方法,分別在 Cifar 10,FashionMNIST 和 MNIST 上取得了 43%、85% 和 95% 的效果。在訓練結束後,HSIC-Bottleneck 訓練的網絡表現和其他標準反向傳播算法幾乎一致。

圖 5:論文提出的 HSIC 評價訓練方法在標準的分類問題上的表現。實驗使用了同樣的訓練配置,但是批大小不同。傳統反向傳播使用了 32 和 256 的批大小,但 HSIC 算法只使用了 256 的批大小。

在圖 8 中,研究人員展示了一個有著 5 個卷積殘差塊的 HSIC 訓練的網絡在不同數據集上的表現。每個實驗都包括了 50 個 HSIC 訓練輪,之後每個網絡都會進行後訓練——用一個單層分類網絡進行,這和標準反向傳播訓練網絡不同。

圖 8:在不同數據集上 ResNet 後訓練的效果。

相關連結:https://arxiv.org/abs/1908.01580v1

https://www.reddit.com/r/MachineLearning/comments/cql2yr/deep_learning_without_backpropagation/

相關焦點

  • 用反向傳播算法解釋大腦學習過程?Hinton等人新研究登Nature子刊
    而反向傳播算法在深度神經網絡中解決了上述問題,不過長期以來人們一直認為反向傳播在生物層面上存在問題。儘管如此,神經科學的最新發展和神經網絡的成功激活了人們對反向傳播能否幫助進一步了解皮層學習的興趣。反向傳播算法使用反向連接(feedback connection)傳遞誤差信號,來計算突觸更新,從而實現快速學習。
  • 關於反向傳播在Python中應用的入門教程
    這就提出了新的問題:如果表達式複雜到,即使數學方法也很難求解梯度的解析解。我們將看到,為了處理這種情況,我們可以計算出一些簡單表達式的解析梯度,然後應用鏈式法則。多神經門電路讓我們考慮一個電路門,以x,y和z分別作為輸入和輸出。
  • 反向遺傳學揭示新冠病毒呼吸道感染梯度變化
    反向遺傳學揭示新冠病毒呼吸道感染梯度變化 作者:小柯機器人 發布時間:2020/5/30 13:12:24 美國北卡羅來納大學Ralph S. Baric、Richard C.
  • 快速訓練殘差網絡 ResNet-101,完成圖像分類與預測,精度高達 98%|...
    但是很快發現,雖然只有18層,傳統的訓練方法仍然很耗時,甚至難以完成對101層的ResNet-101的訓練。出於這個原因,這一次,我將採用一種巧妙的方法——遷移學習來實現。即在預訓練模型的基礎上,採用101層的深度殘差網絡ResNet-101,對如下圖所示的花數據集進行訓練,快速實現了對原始圖像的分類和預測,最終預測精確度達到了驚人的98%。
  • 反向飛鳥怎麼練習?掌握訓練的技巧,讓你練出爆炸的肩部
    你知道反向飛鳥該怎麼練習嗎?它是一個能夠讓你練出爆炸肩部的動作!其實反向飛鳥並沒有你想像中那麼簡單,它需要固定的行程,同時如果你要給別人示範這個動作,未必做得正確,這個動作說真的是有一定的技術含量的,如果稍微聳肩就會變成練習斜方肌的動作,肩胛骨如果一動就會變成另一種聯繫方式。
  • 訓練並行性:微軟谷歌再放大招,開源新框架
    數據並行性方法採用大型機器集群,將輸入數據拆分到它們之間。模型並行性嘗試將模型移至具有專用硬體以加速模型訓練的加速器,如GPU或TPU。從高層次上講,幾乎所有訓練數據集都能按照一定的邏輯進行並行化,但關於模型的說法卻不盡相同。例如,一些深度學習模型由可以獨立訓練的並行分支組成,在這種情況下,通常採取的策略是將計算劃分為多個分區,並將不同的分區分配給不同分支。
  • 解決所有發聲問題的方法!
    是在傳統的播音主持配音教學課程基礎上,突出「訓練」和「治療」的核心理念。這是從根本上解決學員發聲難、發聲不好聽、發聲不自信的多方面問題。從目前市場上看,有一部分學員是由於先天聲帶質量或機能偏弱,導致發聲的音色出現啞、暗、劈、噓四大問題。
  • 2分31秒,騰訊雲創造128卡訓練ImageNet新記錄
    騰訊雲希望AI技術能成為普惠的技術幫助人們生活更便捷,通過向客戶提供高效的AI生產工具,AI高效訓練可以觸手可及。 但是要做好高效的AI生產工具,需要做大量的工作,也充滿挑戰。接下來將從具體挑戰,聯合團隊的解決方案,及最終效果幾個方面來陳述,並最終通過2分31秒訓練ImageNet這個案例為典型case來呈現成果。
  • 算法推導:反向傳播算法
    13.3.1 反向傳播算法推導如下圖所示為一個神經網絡的結構圖,由於本文主要探討激活函數在反向傳播過程中的作用,因此不會帶入數值進行計算,而是以兩個權重的更新為案例進行公式的推導,分別為如何通過反向傳播算法更新和的值。
  • 9個讓PyTorch模型訓練提速的技巧
    梯度累加在你已經達到計算資源上限的情況下,你的batch size仍然太小(比如8),然後我們需要模擬一個更大的batch size來進行梯度下降,以提供一個良好的估計。假設我們想要達到128的batch size大小。我們需要以batch size為8執行16個前向傳播和向後傳播,然後再執行一次優化步驟。
  • 試試這四個背部訓練動作,解決圓肩問題體態更好
    哪些背部動作可以解決圓肩的問題幾乎所有的背部動作對於解決圓肩的體態都有所幫助,不過如果想要更有針對性,需要將鍛鍊的目標更集中在上背部的肌肉,我建議可以多做下面幾個背部訓練動作。引體向上的時候挺胸能更好刺激上背部引體向上的時候由於身體懸吊在單槓上,前側容易緊張的胸大肌和胸小肌會承擔部分身體的體重,能起到拉伸放鬆的效果,對於解決圓肩體態一舉兩得。
  • 肩後束的孤立訓練——蝴蝶機反向飛鳥
    一個從120斤的瘦子到現在160斤略有訓練痕跡的健身博主。致力於為大家打造一個完整健身體系。告別碎片化的學習。告別重物搬運。肩後束是一塊比較難練的肌肉,也是最容易被忽視,不容易找發力感的肌肉。今天講的這個動作是後束訓練裡比較容易上手的動作,蝴蝶機反向飛鳥。
  • 9個技巧讓你的PyTorch模型訓練變得飛快!
    我敢打賭你仍然使用32位精度或GASP甚至只在一個GPU上訓練。我明白,網上都是各種神經網絡加速指南,但是一個checklist都沒有(現在有了),使用這個清單,一步一步確保你能榨乾你模型的所有性能。本指南從最簡單的結構到最複雜的改動都有,可以使你的網絡得到最大的好處。
  • 進化策略入門:最優化問題的另一種視角
    如果我們能夠找到合適的模型參數,我們可以使用神經網絡解決許多困難的問題。深度學習的成功在很大程度上歸功於使用反向傳播算法,它可以高效地計算目標函數梯度的能力,而這個目標函數中包含著所有的模型參數。通過這些基於梯度的計算,我們能高效地在參數空間中尋找到有利於神經網絡完成任務的解。然而,仍然有很多問題是反向傳播算法所不適用的。