内存中有两个4字节以压缩的bcd_卷积神经网络的压缩与加速 -- 剪枝(PRUNING)论文(二)...
生活随笔
收集整理的這篇文章主要介紹了
内存中有两个4字节以压缩的bcd_卷积神经网络的压缩与加速 -- 剪枝(PRUNING)论文(二)...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Learning Efficient Convolutional Networks through Network Slimming
Abstract:
講道理 它這個摘要寫得好霸氣。。太猛了這個方法它可以同時做到以下三件事:
1. 減小模型大小
2. 減小運行時的內存占用
3. 在犧牲一點點精度的情況下大幅減少計算
能做到以上這些事情的其他方法也有,但是其他方法或需要特殊的硬件,或需要額外的訓練開銷,但是這個方法都沒有!
那么它是怎么做到呢?簡單來說,就是拿一個大型網絡(如resent105),往里面搞點東西,然后拿去訓練,在訓練的過程中自動的把那些額外的channel刪掉,進而得到一個比較精簡的模型。
效果也是很不錯的:模型大小是原來的1/20,操作數是原來的1/5。
Motivation
1. 現有方法并不能解決所有問題(就是摘要里說的1. 減小模型大小;2. 減小運行時的內存占用;3. 在犧牲一點點精度的情況下大幅減少計算);2. 現有的很多方法需要額外的軟/硬件加持,比如針對權重剪枝的壓縮方法顯然不適用于常見的加速矩陣運算的GPU。
Method
文章先拋出一些比較常見的壓縮方法:
這個方法之前想過,就是利用SVD來對權重矩陣進行降維,進而達到壓縮模型的作用。這個方法的優(yōu)點很明顯,那就是夠簡單(畢竟連我都想得到。。。。),缺點就是只能針對全鏈接起作用(因為全鏈接才可以把權重寫成矩陣的形式),而在處理CV的大型網絡中,最占存儲和最耗費計算資源的其實是CNN,所以整體效果并不明顯。這個應該怎么翻譯呢。。。權重分桶?可能吧.. 其實這個方法也挺有趣的,就是把各個權重進行聚類,然后使用聚類中心代替當前權重。然后再用一個表來存儲一個字節(jié)數較小的數和聚類中心之間的映射關系,然后再用這些字節(jié)數較小的數放到權重中。(講得有點繞,但是很簡單就對了)
優(yōu)點:很明顯,在存儲的時候壓縮效果特別好。試想,從double變成int8, 減少了這么多倍。
缺點:也很明顯,就是:
1. 并不能減少推理時候的內存消耗和時間加速,因為你需要把你映射出來的float32/float64放到內存中,需要該用多少還是用多少;
2.準確率損失絕對大。試想,如果使用uint8來存儲,那就只能有256個聚類中心,但是一個channel的大小可能是512*512,那平均每個聚類中心就有1024個數值了,這個準確率絕對會受到很大的影響。但是如果你使用int16或者int32來存儲的話,那精度的確會上升,但是這個時候,你的壓縮效果就絕對沒那么高了。這個是權重剪枝,就是把一些不重要的權重置0/刪除。
優(yōu)點:我覺得沒有優(yōu)點。。。
缺點:做權重剪枝有兩個辦法,一個是把不重要的權重置0,一個是把不重要的權重刪掉。如果你把不重要的權重置0,看起來好像是ok的,但是你0也是個數值,所以不管是在外存還是內存中,該占用的內存還是占用了。而對于第二個處理方式(把不重要的權重刪掉),首先不說主流的框架不支持,主要是主流的硬件也不支持。因為深度學習采用GPU的原因正是因為GPU使用矩陣運行來加速我們的訓練,而把不重要的參數刪掉之后,那這個矩陣就出現了空洞,這時候就沒辦法用矩陣運算了。基于結構的剪枝。paper中說道,我們的方法也是屬于這個范疇,但是他說其他的一些結構化剪枝沒有咱們文中這個絲滑(我還沒看他對比的那幾篇paper,姑且就相信他吧)。
優(yōu)點:這種基于結構化的剪枝不需要軟/硬件加速,因為沒有破壞矩陣運算的結構,但是我覺得本質原因是結構化剪枝是得到一個小規(guī)模的正常的網絡,所以它和其他網絡并沒有區(qū)別。
缺點:作者說說這篇paper提出的方法更加絲滑。這個我不懂了,沒接觸過,不過按照paper中的描述,應該有點像AutoML。
Detail
用簡單的一句話概括就是:將L1正則化從權重擴展到channel。其實這個也解決了我之前的一個問題:我之前用L1來normalize網絡中的權重,然后將權重刪掉雖然可行,但是就陷入了前面所說的,基于權重剪枝的問題。那我如何把L1的作用水平從weight到更高呢?
在這里,他就把損失函數定義成 , 其中g(*)就是平滑L1正則。那么雖然L逐漸被優(yōu)化,絕大多數的 都變成了0,這時候我們再看另外一個公式 :當絕大多數變成0的時候,很多的channel也變成了0,那就可以把他們刪除掉了。
一開始我是有點疑惑,為什么 為0的channel正好就會是不重要的,然后我發(fā)現了 是和 有關的,那就懂了,這就變成了一個優(yōu)化問題了。
然后這篇paper中有提到一個trick也是不錯的:就是使用smooth L1正則化來代替L1正則化。
這篇也給了一些啟示,或許從L2出發(fā)思考也會有其他的不錯的方案。
總結
以上是生活随笔為你收集整理的内存中有两个4字节以压缩的bcd_卷积神经网络的压缩与加速 -- 剪枝(PRUNING)论文(二)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oa项目经验描述_OA系统为企业带来多少
- 下一篇: 什么叫追涨杀跌