目前為止,我們使用的都是固定網(wǎng)絡(luò)架構(gòu),即在CIFAR10上用單個(gè)GPU最快的DAWNBench記錄,經(jīng)過(guò)簡(jiǎn)單改變,我們將網(wǎng)絡(luò)達(dá)到94%精度的時(shí)間從341秒縮短至154秒。今天,我們要研究其他的替代性架構(gòu)。
讓我們先回顧下目前所用的網(wǎng)絡(luò):
粉色的殘差塊包含了一個(gè)identity shortcut并保留了輸入的空間和通道維度:
淺綠色的下采樣模塊將空間分辨率降低兩倍,輸出通道的數(shù)量增加一倍:
加入殘差模塊的原因是通過(guò)在網(wǎng)絡(luò)中創(chuàng)建shortcut讓優(yōu)化變得更簡(jiǎn)單。我們希望較短的路徑代表相對(duì)容易訓(xùn)練的淺層子網(wǎng)絡(luò),而較長(zhǎng)的路徑可以增加網(wǎng)絡(luò)的能力和計(jì)算深度。這樣一來(lái),研究最短路徑如何通過(guò)網(wǎng)絡(luò)孤立訓(xùn)練,并且如何采取措施進(jìn)行改進(jìn)似乎是合理的。
清除長(zhǎng)分支會(huì)生成一下主要網(wǎng)絡(luò),其中除了第一個(gè)網(wǎng)絡(luò),所有的卷積網(wǎng)絡(luò)的步長(zhǎng)都為2:
在接下來(lái)的實(shí)驗(yàn)中,我們會(huì)訓(xùn)練20個(gè)epoch,利用比之前學(xué)習(xí)速率更快速的版本訓(xùn)練,因?yàn)榫W(wǎng)絡(luò)較小,收斂得更快。復(fù)現(xiàn)這一結(jié)果的代碼在此:github.com/davidcpage/cifar10-fast/blob/master/experiments.ipynb
對(duì)最短的路徑網(wǎng)絡(luò)訓(xùn)練20個(gè)epoch,在36秒內(nèi)的測(cè)試精度僅達(dá)到55.9%。刪除掉重復(fù)的批標(biāo)準(zhǔn)化ReLU群組,將訓(xùn)練時(shí)間縮短到32秒,但是測(cè)試精度仍然不變。
這一網(wǎng)絡(luò)有個(gè)嚴(yán)重的缺陷,即下采樣卷積有1×1的核以及為2的步長(zhǎng),所以與其擴(kuò)大接受域,它們反而會(huì)拋棄信息。如果我們用3×3的卷積替換,測(cè)試精度在36秒的訓(xùn)練后達(dá)到了85.6%。
我們還能繼續(xù)對(duì)下采樣進(jìn)行優(yōu)化,使用3×3、步長(zhǎng)為1的卷積,并且后面跟一個(gè)池化層。我們選擇最大池化和2×2的窗口大小,43秒訓(xùn)練后的測(cè)試精度為89.7%。用平均池化法得到相似的結(jié)果,但時(shí)間稍長(zhǎng)。
分類器前的最后一個(gè)池化層是全局平均池化層和最大池化層的連接,從原始網(wǎng)絡(luò)中得來(lái)。我們用更標(biāo)準(zhǔn)的全局最大池化層替換它,并且將最終的卷積層的輸出維度變?yōu)樵瓉?lái)的兩倍,對(duì)輸入維度進(jìn)行補(bǔ)償,最終在47秒內(nèi),測(cè)試精度達(dá)到了90.7%。注意,這一階段的平均池化層并不如最大池化層。
默認(rèn)情況下,在PyTorch0.4中,初始批規(guī)范化的范圍在0到1之間隨機(jī)選擇。初始接近0的通道可能被浪費(fèi),所以我們用常數(shù)1來(lái)替代。這導(dǎo)致通過(guò)網(wǎng)絡(luò)中的信號(hào)更大。為了補(bǔ)償,我們提出了一種整體恒定懲罰對(duì)分類器進(jìn)行重新調(diào)整。對(duì)這一額外超參數(shù),大致的手動(dòng)優(yōu)化值是0.125。經(jīng)過(guò)這些改變,經(jīng)過(guò)20個(gè)epoch的訓(xùn)練,網(wǎng)絡(luò)在47秒內(nèi)達(dá)到了91.1%的測(cè)試精度。
下表總結(jié)了我們上文中提到的各種改進(jìn)步驟:
現(xiàn)在的網(wǎng)絡(luò)看起來(lái)沒(méi)什么問(wèn)題了,接下來(lái)我們要進(jìn)行收益遞減,添加一些圖層。目前網(wǎng)絡(luò)僅有5個(gè)圖層(四個(gè)卷積,一個(gè)全連接層),所以還不確定我們是否需要?dú)埐罘种?,或者添加額外的層后能否得到94%的目標(biāo)精確度。
如果只增加寬度似乎不可行。如果我們讓通道維度增加一倍,訓(xùn)練60個(gè)epoch后,可以達(dá)到93.5%的精確度,但是會(huì)用321秒。
在增加網(wǎng)絡(luò)深度方面,我們還面臨著多種問(wèn)題,例如不同的殘差分支類型、深度和寬度以及新的超參數(shù),例如初始范圍和殘差分支的偏見(jiàn)。為了讓結(jié)果更進(jìn)一步,我們要嚴(yán)格限制搜索空間,所以,不能調(diào)整任何新的超參數(shù)。
特別的是,我們要考慮兩種類型的網(wǎng)絡(luò)。第一種是選擇性地在每個(gè)最大池化層后添加一個(gè)卷積層。第二種是添加一個(gè)含有兩部分3×3卷積的殘差塊,其中有identity shortcut,也是在最大池化層之后添加。
我們?cè)谧詈缶矸e模塊后、全局最大池化層之前插入了一個(gè)2×2的最大池化層。是否添加新層要根據(jù)不同情況決定,我們還考慮混合兩種類型,但這并沒(méi)有提升性能,所以我們就不在此展開(kāi)了。
下圖是第一種網(wǎng)絡(luò)示例,其中我們?cè)诘诙€(gè)最大池化層之后添加了額外的卷積:
下圖是第二種網(wǎng)絡(luò)示例,其中我們?cè)诘谝缓偷谌龑又筇砑恿藲埐罘种В?/p>
現(xiàn)在要開(kāi)始“暴力”架構(gòu)搜索了!我們訓(xùn)練了15種網(wǎng)絡(luò)(經(jīng)過(guò)改進(jìn)的原始網(wǎng)絡(luò)和上述兩類網(wǎng)絡(luò)中每類的7種變體),各訓(xùn)練20個(gè)epoch,另外還對(duì)比了訓(xùn)練22個(gè)epoch的結(jié)果,了解訓(xùn)練時(shí)間增長(zhǎng)和更深的網(wǎng)絡(luò)架構(gòu)之間的差別。如果每個(gè)實(shí)驗(yàn)僅運(yùn)行一次,就會(huì)花費(fèi)30分鐘的計(jì)算時(shí)間。但不幸的是,每次最終測(cè)試精度的標(biāo)準(zhǔn)偏差約為0.15%。所以為了得出準(zhǔn)確的結(jié)果,我們會(huì)對(duì)每個(gè)實(shí)驗(yàn)運(yùn)行10次,將每個(gè)數(shù)據(jù)點(diǎn)的標(biāo)準(zhǔn)偏差控制在0.05%左右。即便如此,不同架構(gòu)之間從20到22個(gè)epoch運(yùn)行后改進(jìn)率之間的差異主要可能是噪音。
以下是結(jié)果,點(diǎn)表示20個(gè)epoch和精確度,線條的延伸表示22個(gè)epoch的結(jié)果:
與運(yùn)用更深層的架構(gòu)所得到的進(jìn)步相比,訓(xùn)練更長(zhǎng)時(shí)間所得到的進(jìn)步速度似乎很慢。在測(cè)試的框架中,最有前景的或許是Residual:L1+L3。網(wǎng)絡(luò)在66秒內(nèi)達(dá)到了93.8%的精確度,如果我們將訓(xùn)練擴(kuò)展到24個(gè)epoch,平均精確度為94.08%,訓(xùn)練時(shí)間為79秒。
目前為止,我們已經(jīng)得到了一個(gè)9層的深度殘差網(wǎng)絡(luò),能在79秒內(nèi)達(dá)到94%的訓(xùn)練精確度,幾乎將訓(xùn)練時(shí)間縮短了一半。最后還有一個(gè)問(wèn)題:我們是否真的需要?dú)埐罘种Р拍茏寽y(cè)試精確度達(dá)到94%?答案顯然是否定的。例如,單一的分支網(wǎng)絡(luò)Extra:L1+L2+L3能在180秒、60個(gè)epoch內(nèi)達(dá)到95%的精確度,加上正則化或更寬的版本后,精確度會(huì)更高。但是至少在現(xiàn)在最快的是一個(gè)殘差網(wǎng)絡(luò)。
結(jié)語(yǔ)
本文結(jié)束前,讓我們?cè)俸?jiǎn)單回顧一下研究的目的。很多觀點(diǎn)認(rèn)為,訓(xùn)練模型在CIAFR10上達(dá)到94%的測(cè)試精確度是無(wú)意義的行為,應(yīng)為現(xiàn)在最高的精確度都達(dá)到98%了(另外還有人認(rèn)為現(xiàn)在ImageNet才是“唯一”的數(shù)據(jù)集,其他實(shí)驗(yàn)只是浪費(fèi)時(shí)間罷了)。
事實(shí)上,我們可以通過(guò)9層網(wǎng)絡(luò)在24個(gè)epoch內(nèi)達(dá)到94%的精確度,這也再次說(shuō)明我們的目標(biāo)門檻過(guò)低。另一方面,人類在CIFAR10上的表現(xiàn)也在94%左右,所以這一情況并不清楚。
在某種程度上,現(xiàn)在的精確度是一種“病態(tài)”的目標(biāo),只追求更大的模型、調(diào)整更多超參數(shù)、更多數(shù)據(jù)增強(qiáng)或者更長(zhǎng)的訓(xùn)練時(shí)間,讓各種工作之間的比較更難。另外,在訓(xùn)練或結(jié)構(gòu)設(shè)計(jì)上的創(chuàng)新會(huì)帶來(lái)額外的超參數(shù)維度,并且調(diào)整這些參數(shù)可能會(huì)導(dǎo)致有關(guān)訓(xùn)練更好的隱式優(yōu)化,否則這些與研究中的擴(kuò)展無(wú)關(guān)。如果基礎(chǔ)模型的外顯超參數(shù)的維度空間較低,那么通常被認(rèn)為是最佳的對(duì)比試驗(yàn)無(wú)法解決該問(wèn)題。這種情況的結(jié)果是,最先進(jìn)的模型難以進(jìn)行比較、復(fù)現(xiàn)、重建。
有了這些問(wèn)題,我們認(rèn)為任何能輕易在各項(xiàng)實(shí)驗(yàn)中進(jìn)行比較的都是有益的。我們相信創(chuàng)建有競(jìng)爭(zhēng)力的基準(zhǔn)也是應(yīng)對(duì)挑戰(zhàn)的一種方法。資源的限制讓各實(shí)驗(yàn)之間的比較更公平,減少了為了培訓(xùn)所需要做的調(diào)整。模型多余的復(fù)雜性可能會(huì)受到資源限制基線的懲罰,哪些明確控制相關(guān)參數(shù)的方法通常會(huì)獲勝。
最近,根據(jù)模型推理時(shí)間或模型大小公布曲線越來(lái)越多。這對(duì)于優(yōu)化和解決上面的問(wèn)題來(lái)說(shuō)都是積極的方法,但我們相信訓(xùn)練時(shí)間所帶來(lái)的額外正則化會(huì)有更多好處。另一方面,優(yōu)化訓(xùn)練時(shí)間并不考慮推理成本是否是次優(yōu)的,這也是為什么我們的訓(xùn)練時(shí)間結(jié)構(gòu)總是包含測(cè)量每個(gè)epoch中測(cè)試集的時(shí)間,并且我們避免了類似測(cè)試時(shí)間增強(qiáng)等技術(shù),它可以在推理時(shí)減少訓(xùn)練時(shí)間。
-
gpu
+關(guān)注
關(guān)注
28文章
4946瀏覽量
131233 -
網(wǎng)絡(luò)架構(gòu)
+關(guān)注
關(guān)注
1文章
96瀏覽量
12916
原文標(biāo)題:如何訓(xùn)練你的ResNet(四):網(wǎng)絡(luò)架構(gòu)對(duì)訓(xùn)練時(shí)間的影響
文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
深度學(xué)習(xí)與圖神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)分享:CNN經(jīng)典網(wǎng)絡(luò)之-ResNet

