0
雷鋒網(wǎng) AI 科技評(píng)論按:在本文中,數(shù)據(jù)科學(xué)研究人員 Max Pechyonkin 討論了最近兩篇有趣的論文,它們提供了一種簡(jiǎn)單的方法,通過(guò)用一種巧妙的集成方式來(lái)提高任何給定神經(jīng)網(wǎng)絡(luò)的性能。這兩篇論文是:Garipov 等人的《DNNs 的損失表面、模式連接和快速集成》和 Izmailov 等人的《平均權(quán)值帶來(lái)更寬的極值和更好的泛化性》。
當(dāng)然了,如果能先看看 Vitaly Bushaev 的《改善我們的處理學(xué)習(xí)率的方式》,接下來(lái)的閱讀將會(huì)更輕松。雷鋒網(wǎng) AI 科技評(píng)論全文編譯如下。
一般我們說(shuō)的「集成」(ensemble),就是組合若干不同的模型,讓它們基于相同的輸入做出預(yù)測(cè),接著通過(guò)某種平均化方法決定集成模型的最終預(yù)測(cè)。這個(gè)決定過(guò)程可能是通過(guò)簡(jiǎn)單的投票或取均值,也可能是通過(guò)另一個(gè)模型,該模型基于集成模型的結(jié)果,學(xué)習(xí)預(yù)測(cè)正確值或標(biāo)簽。嶺回歸是一種可以組合若干個(gè)不同預(yù)測(cè)的結(jié)果的方法,Kaggle 上衛(wèi)星數(shù)據(jù)識(shí)別熱帶雨林競(jìng)賽的冠軍就使用過(guò)這一方法。
集成應(yīng)用于深度學(xué)習(xí)時(shí),組合若干網(wǎng)絡(luò)的預(yù)測(cè)以得到一個(gè)最終的預(yù)測(cè)。通常,使用好幾個(gè)不同架構(gòu)的神經(jīng)網(wǎng)絡(luò)比較好,因?yàn)椴煌軜?gòu)的網(wǎng)絡(luò)一般會(huì)在不同的訓(xùn)練樣本上犯錯(cuò),因而集成的收益會(huì)更大。
當(dāng)然,你也可以集成同一架構(gòu)的模型,也許效果會(huì)出乎意料的好。就好比這篇快照集成的論文,作者在訓(xùn)練同一個(gè)網(wǎng)絡(luò)的過(guò)程中保存了不同的權(quán)值快照,然后在訓(xùn)練之后創(chuàng)建了同一架構(gòu)、不同權(quán)值的集成網(wǎng)絡(luò)。這么做可以提升測(cè)試的表現(xiàn),同時(shí)也超省錢(qián)——因?yàn)槟阒恍枰?xùn)練一個(gè)模型、訓(xùn)練一次就好,只要記得隨時(shí)保存權(quán)值就行。
你可以仔細(xì)閱讀下文章開(kāi)頭提到的那篇 Vitaly Bushaev 的關(guān)于學(xué)習(xí)率的文章。如果你到目前為止還沒(méi)有嘗試過(guò)周期性學(xué)習(xí)率,那你真該去試試,它正在成為當(dāng)前效果最好的、也最標(biāo)準(zhǔn)的做法,它簡(jiǎn)單易上手,計(jì)算量很輕,可以說(shuō)非常事半功倍了。
上文列舉的所有例子都是模型空間內(nèi)的集成。組合若干模型,接著使用這些模型的預(yù)測(cè)以得到最終的預(yù)測(cè)結(jié)果。
而本文我想給大家介紹的論文中,作者提出了一種全新的權(quán)值空間內(nèi)的集成。該方法通過(guò)組合同一網(wǎng)絡(luò)在訓(xùn)練的不同階段的權(quán)值得到一個(gè)集成,接著使用組合的權(quán)值做出預(yù)測(cè)。這種方法有兩個(gè)好處:
組合權(quán)重后,我們最終仍然得到一個(gè)模型,這有利于加速預(yù)測(cè)。
事實(shí)證明,這種方法勝過(guò)當(dāng)前最先進(jìn)的快照集成。
在了解這一方法是如何工作之前,我們首先需要理解損失平面(loss surface)和泛化的解(generalizable solution)。
第一個(gè)不得不提到的是,經(jīng)過(guò)訓(xùn)練的網(wǎng)絡(luò)是高維權(quán)值空間中的一個(gè)點(diǎn)。對(duì)給定的架構(gòu)而言,每個(gè)不同的網(wǎng)絡(luò)權(quán)值組合都代表了一個(gè)不同的模型。任何給定架構(gòu)都有無(wú)窮的權(quán)重組合,因而有無(wú)窮多的解。訓(xùn)練神經(jīng)網(wǎng)絡(luò)的目標(biāo)是找到一個(gè)特定的解(權(quán)值空間中的點(diǎn)),使得訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集上的損失函數(shù)的值都比較低。
在訓(xùn)練期間,訓(xùn)練算法通過(guò)改變權(quán)值來(lái)改變網(wǎng)絡(luò)并在權(quán)值空間中漫游。梯度下降算法在一個(gè)損失平面上漫游,該平面的海拔為損失函數(shù)的值。
坦白的講,可視化并理解高維權(quán)值空間的幾何特性非常困難,但我們又不得不去了解它。因?yàn)殡S機(jī)梯度下降的本質(zhì)是,在訓(xùn)練時(shí)穿過(guò)這一高維空間中的損失平面,試圖找到一個(gè)良好的解——損失平面上的一個(gè)損失值較低的「點(diǎn)」。不過(guò)后來(lái)我們發(fā)現(xiàn),這一平面有很多局部極值。但這些局部極值并不都有一樣好的性質(zhì)。
Geoffery Hinton:「為了處理一個(gè) 14 維空間中的超平面,可視化了一個(gè) 3 維空間,并對(duì)自己大聲說(shuō)『十四』。每個(gè)人都是這樣做的?!梗ǔ鎏帲篶oursera 課程)
平坦度可以用來(lái)衡量一個(gè)解的優(yōu)劣。其中的原理是,訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集會(huì)產(chǎn)生相似但不盡相同的損失平面。你可以將其想象為測(cè)試平面相對(duì)訓(xùn)練平面而言平移了一點(diǎn)。對(duì)窄的解來(lái)說(shuō),一個(gè)在測(cè)試的時(shí)候損失較低的點(diǎn)可能因?yàn)檫@一平移產(chǎn)生變?yōu)閾p失較高的點(diǎn)。這意味著窄的(尖銳的)解的泛化性不好——訓(xùn)練損失低,測(cè)試損失高。另一方面,對(duì)于寬的(平坦的)解而言,這一平移造成的訓(xùn)練損失和測(cè)試損失間的差異較小。
我解釋了兩種解決方案之間的區(qū)別,是因?yàn)檫@篇論文的提出的方法、也是我這篇文章重點(diǎn)介紹的方法,就能帶來(lái)討人喜歡的、寬的(平坦的)解。
最初,SGD 會(huì)在權(quán)值空間中跳出一大步。接著,由于余弦退火,學(xué)習(xí)率會(huì)逐漸降低,SGD 將逐漸收斂于某個(gè)局部解,算法將保存一個(gè)模型的「快照」,把它加入集成模型。接著學(xué)習(xí)率重置為高值,SGD 再次邁一大步,找到另一個(gè)局部極值,以此類推。
快照集成的周期長(zhǎng)度為 20 到 40 個(gè) epoch。較長(zhǎng)的學(xué)習(xí)率周期是為了在權(quán)值空間中找到足夠具有差異化的模型,以發(fā)揮集成的優(yōu)勢(shì)。如果模型太相似,那么集成模型中不同網(wǎng)絡(luò)的預(yù)測(cè)將會(huì)過(guò)于接近,以至于集成并不會(huì)帶來(lái)多大益處了。
快照集成表現(xiàn)優(yōu)異,提升了模型的表現(xiàn),但快速幾何集成效果更好。
《DNNs 的損失表面、模式連接和快速集成》中提出的快速幾何集成 FGE 和快照集成非常像,但是也有一些獨(dú)特的特點(diǎn)。它們的不同主要有兩點(diǎn)。第一,快速幾何集成使用線性分段周期學(xué)習(xí)率規(guī)劃,而不是余弦變化。第二,F(xiàn)GE 的周期長(zhǎng)度要短得多——2 到 4 個(gè) epoch。乍一看大家肯定直覺(jué)上覺(jué)得這么短的周期是不對(duì)的,因?yàn)槊總€(gè)周期結(jié)束的時(shí)候的得到的模型互相之間離得太近了,這樣得到的集成模型沒(méi)有什么優(yōu)勢(shì)。然而作者們發(fā)現(xiàn),在足夠不同的模型之間,存在著損失較低的連通路徑。我們有機(jī)會(huì)沿著這些路徑用較小的步長(zhǎng)行進(jìn),同時(shí)這些模型也能夠有足夠大的差異,足夠發(fā)揮集成的優(yōu)勢(shì)。因此,相比快照集成, FGE 表現(xiàn)更好,搜尋模型的步長(zhǎng)更小(這也使其訓(xùn)練更快)。
要從快照集成或 FGE 中受益,需要存儲(chǔ)多個(gè)模型,接著讓每個(gè)模型做出預(yù)測(cè),之后加以平均以得到最終預(yù)測(cè)。因此,我們?yōu)榧傻念~外表現(xiàn)支付了更高的算力代價(jià)。所以天下沒(méi)有免費(fèi)的午餐。真的沒(méi)有嗎?這就是隨機(jī)加權(quán)平均的用武之地了。
隨機(jī)權(quán)值平均只需快速集合集成的一小部分算力,就可以接近其表現(xiàn)。SWA 可以用在任意架構(gòu)和數(shù)據(jù)集上,都會(huì)有不錯(cuò)的表現(xiàn)。根據(jù)論文中的實(shí)驗(yàn),SWA 可以得到我之前提到過(guò)的更寬的極小值。在經(jīng)典認(rèn)知下,SWA 不算集成,因?yàn)樵谟?xùn)練的最終階段你只得到一個(gè)模型,但它的表現(xiàn)超過(guò)了快照集成,接近 FGE。
SWA 的直覺(jué)來(lái)自以下由經(jīng)驗(yàn)得到的觀察:每個(gè)學(xué)習(xí)率周期得到的局部極小值傾向于堆積在損失平面的低損失值區(qū)域的邊緣(上圖左側(cè)的圖形中,褐色區(qū)域誤差較低,點(diǎn)W1、W2、3分別表示3個(gè)獨(dú)立訓(xùn)練的網(wǎng)絡(luò),位于褐色區(qū)域的邊緣)。對(duì)這些點(diǎn)取平均值,可能得到一個(gè)寬闊的泛化解,其損失更低(上圖左側(cè)圖形中的 WSWA)。
下面是 SWA 的工作原理。它只保存兩個(gè)模型,而不是許多模型的集成:
第一個(gè)模型保存模型權(quán)值的平均值(WSWA)。在訓(xùn)練結(jié)束后,它將是用于預(yù)測(cè)的最終模型。
第二個(gè)模型(W)將穿過(guò)權(quán)值空間,基于周期性學(xué)習(xí)率規(guī)劃探索權(quán)重空間。
在每個(gè)學(xué)習(xí)率周期的末尾,第二個(gè)模型的當(dāng)前權(quán)重將用來(lái)更新第一個(gè)模型的權(quán)重(公式如上)。因此,在訓(xùn)練階段,只需訓(xùn)練一個(gè)模型,并在內(nèi)存中儲(chǔ)存兩個(gè)模型。預(yù)測(cè)時(shí)只需要平均模型,基于其進(jìn)行預(yù)測(cè)將比之前描述的集成快很多,因?yàn)樵谀欠N集成中,你需要使用多個(gè)模型進(jìn)行預(yù)測(cè),最后再進(jìn)行平均。
論文的作者自己提供了一份 PyTorch 的實(shí)現(xiàn) https://github.com/timgaripov/swa。
此外,基于 fast.ai 庫(kù)的 SWA 可見(jiàn) https://github.com/fastai/fastai/pull/276/commits。墻裂安利這個(gè)庫(kù)!
via towardsdatascience.com,雷鋒網(wǎng) AI 科技評(píng)論編譯
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。