如何系统性掌握深度学习模型设计和优化
模型是深度學習的核心技術之一,我們平時在從事相關工作時,有很大一部分精力都在模型設計和優化上。對于新手朋友們來說,往往只會跑一跑別人的模型或者只會盲目的簡單修改一下參數,不知道該如何進行設計和優化。
今天便來談談這個問題,同時介紹一個好的學習社區供大家討論與提升。
文/編輯 | 言有三?
1 需要掌握哪些內容
根據不同的用途(刷榜或者工業級部署),模型設計需要實現以下目標:
(1) 獲得更高的任務指標。
(2) 獲得更快的運行速度。
(3) 獲得更小的模型體積。
(4) 獲得穩定可靠的性能。
以上各類要求其實對模型設計的側重點又不同。要獲得更高的任務指標,需要不斷提高模型的學習能力。要獲得更快的運行速度和更小的模型體積,需要優化模型結構。要獲得性能穩定的模型,需要保證模型的通用性。
具體涉及的技術又非常多了,下面列舉一些常用的。
(1) 模型深度和寬度的設計。
(2)?分辨率和感受野的設計。
(3) 卷積類型,大小,步長的設計。
(4) 正則化技術的設計。
(5) 網絡拓撲結構的設計。
(5) 多尺度與信息融合的設計。
(6) 注意力等感知機制的使用。
(7) 量化與剪枝技術的使用。
(8) 半監督/無監督技術的使用。
(9) 一些工程技巧的使用。
(10) AutoML技術的使用。
除了這些內容,還涉及模型的具體訓練,部署,轉換等各種問題。
2 有三AI已經做了什么
有三從至少三四年之前就致力于CNN網絡架構相關的設計和優化研究,至今公眾號已經寫過很多的文章,知乎也回答過相關的問題,直播也做過幾次分享,首先我們回顧一下已有的內容!
在兩年多前,有三AI就開始關注模型優化并撰寫了相關綜述文章和實驗文章,如下:
為了壓榨CNN模型,這幾年大家都干了什么
【技術綜述】如何Finetune一個小網絡到移動端(時空性能分析篇)
在有三的新書第8章,非常詳細地討論了模型壓縮理論和實戰。
從去年開始,我們公眾號發了非常多的模型結構解讀,比如主流的圖像分類,分割模型。
【完結】總結12大CNN主流模型架構設計思想
【完結】12篇文章帶你逛遍主流分割網絡
現在我們又開始了GAN模型結構相關的分享,如果時間容許還會有其他任務,比如目標檢測,跟蹤等,很多很多。
另外,我們在《AI修行之路》的不惑境界系列中深刻探討過網絡的寬度和深度對模型性能的影響,并進行了一系列實驗的驗證!講述了殘差網絡,分組網絡,多尺度網絡,注意力機制等網絡的設計。
【AI不惑境】網絡深度對深度學習模型性能有什么影響?
【AI不惑境】網絡的寬度如何影響深度學習模型的性能?
【AI不惑境】殘差網絡的前世今生與原理
【AI不惑境】移動端高效網絡,卷積拆分和分組的精髓
【AI不惑境】深度學習中的多尺度模型設計
有三在知乎上也開設過三個相關的直播,分別是《如何設計更加強大的CNN架構》,《如何設計更加高效的CNN架構》,《千奇百怪的CNN網絡架構》內容如下:
在這個網絡上,比有三更熟悉各種各樣的模型架構設計的朋友,已知的恐怕真不多。
3 哪里有更多更新
以上就是全部了嗎?當然遠遠不是,僅僅是九牛一毛。幾個月前開始,有三在知識星球平臺每天更新各種各樣的模型結構,涉及或者即將涉及幾乎所有領域。
已經更新有多少不記得了,可能接近200期了,最近的一個總結是這篇,【知識星球】超3萬字的網絡結構解讀,學習必備。
不過現在應該已經超過4萬字的解讀了,為了方便大家收藏閱讀,有三將分享做成了卡片的形式,案例如下:
有三AI知識星球-網絡結構1000變
DeepRebirth
在深度學習模型中有許多的非tensor網絡層雖然參數很少,但是有較大的計算量,因此模型在最終部署到移動端時經常合并這些網絡層從而進一步提高推理速度。
作者/編輯 言有三
模型壓縮有許多的方法,比如使用小卷積,多尺度,去除全連接層,瓶頸結構等思路設計緊湊的網絡,也有對權重進行量化剪枝等方法,而DeepRebirth則采用了另外一種思路,即將Non-tensor layer(包括pooling、BN、LRN、ReLU等)合并到tensor層中,因為它們雖然參數不多,但是有很大的計算量,下面首先看看經典網絡中這些層的計算時間比例:
可以看出這些非卷積層占據了很大比例的計算時間,在Intel x86上甚至能占到一半,如果能夠將其去除將大幅度的提升模型的運算速度。
作者提出了兩種思路,分別是StreamLine Merging和Branch Merging。
StreamLine Merging是一種串行的合并方式,如下:
通常來說,就是將Pooling、LRN,BN等網絡層與相鄰近的Conv層進行合并,上圖的案例中經過合并后從153.8ms直接降低到了16.6ms。這里卷積本身的計算時間也大大降低,是因為pool2融合進了conv,使其步長從1變為2。
現今更為常見的情況是將BN,Scale等網絡層和相鄰的Conv層合并,也能降低不少計算量。
Branch Merging是一個分支的合并方式,如下:
如上圖,將1*1卷積層以及Pooling層分支分別合并到和它并行的3*3卷積和5*5卷積分支中。另外考慮到3*3卷積和5*5卷積分支輸出通道增加會增大參數量和運算量,因此調整這些分支的輸入通道進行壓縮。
在進行以上的合并后,模型的性能通常會降低,所以需要重新訓練,作者采用的方式是合并得到的新層使用標準的初始化方式,將其他層的參數固定不變,然后將新層的學習率設置為其他層的10倍后進行finetuning。
那么實驗效果如何呢?以GoogLeNet為基準模型的實驗結果如下:
上表展示了對不同的網絡層使用以上合并策略,可以發現各種網絡層的速度都有很大提升,在精度只降低0.4%的時候,能有超過3倍的速度提升。
這是非常實用且強大的一個提升模型運行速度的方法,在實際進行模型部署時,常常會對BN等網絡層進行合并。
[1] Li D, Wang X, Kong D. Deeprebirth: Accelerating deep neural network execution on mobile devices[C]//Thirty-Second AAAI Conference on Artificial Intelligence. 2018.
更多的內容,下面從其中10類中隨機挑選出一些給大家感受一下。
今年的目標只有一個:做到500期以上。
4 最后要說的話
老朋友們應該都知道,有三做內容不喜歡推送信息,而是喜歡做原創,系統徹底的原創。因此,每次講述一個模型,我不會只是告訴大家有什么,而是會細致剖析解讀。
在這個系列上,我每天花的時間就超過了3個小時,后面還要增加模型訓練和部署相關的內容。
因此,更多的內容都會在有三AI知識星球分享,不會繼續在公眾號分享。有三AI沒有廣告收入,希望大家能夠理解支持。
如果真的需要,就加入有三AI知識星球,一起討論學習吧。
另外,網絡結構只是有三AI知識星球中的一個板塊,還有很多重磅,相信你不會失望。
已經加入的朋友,邀請一位新朋友加入,就可以獲得超過50元微信紅包的即時獎金噢,系統自動發放。
轉載文章請后臺聯系
侵權必究
有三AI知識星球官宣,BAT等大咖等你來撩
揭秘7大AI學習板塊,這個星球推薦你擁有
有三AI 1000問回歸,備戰秋招,更多,更快,更好,等你來戰!
【知識星球】做作業還能贏獎金,傳統圖像/機器學習/深度學習盡在不言
【知識星球】顏值,自拍,美學三大任務簡介和數據集下載
【知識星球】數據集板塊重磅發布,海量數據集介紹與下載
【知識星球】貓貓狗狗與深度學習那些事兒
【知識星球】超3萬字的網絡結構解讀,學習必備
【知識星球】視頻分類/行為識別網絡和數據集上新
【知識星球】3D網絡結構解讀系列上新
【知識星球】動態推理網絡結構上新,不是所有的網絡都是不變的
【知識星球】Attention網絡結構上新,聚焦才能贏
【知識星球】幾個人像分割數據集簡介和下載
【知識星球】總有些骨骼輕奇,姿態妖嬈的模型結構設計,不知道你知不知道,反正我知道一些
【知識星球】從SVM對偶問題,到疲勞駕駛檢測,到實用工業級別的模型壓縮技巧
總結
以上是生活随笔為你收集整理的如何系统性掌握深度学习模型设计和优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【NLP】 深入浅出解析BERT原理及其
- 下一篇: 【每周NLP论文推荐】 NLP中命名实体