一文讀懂物體分類AI算法:LeNet-5 AlexNet VGG Inception ResNet MobileNet
優(yōu)化神經(jīng)網(wǎng)絡(luò)訓(xùn)練方法有哪些?
如何進(jìn)行高效的時(shí)序圖神經(jīng)網(wǎng)絡(luò)的訓(xùn)練
YOLOv6中的用Channel-wise Distillation進(jìn)行的量化感知訓(xùn)練
【CANN訓(xùn)練營(yíng)第三季】基于Caffe ResNet-50網(wǎng)絡(luò)實(shí)現(xiàn)圖片分類
形象的理解深度網(wǎng)絡(luò)架構(gòu)?

索尼發(fā)布新的方法,在ImageNet數(shù)據(jù)集上224秒內(nèi)成功訓(xùn)練了ResNet-50
百度大腦EdgeBoard計(jì)算卡基于Resnet50/Mobile-SSD模型的性能評(píng)測(cè)
首個(gè)關(guān)于深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練相關(guān)的理論證明

基于改進(jìn)U-Net網(wǎng)絡(luò)建立HU-ResNet模型

PyTorch教程8.6之殘差網(wǎng)絡(luò)(ResNet)和ResNeXt

MATLAB如何使用訓(xùn)練好的網(wǎng)絡(luò)
怎么對(duì)神經(jīng)網(wǎng)絡(luò)重新訓(xùn)練
基于RV1126開(kāi)發(fā)板的resnet50訓(xùn)練部署教程

評(píng)論