新的網路優化方法:隨機權值平均
當然了,如果能先看看 Vitaly Bushaev 的《改善我們的處理學習率的方式》,接下來的閱讀將會更輕鬆。雷鋒網 AI 科技評論全文編譯如下。
傳統的神經網路集成
一般我們說的「集成」(ensemble),就是組合若干不同的模型,讓它們基於相同的輸入做出預測,接著通過某種平均化方法決定集成模型的最終預測。這個決定過程可能是通過簡單的投票或取均值,也可能是通過另一個模型,該模型基於集成模型的結果,學習預測正確值或標籤。嶺回歸是一種可以組合若干個不同預測的結果的方法,Kaggle 上衛星數據識別熱帶雨林競賽的冠軍就使用過這一方法。
快照集成是在每次學習率周期末尾保存模型,然後在預測時使用。
集成應用於深度學習時,組合若干網路的預測以得到一個最終的預測。通常,使用好幾個不同架構的神經網路比較好,因為不同架構的網路一般會在不同的訓練樣本上犯錯,因而集成的收益會更大。
快照集成使用周期性學習率退火
當然,你也可以集成同一架構的模型,也許效果會出乎意料的好。就好比這篇快照集成的論文,作者在訓練同一個網路的過程中保存了不同的權值快照,然後在訓練之後創建了同一架構、不同權值的集成網路。這麼做可以提升測試的表現,同時也超省錢——因為你只需要訓練一個模型、訓練一次就好,只要記得隨時保存權值就行。
你可以仔細閱讀下文章開頭提到的那篇 Vitaly Bushaev 的關於學習率的文章。如果你到目前為止還沒有嘗試過周期性學習率,那你真該去試試,它正在成為當前效果最好的、也最標準的做法,它簡單易上手,計算量很輕,可以說非常事半功倍了。
上文列舉的所有例子都是模型空間內的集成。組合若干模型,接著使用這些模型的預測以得到最終的預測結果。
而本文我想給大家介紹的論文中,作者提出了一種全新的權值空間內的集成。該方法通過組合同一網路在訓練的不同階段的權值得到一個集成,接著使用組合的權值做出預測。這種方法有兩個好處:
組合權重後,我們最終仍然得到一個模型,這有利於加速預測。
事實證明,這種方法勝過當前最先進的快照集成。
在了解這一方法是如何工作之前,我們首先需要理解損失平面(loss surface)和泛化的解(generalizable solution)。
權重空間內的解
第一個不得不提到的是,經過訓練的網路是高維權值空間中的一個點。對給定的架構而言,每個不同的網路權值組合都代表了一個不同的模型。任何給定架構都有無窮的權重組合,因而有無窮多的解。訓練神經網路的目標是找到一個特定的解(權值空間中的點),使得訓練數據集和測試數據集上的損失函數的值都比較低。
在訓練期間,訓練演算法通過改變權值來改變網路並在權值空間中漫遊。梯度下降演算法在一個損失平面上漫遊,該平面的海拔為損失函數的值。
窄極值和寬極值
坦白的講,可視化並理解高維權值空間的幾何特性非常困難,但我們又不得不去了解它。因為隨機梯度下降的本質是,在訓練時穿過這一高維空間中的損失平面,試圖找到一個良好的解——損失平面上的一個損失值較低的「點」。不過後來我們發現,這一平面有很多局部極值。但這些局部極值並不都有一樣好的性質。
Geoffery Hinton:「為了處理一個 14 維空間中的超平面,可視化了一個 3 維空間,並對自己大聲說『十四』。每個人都是這樣做的。」(出處:coursera 課程)
寬的極值和窄的極值。寬的局部極小值在訓練和測試過程中產生類似的損失;但對於窄的局部極小值而言,訓練和測試中產生的損失就會有很大區別。這意味著,寬的極值比窄的極值有更好的泛化性。
平坦度可以用來衡量一個解的優劣。其中的原理是,訓練數據集和測試數據集會產生相似但不盡相同的損失平面。你可以將其想像為測試平面相對訓練平面而言平移了一點。對窄的解來說,一個在測試的時候損失較低的點可能因為這一平移產生變為損失較高的點。這意味著窄的(尖銳的)解的泛化性不好——訓練損失低,測試損失高。另一方面,對於寬的(平坦的)解而言,這一平移造成的訓練損失和測試損失間的差異較小。
我解釋了兩種解決方案之間的區別,是因為這篇論文的提出的方法、也是我這篇文章重點介紹的方法,就能帶來討人喜歡的、寬的(平坦的)解。
快照集成(Snapshot Ensembling)
最初,SGD 會在權值空間中跳出一大步。接著,由於餘弦退火,學習率會逐漸降低,SGD 將逐漸收斂於某個局部解,演算法將保存一個模型的「快照」,把它加入集成模型。接著學習率重置為高值,SGD 再次邁一大步,找到另一個局部極值,以此類推。
快照集成的周期長度為 20 到 40 個 epoch。較長的學習率周期是為了在權值空間中找到足夠具有差異化的模型,以發揮集成的優勢。如果模型太相似,那麼集成模型中不同網路的預測將會過於接近,以至於集成並不會帶來多大益處了。
快照集成表現優異,提升了模型的表現,但快速幾何集成效果更好。
快速幾何集成(Fast Geometric Ensembling,FGE)
《DNNs 的損失表面、模式連接和快速集成》中提出的快速幾何集成 FGE 和快照集成非常像,但是也有一些獨特的特點。它們的不同主要有兩點。第一,快速幾何集成使用線性分段周期學習率規劃,而不是餘弦變化。第二,FGE 的周期長度要短得多——2 到 4 個 epoch。乍一看大家肯定直覺上覺得這麼短的周期是不對的,因為每個周期結束的時候的得到的模型互相之間離得太近了,這樣得到的集成模型沒有什麼優勢。然而作者們發現,在足夠不同的模型之間,存在著損失較低的連通路徑。我們有機會沿著這些路徑用較小的步長行進,同時這些模型也能夠有足夠大的差異,足夠發揮集成的優勢。因此,相比快照集成, FGE 表現更好,搜尋模型的步長更小(這也使其訓練更快)。
左圖:根據傳統的直覺,良好的局部極小值被高損失區域分隔開來(虛線)中/右圖:局部極小值之間存在著路徑,這些路徑上的損失都很低(實線)。FGE 沿著這些路徑保存快照,從而創建快照的集成。
要從快照集成或 FGE 中受益,需要存儲多個模型,接著讓每個模型做出預測,之後加以平均以得到最終預測。因此,我們為集成的額外表現支付了更高的算力代價。所以天下沒有免費的午餐。真的沒有嗎?這就是隨機加權平均的用武之地了。
隨機權值平均(Stochastic Weight Averaging,SWA)
隨機權值平均只需快速集合集成的一小部分算力,就可以接近其表現。SWA 可以用在任意架構和數據集上,都會有不錯的表現。根據論文中的實驗,SWA 可以得到我之前提到過的更寬的極小值。在經典認知下,SWA 不算集成,因為在訓練的最終階段你只得到一個模型,但它的表現超過了快照集成,接近 FGE。
左圖:W1、W2、W3分別代表3個獨立訓練的網路,Wswa為其平均值。中圖:WSWA 在測試集上的表現超越了SGD。右圖:WSWA 在訓練時的損失比SGD要高。結合 WSWA 在測試集上優於 SGD 的表現,這意味著儘管 WSWA 訓練時的損失較高,它的泛化性更好。
SWA 的直覺來自以下由經驗得到的觀察:每個學習率周期得到的局部極小值傾向於堆積在損失平面的低損失值區域的邊緣(上圖左側的圖形中,褐色區域誤差較低,點W1、W2、3分別表示3個獨立訓練的網路,位於褐色區域的邊緣)。對這些點取平均值,可能得到一個寬闊的泛化解,其損失更低(上圖左側圖形中的 WSWA)。
下面是 SWA 的工作原理。它只保存兩個模型,而不是許多模型的集成:
第一個模型保存模型權值的平均值(WSWA)。在訓練結束後,它將是用於預測的最終模型。
第二個模型(W)將穿過權值空間,基於周期性學習率規劃探索權重空間。
SWA權重更新公式
在每個學習率周期的末尾,第二個模型的當前權重將用來更新第一個模型的權重(公式如上)。因此,在訓練階段,只需訓練一個模型,並在內存中儲存兩個模型。預測時只需要平均模型,基於其進行預測將比之前描述的集成快很多,因為在那種集成中,你需要使用多個模型進行預測,最後再進行平均。
方法實現
論文的作者自己提供了一份 PyTorch 的實現https://github.com/timgaripov/swa。
此外,基於 fast.ai 庫的 SWA 可見https://github.com/fastai/fastai/pull/276/commits。牆裂安利這個庫!
viatowardsdatascience.com,雷鋒網 AI 科技評論編譯


※貝葉斯概率模型一覽
※Neuromation:一文告訴你如何用CNN檢測兒童骨齡
TAG:雷鋒網 |