目前為止,我們使用的都是固定網絡架構,即在CIFAR10上用單個GPU最快的DAWNBench記錄,經過簡單改變,我們將網絡達到94%精度的時間從341秒縮短至154秒。今天,我們要研究其他的替代性架構。
讓我們先回顧下目前所用的網絡:
粉色的殘差塊包含了一個identity shortcut并保留了輸入的空間和通道維度:
淺綠色的下采樣模塊將空間分辨率降低兩倍,輸出通道的數量增加一倍:
加入殘差模塊的原因是通過在網絡中創建shortcut讓優化變得更簡單。我們希望較短的路徑代表相對容易訓練的淺層子網絡,而較長的路徑可以增加網絡的能力和計算深度。這樣一來,研究最短路徑如何通過網絡孤立訓練,并且如何采取措施進行改進似乎是合理的。
清除長分支會生成一下主要網絡,其中除了第一個網絡,所有的卷積網絡的步長都為2:
在接下來的實驗中,我們會訓練20個epoch,利用比之前學習速率更快速的版本訓練,因為網絡較小,收斂得更快。復現這一結果的代碼在此:github.com/davidcpage/cifar10-fast/blob/master/experiments.ipynb
對最短的路徑網絡訓練20個epoch,在36秒內的測試精度僅達到55.9%。刪除掉重復的批標準化ReLU群組,將訓練時間縮短到32秒,但是測試精度仍然不變。
這一網絡有個嚴重的缺陷,即下采樣卷積有1×1的核以及為2的步長,所以與其擴大接受域,它們反而會拋棄信息。如果我們用3×3的卷積替換,測試精度在36秒的訓練后達到了85.6%。
我們還能繼續對下采樣進行優化,使用3×3、步長為1的卷積,并且后面跟一個池化層。我們選擇最大池化和2×2的窗口大小,43秒訓練后的測試精度為89.7%。用平均池化法得到相似的結果,但時間稍長。
分類器前的最后一個池化層是全局平均池化層和最大池化層的連接,從原始網絡中得來。我們用更標準的全局最大池化層替換它,并且將最終的卷積層的輸出維度變為原來的兩倍,對輸入維度進行補償,最終在47秒內,測試精度達到了90.7%。注意,這一階段的平均池化層并不如最大池化層。
默認情況下,在PyTorch0.4中,初始批規范化的范圍在0到1之間隨機選擇。初始接近0的通道可能被浪費,所以我們用常數1來替代。這導致通過網絡中的信號更大。為了補償,我們提出了一種整體恒定懲罰對分類器進行重新調整。對這一額外超參數,大致的手動優化值是0.125。經過這些改變,經過20個epoch的訓練,網絡在47秒內達到了91.1%的測試精度。
下表總結了我們上文中提到的各種改進步驟:
現在的網絡看起來沒什么問題了,接下來我們要進行收益遞減,添加一些圖層。目前網絡僅有5個圖層(四個卷積,一個全連接層),所以還不確定我們是否需要殘差分支,或者添加額外的層后能否得到94%的目標精確度。
如果只增加寬度似乎不可行。如果我們讓通道維度增加一倍,訓練60個epoch后,可以達到93.5%的精確度,但是會用321秒。
在增加網絡深度方面,我們還面臨著多種問題,例如不同的殘差分支類型、深度和寬度以及新的超參數,例如初始范圍和殘差分支的偏見。為了讓結果更進一步,我們要嚴格限制搜索空間,所以,不能調整任何新的超參數。
特別的是,我們要考慮兩種類型的網絡。第一種是選擇性地在每個最大池化層后添加一個卷積層。第二種是添加一個含有兩部分3×3卷積的殘差塊,其中有identity shortcut,也是在最大池化層之后添加。
我們在最后卷積模塊后、全局最大池化層之前插入了一個2×2的最大池化層。是否添加新層要根據不同情況決定,我們還考慮混合兩種類型,但這并沒有提升性能,所以我們就不在此展開了。
下圖是第一種網絡示例,其中我們在第二個最大池化層之后添加了額外的卷積:
下圖是第二種網絡示例,其中我們在第一和第三層之后添加了殘差分支:
現在要開始“暴力”架構搜索了!我們訓練了15種網絡(經過改進的原始網絡和上述兩類網絡中每類的7種變體),各訓練20個epoch,另外還對比了訓練22個epoch的結果,了解訓練時間增長和更深的網絡架構之間的差別。如果每個實驗僅運行一次,就會花費30分鐘的計算時間。但不幸的是,每次最終測試精度的標準偏差約為0.15%。所以為了得出準確的結果,我們會對每個實驗運行10次,將每個數據點的標準偏差控制在0.05%左右。即便如此,不同架構之間從20到22個epoch運行后改進率之間的差異主要可能是噪音。
以下是結果,點表示20個epoch和精確度,線條的延伸表示22個epoch的結果:
與運用更深層的架構所得到的進步相比,訓練更長時間所得到的進步速度似乎很慢。在測試的框架中,最有前景的或許是Residual:L1+L3。網絡在66秒內達到了93.8%的精確度,如果我們將訓練擴展到24個epoch,平均精確度為94.08%,訓練時間為79秒。
目前為止,我們已經得到了一個9層的深度殘差網絡,能在79秒內達到94%的訓練精確度,幾乎將訓練時間縮短了一半。最后還有一個問題:我們是否真的需要殘差分支才能讓測試精確度達到94%?答案顯然是否定的。例如,單一的分支網絡Extra:L1+L2+L3能在180秒、60個epoch內達到95%的精確度,加上正則化或更寬的版本后,精確度會更高。但是至少在現在最快的是一個殘差網絡。
結語
本文結束前,讓我們再簡單回顧一下研究的目的。很多觀點認為,訓練模型在CIAFR10上達到94%的測試精確度是無意義的行為,應為現在最高的精確度都達到98%了(另外還有人認為現在ImageNet才是“唯一”的數據集,其他實驗只是浪費時間罷了)。
事實上,我們可以通過9層網絡在24個epoch內達到94%的精確度,這也再次說明我們的目標門檻過低。另一方面,人類在CIFAR10上的表現也在94%左右,所以這一情況并不清楚。
在某種程度上,現在的精確度是一種“病態”的目標,只追求更大的模型、調整更多超參數、更多數據增強或者更長的訓練時間,讓各種工作之間的比較更難。另外,在訓練或結構設計上的創新會帶來額外的超參數維度,并且調整這些參數可能會導致有關訓練更好的隱式優化,否則這些與研究中的擴展無關。如果基礎模型的外顯超參數的維度空間較低,那么通常被認為是最佳的對比試驗無法解決該問題。這種情況的結果是,最先進的模型難以進行比較、復現、重建。
有了這些問題,我們認為任何能輕易在各項實驗中進行比較的都是有益的。我們相信創建有競爭力的基準也是應對挑戰的一種方法。資源的限制讓各實驗之間的比較更公平,減少了為了培訓所需要做的調整。模型多余的復雜性可能會受到資源限制基線的懲罰,哪些明確控制相關參數的方法通常會獲勝。
最近,根據模型推理時間或模型大小公布曲線越來越多。這對于優化和解決上面的問題來說都是積極的方法,但我們相信訓練時間所帶來的額外正則化會有更多好處。另一方面,優化訓練時間并不考慮推理成本是否是次優的,這也是為什么我們的訓練時間結構總是包含測量每個epoch中測試集的時間,并且我們避免了類似測試時間增強等技術,它可以在推理時減少訓練時間。
-
gpu
+關注
關注
28文章
4777瀏覽量
129360 -
網絡架構
+關注
關注
1文章
95瀏覽量
12638
原文標題:如何訓練你的ResNet(四):網絡架構對訓練時間的影響
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
深度學習與圖神經網絡學習分享:CNN經典網絡之-ResNet
![深度學習與圖神經<b class='flag-5'>網絡</b>學習分享:CNN經典<b class='flag-5'>網絡</b>之-<b class='flag-5'>ResNet</b>](https://file.elecfans.com//web2/M00/6F/68/poYBAGNGHmKAb8zQAAA44hSDe-c316.jpg)
一文讀懂物體分類AI算法:LeNet-5 AlexNet VGG Inception ResNet MobileNet
如何進行高效的時序圖神經網絡的訓練
YOLOv6中的用Channel-wise Distillation進行的量化感知訓練
形象的理解深度網絡架構?
![形象的理解深度<b class='flag-5'>網絡</b><b class='flag-5'>架構</b>?](https://file.elecfans.com/web2/M00/49/D6/pYYBAGKhvGeAD97VAAAtC658JY0515.png)
索尼發布新的方法,在ImageNet數據集上224秒內成功訓練了ResNet-50
百度大腦EdgeBoard計算卡基于Resnet50/Mobile-SSD模型的性能評測
基于改進U-Net網絡建立HU-ResNet模型
![基于改進U-Net<b class='flag-5'>網絡</b>建立HU-<b class='flag-5'>ResNet</b>模型](https://file.elecfans.com/web1/M00/E5/D4/pIYBAGBRZg-AZjcVAAKd1Syr6YI460.png)
深度解析MLPerf競賽Resnet50訓練單機最佳性能
PyTorch教程8.6之殘差網絡(ResNet)和ResNeXt
![PyTorch教程8.6之殘差<b class='flag-5'>網絡</b>(<b class='flag-5'>ResNet</b>)和ResNeXt](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論