姓名:宋子璇
學(xué)號:16020199060
轉(zhuǎn)載自:https://zhuanlan.zhihu.com/p/34333576
【嵌牛導(dǎo)讀】:神經(jīng)網(wǎng)絡(luò)瘦身
【嵌牛鼻子】:SqueezeNet
【嵌牛提問】:SqueezeNet為什么能實(shí)現(xiàn)網(wǎng)絡(luò)瘦身斯辰?
【嵌牛正文】
今年二月份,UC Berkeley和Stanford一幫人在arXiv貼了一篇文章:
SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and<0.5MB model size(https://arxiv.org/abs/1602.07360)
這篇文章做成了許多人夢寐以求的事——壓縮神經(jīng)網(wǎng)絡(luò)參數(shù)愚屁。但和以往不同,原作不是在前人網(wǎng)絡(luò)基礎(chǔ)上修修補(bǔ)補(bǔ)(例如Deep Compression),而是自己設(shè)計(jì)了一個(gè)全新的網(wǎng)絡(luò)锣笨,它用了比AlexNet少50倍的參數(shù)亿眠,達(dá)到了AlexNet相同的精度且蓬!
關(guān)于SqueezeNet的創(chuàng)新點(diǎn)蜡娶、網(wǎng)絡(luò)結(jié)構(gòu)混卵,國內(nèi)已經(jīng)有若干愛好者發(fā)布了相關(guān)的簡介,如這篇(http://blog.csdn.net/xbinworld/article/details/50897870)翎蹈、這篇(http://blog.csdn.net/shenxiaolu1984/article/details/51444525)淮菠,國外的文獻(xiàn)沒有查男公,相信肯定也有很多荤堪。
本文關(guān)注的重點(diǎn)在SqueezeNet為什么能實(shí)現(xiàn)網(wǎng)絡(luò)瘦身?難道網(wǎng)絡(luò)參數(shù)的冗余性就那么強(qiáng)嗎枢赔?或者說很多參數(shù)都是浪費(fèi)的澄阳、無意義的?
為什么SqueezeNet能夠以更少的參數(shù)實(shí)現(xiàn)AlexNet相同的精度踏拜?
下面的表格直觀的展示了SqueezeNet的參數(shù)量碎赢,僅為AlexNet的1/48。
網(wǎng)絡(luò)參數(shù)量AlexNet60MSqueezeNet1.25M
乍一看速梗,感覺非常不科學(xué)肮塞,怎么可能相差如此懸殊的參數(shù)量實(shí)現(xiàn)了相同的識別精度?
我們先考慮一個(gè)非常簡單的例子姻锁,這個(gè)例子可以說是SqueezeNet和AlexNet的縮影:
1枕赵、一層卷積,卷積核大小為5×5
2位隶、兩層卷積拷窜,卷積核大小為3×3
以上兩種卷積方式除了卷積核大小不同,其它變量均相同涧黄,為了方便后文計(jì)算篮昧,定義輸入通道數(shù)1,輸出通道數(shù)為C(兩層卷積為C')笋妥,輸出尺寸N×N懊昨。
按照目前的理論,神經(jīng)網(wǎng)絡(luò)應(yīng)該盡可能的采用多層小卷積春宣,以減少參數(shù)量酵颁,增加網(wǎng)絡(luò)的非線性狈孔。但隨著參數(shù)的減少,計(jì)算量卻增加了材义!根據(jù)上面的例子均抽,大致算一下,為了簡便其掂,只考慮乘法的計(jì)算量:
5×5一層卷積計(jì)算量是25×C×N×N
3×3兩層卷積的計(jì)算量是9×C×(1+C')×N×N
很明顯25C<9C(1+C')油挥。
這說明了什么?說明了“多層小卷積核”的確增大了計(jì)算量款熬!
我們再回過頭考慮SqueezeNet和AlexNet深寥,兩個(gè)網(wǎng)絡(luò)的架構(gòu)如上面4幅圖所示,可以看出SqueezeNet比AlexNet深不少贤牛,SqueezeNet的卷積核也更小一些惋鹅,這就導(dǎo)致了SqueezeNet計(jì)算量遠(yuǎn)遠(yuǎn)高于AlexNet(有待商榷,需要進(jìn)一步確認(rèn)殉簸,由于Fire module中的squeeze layer從某種程度上減少了計(jì)算量闰集,SqueezeNet的計(jì)算量可能并不大)。
可是論文原文過度關(guān)注參數(shù)個(gè)數(shù)般卑,忽略計(jì)算量武鲁,這樣的對比方式貌似不太妥當(dāng)。事實(shí)上蝠检,目前最新的深層神經(jīng)網(wǎng)絡(luò)都是通過增加計(jì)算量換來更少的參數(shù)沐鼠,可是為什么這樣做效果會很好?
因?yàn)閮?nèi)存讀取耗時(shí)要遠(yuǎn)大于計(jì)算耗時(shí)叹谁!
如此一來饲梭,問題就簡單了,不考慮網(wǎng)絡(luò)本身架構(gòu)的優(yōu)劣性焰檩,深層網(wǎng)絡(luò)之所以如此成功憔涉,就是因?yàn)榘褏?shù)讀取的代價(jià)轉(zhuǎn)移到計(jì)算量上了,考慮的目前人類計(jì)算機(jī)的發(fā)展水平锅尘,計(jì)算耗時(shí)還是要遠(yuǎn)遠(yuǎn)小于數(shù)據(jù)存取耗時(shí)的监氢,這也是“多層小卷積核”策略成功的根源。
關(guān)于Dense-Sparse-Dense(DSD)訓(xùn)練法
不得不說一下原作的這個(gè)小發(fā)現(xiàn)藤违,使用裁剪之后的模型為初始值浪腐,再次進(jìn)行訓(xùn)練調(diào)優(yōu)所有參數(shù),正確率能夠提升4.3%顿乒。 稀疏相當(dāng)于一種正則化议街,有機(jī)會把解從局部極小中解放出來。這種方法稱為DSD (Dense→Sparse→Dense)璧榄。
這個(gè)和我們?nèi)祟悓W(xué)習(xí)知識的過程是多么相似特漩!人類每隔一段時(shí)間重新溫習(xí)一下學(xué)過的知識吧雹,會增加對所學(xué)知識的印象。我們可以把“隔一段時(shí)間”理解為“裁剪”涂身,即忘卻那些不怎么重要的參數(shù)雄卷,“再學(xué)習(xí)”理解為從新訓(xùn)練,即強(qiáng)化之前的參數(shù)蛤售,使其識別精度更高丁鹉!