利用深度壓縮和DSD訓(xùn)練來(lái)提高預(yù)測(cè)精度。
深度神經(jīng)網(wǎng)絡(luò)已經(jīng)成為解決計(jì)算機(jī)視覺(jué)、語(yǔ)音識(shí)別和自然語(yǔ)言處理等機(jī)器學(xué)習(xí)任務(wù)的最先進(jìn)的技術(shù)。盡管如此,深度學(xué)習(xí)算法是計(jì)算密集型和存儲(chǔ)密集型的,這使得它難以被部署到只有有限硬件資源的嵌入式系統(tǒng)上。
為了解決這個(gè)限制,可以使用深度壓縮來(lái)顯著地減少神經(jīng)網(wǎng)絡(luò)所需要的計(jì)算和存儲(chǔ)需求。例如對(duì)于具有全連接層的卷積神經(jīng)網(wǎng)絡(luò)(如Alexnet和VGGnet),深度壓縮可以將模型大小減少35到49倍。即使對(duì)于全卷積神經(jīng)網(wǎng)絡(luò)(如GoogleNet和SqueezeNet),深度壓縮也可以將模型大小減少10倍。而且上述兩種壓縮情況都不會(huì)降低模型預(yù)測(cè)的精度。
當(dāng)前的訓(xùn)練方法有不足之處
壓縮模型而不丟失其精確度意味著在訓(xùn)練好的模型中有嚴(yán)重的冗余,這說(shuō)明當(dāng)前的訓(xùn)練方法有不足之處。為了解決這個(gè)問(wèn)題,我和來(lái)自NVIDIA的JeffPool、百度的Sharan Narang和Facebook的Peter Vajda合作開(kāi)發(fā)了“密集-稀疏-密集”(DSD)的訓(xùn)練方法。這是一種新的方法,它首先通過(guò)稀疏約束的優(yōu)化方法將模型正則化,然后通過(guò)恢復(fù)和重新訓(xùn)練被剪枝的連接的權(quán)重來(lái)提高預(yù)測(cè)精度。
在測(cè)試時(shí),由DSD訓(xùn)練得到的最終模型仍然跟原始密集型模型具有相同的架構(gòu)和維度,并且DSD訓(xùn)練不會(huì)增加任何推理開(kāi)銷(xiāo)。我們對(duì)主流的神經(jīng)網(wǎng)絡(luò)(如CNN / RNN / LSTM)架構(gòu)用DSD訓(xùn)練方法進(jìn)行了圖像分類(lèi)、圖像描述和語(yǔ)音識(shí)別的實(shí)驗(yàn),發(fā)現(xiàn)模型有顯著的性能改進(jìn)。
在本文中,我們會(huì)首先介紹深度壓縮,然后介紹“密集-稀疏-密集”(DSD)訓(xùn)練方法。
深度壓縮
深度壓縮的第一步是“突觸剪枝”。 人類(lèi)大腦是有這一剪枝過(guò)程的。從嬰兒時(shí)期到成年,人腦會(huì)有5成的突觸會(huì)被修剪掉。
類(lèi)似的規(guī)則是否適用于人工神經(jīng)網(wǎng)絡(luò)呢?答案是肯定的。在早期的工作中,網(wǎng)絡(luò)剪枝已經(jīng)被證明是一種減少網(wǎng)絡(luò)復(fù)雜度和過(guò)度擬合的有效方法。這種方法也適用于現(xiàn)代神經(jīng)網(wǎng)絡(luò)。首先我們通過(guò)常規(guī)神經(jīng)網(wǎng)絡(luò)訓(xùn)練來(lái)學(xué)習(xí)網(wǎng)絡(luò)連接權(quán)重。然后我們會(huì)剪枝權(quán)重值較小的連接:即刪除網(wǎng)絡(luò)中權(quán)重值低于某一閾值的所有連接。最后,我們重新訓(xùn)練網(wǎng)絡(luò),得到剩余稀疏連接的權(quán)重值。剪枝方法使AlexNet和VGG-16模型的參數(shù)數(shù)量分別減少了9倍和13倍。
?
圖1. 剪枝一個(gè)神經(jīng)網(wǎng)絡(luò)。所有圖片由Song Han 友情提供
深度壓縮的下一步是權(quán)重共享。我們發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)對(duì)低精度權(quán)重值具有非常高的容忍度:極度粗略的權(quán)重值并不會(huì)降低預(yù)測(cè)精度。如圖2所示,藍(lán)色權(quán)重值最初為2.09、2.12、1.92和1.87,然后讓它們共享相同的權(quán)重值2,網(wǎng)絡(luò)的預(yù)測(cè)精確度仍然不受影響。因此我們可以只存儲(chǔ)非常少量的權(quán)重值,稱(chēng)之為“編碼本”。并讓許多其他權(quán)重共享這些相同的權(quán)重值,且只在碼本中存儲(chǔ)其索引即可。
索引可以用非常少的比特?cái)?shù)來(lái)表示。例如在下圖中存在四種顏色,因此僅需要兩位來(lái)表示一個(gè)權(quán)重而不用原來(lái)的32位。另一方面,編碼本占用的存儲(chǔ)空間幾乎可以忽略不計(jì)。我們的實(shí)驗(yàn)發(fā)現(xiàn),就權(quán)衡壓縮比和精度而言,這種權(quán)重共享技術(shù)是優(yōu)于線性量化的方法的。
?
圖2. 訓(xùn)練權(quán)重共享的神經(jīng)網(wǎng)絡(luò)
圖3顯示了使用深度壓縮的總體結(jié)果。Lenet-300-100和Lenet-5是在MNIST數(shù)據(jù)集上評(píng)估的,而AlexNet、VGGNet、GoogleNet和SqueezeNet是在ImageNet數(shù)據(jù)集上評(píng)估的。壓縮比從10倍到49倍不等。即使對(duì)于那些全卷積神經(jīng)網(wǎng)絡(luò)(如GoogleNet和SqueezeNet),深度壓縮仍然可以將它們壓縮一個(gè)數(shù)量級(jí)。我們重點(diǎn)看一下SqueezeNet,它比有相同預(yù)測(cè)精度的AlexNet少50倍的參數(shù),但仍然還可以再壓縮10倍使其模型大小只有470KB,這使它可以很容易地在片上SRAM里使用。而訪問(wèn)SRAM比DRAM更快更節(jié)能。
我們還嘗試了其他壓縮方法,例如基于低秩近似的方法,但是壓縮比沒(méi)有那么高。你可以在Deep Compression的論文中找到完整的討論。
?
圖3 深度壓縮的實(shí)驗(yàn)結(jié)果
DSD 訓(xùn)練
深度神經(jīng)網(wǎng)絡(luò)可以被大量剪枝和壓縮的事實(shí)意味著我們當(dāng)前的訓(xùn)練方法具有一些局限性。它不能充分利用密集模型的全部容量來(lái)找到最佳局部最小值,而一個(gè)剪枝過(guò)的有著更少神經(jīng)突觸的稀疏模型也可以達(dá)到相同的精度。這帶來(lái)了一個(gè)問(wèn)題:我們是否可以通過(guò)恢復(fù)并重新學(xué)習(xí)這些權(quán)重來(lái)達(dá)到更好的精度嗎?
讓我們拿奧運(yùn)會(huì)田徑比賽的訓(xùn)練做個(gè)比喻。教練首先會(huì)讓跑步運(yùn)動(dòng)員在高海拔的山地上訓(xùn)練,那里會(huì)有很多的限制:低氧、寒冷等。結(jié)果當(dāng)跑步運(yùn)動(dòng)員再次返回平原地區(qū)時(shí),他的速度就會(huì)有提高。對(duì)于神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō)也是相同的道理:給定嚴(yán)格約束的稀疏訓(xùn)練方法得到的網(wǎng)絡(luò)模型有跟密集網(wǎng)絡(luò)模型一樣的性能。一旦你解除了這些約束,模型可以工作得更好。
理論上,以下是DSD訓(xùn)練能行之有效的因素:
1.避開(kāi)鞍點(diǎn):優(yōu)化深度網(wǎng)絡(luò)最大的困難之一是鞍點(diǎn)的擴(kuò)散。 DSD訓(xùn)練方法通過(guò)剪枝和重新密集化的框架來(lái)避開(kāi)鞍點(diǎn)。對(duì)收斂的模型做剪枝干擾了模型學(xué)習(xí)的模式并使得網(wǎng)絡(luò)模型能夠避開(kāi)鞍點(diǎn),這使模型有機(jī)會(huì)可以收斂到一個(gè)更好的局部或全局最小值。這個(gè)想法也跟“模擬退火”算法類(lèi)似。雖然模擬退火算法在搜索圖上隨著概率降低而隨機(jī)跳躍,但是DSD訓(xùn)練方法會(huì)確定性的偏離收斂值。這一收斂值是通過(guò)在第一次密集模型訓(xùn)練階段中去除小權(quán)重值和增強(qiáng)稀疏支持得到的。
2.正規(guī)化和稀疏訓(xùn)練:稀疏訓(xùn)練步驟中的稀疏正規(guī)化將模型優(yōu)化降維到較低維空間,在這個(gè)空間中的損失函數(shù)表面更平滑并且對(duì)噪聲更魯棒。很多數(shù)值實(shí)驗(yàn)證實(shí)了稀疏訓(xùn)練和最終DSD方法可以降低方差和減少誤差。
3. 強(qiáng)大的重新初始化:權(quán)重初始化在深度學(xué)習(xí)中起著重要的作用。傳統(tǒng)的訓(xùn)練方法只有一次初始化的機(jī)會(huì),而DSD方法在訓(xùn)練過(guò)程中給模型優(yōu)化第二次(或更多)的機(jī)會(huì)。它基于更魯棒的稀疏訓(xùn)練結(jié)果來(lái)重新初始化。我們基于稀疏模型結(jié)果來(lái)重新構(gòu)建密集網(wǎng)絡(luò),這可以理解為剪枝權(quán)重的零初始化。其它的初始化方法也值得嘗試。
4. 打破對(duì)稱(chēng)性:隱藏單元的置換對(duì)稱(chēng)性會(huì)使權(quán)重對(duì)稱(chēng),因此在訓(xùn)練中容易相互影響。在DSD方法中,權(quán)重剪枝打破了與權(quán)重相關(guān)的隱藏單元的對(duì)稱(chēng)性,而且在最終的密集模型中是不對(duì)稱(chēng)的。
我們?cè)趲讉€(gè)主流的CNN/RNN/LSTM模型上進(jìn)行了圖像分類(lèi)、圖像描述和語(yǔ)音識(shí)別數(shù)據(jù)集的實(shí)驗(yàn),發(fā)現(xiàn)這種“密集-稀疏-密集”的訓(xùn)練流程能夠顯著地提高模型精度。我們的DSD訓(xùn)練方法采用了三個(gè)步驟:密集,稀疏,密集。圖4展示了每個(gè)步驟。
?
圖4 密集-稀疏-密集的訓(xùn)練流程
1.初始的密集訓(xùn)練:第一個(gè)“密集”步驟通過(guò)在密集網(wǎng)絡(luò)上的常規(guī)網(wǎng)絡(luò)訓(xùn)練來(lái)學(xué)習(xí)連接權(quán)重。然而跟傳統(tǒng)訓(xùn)練不同的是,該“密集”步驟的目的不是學(xué)習(xí)連接權(quán)重的最終值,而是學(xué)習(xí)哪些連接是重要的。
2. 稀疏訓(xùn)練:“稀疏”步驟會(huì)剪枝掉權(quán)重值較低的連接并重新訓(xùn)練稀疏網(wǎng)絡(luò)。我們對(duì)試驗(yàn)中的所有層都使用相同的稀疏度,因此會(huì)有一個(gè)單一的超參數(shù):稀疏度(sparsity)。我們對(duì)每一層的參數(shù)進(jìn)行排序,從網(wǎng)絡(luò)中去掉最小的N* sparsity個(gè)稀疏參數(shù),將密集網(wǎng)絡(luò)轉(zhuǎn)換為稀疏網(wǎng)絡(luò)。我們發(fā)現(xiàn)稀疏比率為50%-70%的效果非常好。然后我們重新訓(xùn)練稀疏網(wǎng)絡(luò),這可以在稀疏約束下完全復(fù)原模型的精度。
3. 最終的密集訓(xùn)練:最后的“密集”步驟會(huì)恢復(fù)已剪枝的連接,使網(wǎng)絡(luò)再次變的密集。這些之前剪枝的連接會(huì)初始化為零并重新訓(xùn)練?;謴?fù)被剪枝的連接增加了網(wǎng)絡(luò)的維度,并且更多的參數(shù)更容易使網(wǎng)絡(luò)的鞍點(diǎn)向下滑動(dòng)以獲得更好的局部最小值。
我們將DSD訓(xùn)練方法應(yīng)用于各種類(lèi)型的神經(jīng)網(wǎng)絡(luò)和不同領(lǐng)域的數(shù)據(jù)集。 我們發(fā)現(xiàn)DSD訓(xùn)練方法提高了所有這些神經(jīng)網(wǎng)絡(luò)的精確度。 神經(jīng)網(wǎng)絡(luò)選自CNN、RNN和LSTM;數(shù)據(jù)集是從圖像分類(lèi)、語(yǔ)音識(shí)別和圖像描述領(lǐng)域中選擇的, 結(jié)果如圖5所示。DSD模型可以在DSD Model Zoo上下載。
?
圖 5. DSD訓(xùn)練提高了預(yù)測(cè)精度
生成圖像描述
我們把在圖像描述任務(wù)中使用DSD訓(xùn)練方法的效果做了可視化(見(jiàn)圖6)。我們把DSD訓(xùn)練方法應(yīng)用于NeuralTalk中,NeuralTalk是一個(gè)用于生成圖像自然語(yǔ)言描述的長(zhǎng)短時(shí)記憶模型(LSTM)?;鶞?zhǔn)模型不能很好的描述圖片1、4和5。例如圖片1,基準(zhǔn)模型將女孩錯(cuò)誤地描述為男孩,并且把女孩的頭發(fā)錯(cuò)誤地描述為巖墻。稀疏模型可以在圖片中識(shí)別出有一個(gè)女孩,而DSD模型可以進(jìn)一步識(shí)別出秋千。
在第二張圖片中,DSD訓(xùn)練方法可以識(shí)別出運(yùn)動(dòng)員正在嘗試投籃,而基準(zhǔn)模型只能描述成運(yùn)動(dòng)員正在打球。值得注意的是稀疏模型有時(shí)比DSD 模型表現(xiàn)得更好。在最后一張圖片中,稀疏模型能夠正確地識(shí)別出泥潭,而DSD模型只能從背景中識(shí)別出森林。DSD訓(xùn)練方法的優(yōu)良性能不僅限于這些例子,此論文的附錄中提供了更多的由DSD訓(xùn)練方法生成的圖像描述結(jié)果。
?
圖6. DSD訓(xùn)練方法提高圖像描述的性能的可視化展現(xiàn)
稀疏模型的優(yōu)點(diǎn)
用于把深度神經(jīng)網(wǎng)絡(luò)壓縮為較小模型的深度壓縮和用于神經(jīng)網(wǎng)絡(luò)正則化的DSD訓(xùn)練方法都是利用模型稀疏性來(lái)實(shí)現(xiàn)更小的模型或者更高的預(yù)測(cè)精度的技術(shù)。除了模型大小和預(yù)測(cè)精度,我們還研究了可以利用稀疏性的其他兩個(gè)方面:速度和能耗,這超出了本文的討論范圍。
?
評(píng)論