0
本文作者: AI研習(xí)社-譯站 | 2018-06-21 16:06 |
本文為雷鋒網(wǎng)字幕組編譯的技術(shù)博客 A Simple Guide to the Versions of the Inception Network,原標(biāo)題,作者為 Bharath Raj。
翻譯 | 龍翔 整理 | 孔令雙
原文鏈接:
雷鋒網(wǎng) AI 研習(xí)社:在這篇文章中,我將討論最近兩篇有趣的論文。它們提供了一種簡單的方式,通過使用一種巧妙的集成方法提升神經(jīng)網(wǎng)絡(luò)的性能。
Garipov 等人提出的 “Loss Surfaces, Mode Connectivity, and Fast Ensembling of DNNs”
Izmailov 等人提出的 “Averaging Weights Leads to Wider Optima and Better Generalization”
若希望更容易理解這篇博客,可以先閱讀這一篇論文:
傳統(tǒng)的集成方法通常是結(jié)合幾種不同的模型,并使他們對相同的輸入進行預(yù)測,然后使用某種平均方法得到集合的最終預(yù)測。 它可以是簡單的投票法,平均法?;蛘呱踔量梢允褂昧硪粋€模型,根據(jù)集成模型的輸入學(xué)習(xí)并預(yù)測正確的值或標(biāo)簽。嶺回歸是一種特殊的集成方法,被許多在 Kaggle 競賽獲獎的機器學(xué)習(xí)從業(yè)人員所使用。
網(wǎng)絡(luò)快照集成法是在每次學(xué)習(xí)率周期結(jié)束時保存模型,然后在預(yù)測過程中同時使用保存下來的模型。
當(dāng)集成方法應(yīng)用在深度學(xué)習(xí)中時,可以通過組合多個神經(jīng)網(wǎng)絡(luò)的預(yù)測,從而得到一個最終的預(yù)測結(jié)果。通常情況下,集成不同結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)是一個很好的方法,因為不同的模型可能在不同的訓(xùn)練樣本上犯錯,因此集成模型將會得到更大的好處。
網(wǎng)絡(luò)快照集成法使用基于退火策略的循環(huán)學(xué)習(xí)率策略。
但是,你也可以集成相同結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)模型,也會得到很棒的結(jié)果。在網(wǎng)絡(luò)快照集成法論文中,作者基于這種方法使用了一個非??岬募记?。作者在訓(xùn)練相同網(wǎng)絡(luò)時使用權(quán)重快照,在訓(xùn)練結(jié)束后用這些結(jié)構(gòu)相同但權(quán)重不同的模型創(chuàng)建一個集成模型。這種方法使測試集效果提升,而且這也是一種非常簡單的方法,因為你只需要訓(xùn)練一次模型,將每一時刻的權(quán)重保存下來就可以了。
想要了解更多的細(xì)節(jié),你可以參考這個博客。如果你還沒有使用循環(huán)學(xué)習(xí)率策略,那么你一定要了解它。因為這是當(dāng)前最先進而且最簡單的訓(xùn)練技巧了,計算量不大,也幾乎不需要額外成本就可以提供很大的收益。
上面的例子都是基于模型的集成方法,因為它們是通過結(jié)合多個模型的預(yù)測從而產(chǎn)生最終的預(yù)測結(jié)果。
但在這篇博客即將討論的論文中,作者提出了一種新的基于權(quán)重的集成方法。這種方法通過結(jié)合相同網(wǎng)絡(luò)結(jié)構(gòu)不同訓(xùn)練階段的權(quán)重獲得集成模型,然后進行預(yù)測。這種方法有兩個優(yōu)點:
當(dāng)結(jié)合權(quán)重時,我們最后仍然是得到一個模型,這提升了預(yù)測的速度
實驗結(jié)果表明,這種方法打敗了當(dāng)前最先進的網(wǎng)絡(luò)快照集成法
來看看它是怎么實現(xiàn)的吧。但首先我們需要了解一些關(guān)于損失平面和泛化問題的重要結(jié)論。
第一個重要的觀點是:一個訓(xùn)練好的網(wǎng)絡(luò)是多維權(quán)重空間中的一個點。對于一個給定的網(wǎng)絡(luò)結(jié)構(gòu),每一種不同的權(quán)重組合將得到不同的模型。因為所有模型結(jié)構(gòu)都有無限多種權(quán)重組合,所以將有無限多種組合方法。訓(xùn)練神經(jīng)網(wǎng)絡(luò)的目標(biāo)是找到一個特別的解決方案(權(quán)重空間中的點),從而使訓(xùn)練集和測試集上的損失函數(shù)的值達(dá)到很小。
訓(xùn)練過程中,通過改變權(quán)重,訓(xùn)練算法改變網(wǎng)絡(luò)的結(jié)構(gòu),并在權(quán)重空間中不斷搜索。隨機梯度下降法在損失平面上傳播,損失平面的高低由損失函數(shù)的值決定。
可視化與理解多維權(quán)重空間的幾何特點是非常困難的。同時,這也是非常重要的,因為在訓(xùn)練時,隨機梯度下降法的本質(zhì)是在多維空間的損失平面上傳播,并努力找到一個好的解決方案--損失平面上的一個損失函數(shù)值很低的"點”。眾所周知,這些平面有許多局部最優(yōu)解,但并不是所有局部最優(yōu)解都是優(yōu)秀的解決方案。
Hinton: “為了處理14維空間中的超平面, 可視化3維空間并大聲對自己說“14”。 每個人都這樣做。“
局部和全局最優(yōu)解。在訓(xùn)練和測試過程中,平滑的最低值會產(chǎn)生相似的損失。然而,訓(xùn)練和測試過程中產(chǎn)生的局部損失,有非常大的差異。換句話說,全局最小值比局部最小值更通用。
判斷解決方案好壞的一個標(biāo)準(zhǔn)就是該方案解的平滑性。 這一思想在于訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)會產(chǎn)生類似的但并不完全一樣的損失面。你可以想象一下,一個測試表面相對于訓(xùn)練表面移動一點。對于一個局部解,在測試過程中,因為這一點移動,一個給出低損失值的點會給出一個高損失值。這意味著這個”局部“解決方案沒有產(chǎn)生最優(yōu)值——訓(xùn)練損失小,而測試損失大。另一方面,對于一個”全局“平滑解決方案,這一點移動會導(dǎo)致訓(xùn)練和測試損失的差值很小。
我之所以解釋局部和全局解決方案的不同,是因為這篇博客聚焦的新方法提供非常好的全局解決方案。
最初,隨機梯度下降(SGD,Stochastic Gradient Descent) 會在權(quán)重空間產(chǎn)生大的躍變。隨后,當(dāng)學(xué)習(xí)率由于余弦退火算法越來越小時, SGD 會收斂到某個局部解,該算法會對模型拍個”快照“,即將這個局部解加入到集合中。接著,學(xué)習(xí)率再次被重置成高值,SGD在收斂到某個不同的局部解之前,再次產(chǎn)生一個大的躍變。
快照集成方法的循環(huán)長度是20到40個 epoch(使用訓(xùn)練集的全部數(shù)據(jù)對模型進行一次完整的訓(xùn)練,稱為一個epoch)。長學(xué)習(xí)率循環(huán)的思想在于能夠在權(quán)重空間找到足夠多不同的模型。如果模型相似度太高,集合中各網(wǎng)絡(luò)的預(yù)測就會太接近,而體現(xiàn)不出集成帶來的好處。
快照集成確實效果很好,提高了模型的性能,但是快速幾何集成更有效。
快速幾何集成與快照集成類似,但有一些與快照集成不同的特征。FGE使用線性分段循環(huán)學(xué)習(xí)率策略代替余弦。其次,F(xiàn)GE的循環(huán)長度更短——每個循環(huán)只有2到4個epoch。最初的直覺認(rèn)為,短循環(huán)是錯誤的,因為每次循環(huán)結(jié)束時產(chǎn)生的模型都非常相似,差別不大,所以集成這些模型不能帶來益處。然而,正如作者發(fā)現(xiàn)的,由于在足夠多的不同模型間,存在低損失的連接通路,沿著那些通路,采用短循環(huán)是可行的,而且在這一過程中,會產(chǎn)生差異足夠大的模型,集成這些模型會產(chǎn)生很好的結(jié)果。因此,與快照集成相比,F(xiàn)GE提高了模型的性能,每次循環(huán)經(jīng)過更少的epoch就能找到差異足夠大的模型(這使訓(xùn)練速度更快)。
左邊:傳統(tǒng)觀點認(rèn)為好的局部最小值被高損失區(qū)域分隔開。如果我們觀察連接局部最小值的直線,會發(fā)現(xiàn)這是正確的。中間和右邊:然而,在局部最小值之間存在通路,這些通路上的損失值始終很低。FGE沿著這些通路拍快照,并利用這些快照構(gòu)建一個集合。
為了從快照集成或者FGE中獲益,需要存儲多種模型并得出這些模型的預(yù)測,然后對這些預(yù)測求平均,作為最終的預(yù)測。因此,集合的附加性能需要消耗更多的計算。所以沒有免費的午餐。或許是有的?這是一篇關(guān)于隨機加權(quán)平均的新論文所獲得的成果。
隨機加權(quán)平均(SWA,Stochastic Weight Averaging)
隨機加權(quán)平均和快速幾何集成非常近似,除了計算損失的部分。 SWA 可以應(yīng)用于任何架構(gòu)和數(shù)據(jù)集,而且都能產(chǎn)生較好的結(jié)果。這篇論文給出了參考建議,SWA可以得到更大范圍的最小值,上文已經(jīng)討論過這一點的好處。SWA不是經(jīng)典意義上的集成。在訓(xùn)練結(jié)束的時候,會產(chǎn)生一個模型,這個模型的性能優(yōu)于快照集成,接近FGE。
左邊:W1,W2和W3 代表了3個獨立的訓(xùn)練網(wǎng)絡(luò),Wswa是它們的平均。 中間:與SGD相比,Wswa 在測試集上產(chǎn)生了更優(yōu)越的性能。右邊:注意即使Wswa在訓(xùn)練集上的性能更差,它在測試集上的效果仍然更好。
SWA的靈感來自于實際觀察,每次學(xué)習(xí)率循環(huán)結(jié)束時產(chǎn)生的局部最小值趨向于在損失面的邊緣區(qū)域累積,這些邊緣區(qū)域上的損失值較小(上面左圖中,顯示低損失的紅色區(qū)域上的點W1,W2和W3)。通過對幾個這樣的點取平均,很有可能得到一個甚至更低損失的、全局化的通用解(上面左圖上的Wswa)。
這兒展示了 SWA 是如何工作的。不需要集成很多模型,只需要兩個模型。
第一個模型存儲模型權(quán)重的平均值(公式中的 w_swa )。這就是訓(xùn)練結(jié)束后的最終模型,用于預(yù)測。
第二個模型(公式中的w)變換權(quán)重空間,利用循環(huán)學(xué)習(xí)率策略找到最優(yōu)權(quán)重空間。
隨機加權(quán)平均權(quán)重更新公式
每次學(xué)習(xí)率循環(huán)結(jié)束的時候,第二個模型的當(dāng)前權(quán)重會被用于更新正在運行的平均模型的權(quán)重,即對已有的平均權(quán)重和第二個模型產(chǎn)生的新權(quán)重進行加權(quán)平均(左圖中的公式)。采用這個方法,訓(xùn)練時,只需要訓(xùn)練一個模型,存儲兩個模型。而預(yù)測時,只需要一個當(dāng)前的平均模型進行預(yù)測。用這個模型做預(yù)測,比前面提到的方法,速度快得多。之前的方法是用集合中的多個模型做預(yù)測,然后對多個預(yù)測結(jié)果求平均。實現(xiàn)
該論文的作者提供了他們自己的實現(xiàn),這個實現(xiàn)是用PyTorch完成的。
當(dāng)然,著名的fast.ai庫也實現(xiàn)了SWA。每個人應(yīng)該都在使用這個庫。如果你還沒有看到這個課程,請點擊此鏈接。
感謝您的閱讀!
雷鋒網(wǎng)字幕組編譯。
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。