剪枝後這個深度神經網路速度提高了 3 倍,體積縮小了 4 倍
目前,深度學習模型需要大量的計算、內存和功耗,這成為我們在實時推理或在計算資源有限的邊緣設備以及瀏覽器上運行模型的瓶頸。能量效率是當前深度學習模型的主要關注點。提升這種效率的方法之一是著眼於推理效率。
更複雜的模型=>更多的內存消耗=>更多的功耗
剪枝就是一種推理方法,它可以有效地獲得更小的模型、更高效的內存、更高效的功率和更快的推理,同時在精度上損失較小,其他類似的技術還有權值共享和量化。深度學習的靈感來自於神經科學領域的幾個方面。在深度學習中剪枝也是一個受生物學啟發的概念,我們將在稍後的文章中進行討論。
隨著深度學習的進步,最先進的模型也變得越來越精確,但這種進步是有代價的,我將在這個博客里對其中的一些進行說明。
挑戰一:模型尺度變得越來越大很難通過空中下載技術來分配大尺度模型。
挑戰二:速度
訓練時間以fb.resnet.torch為基準,基於M40 GPUs。
如此長的訓練時間限制了機器學習研究人員的效率。
挑戰三:能量效率
AlphaGo: 1920個cpu和280個gpu,每場比賽3000美元的電費
在移動設備上:快速耗盡電池電量
數據中心:增加成本
解決方法 — 高效的推斷演算法
剪枝
權重共享
量化
低秩逼近
二值神經網路 / 三值神經網路
Winograd轉換
生物學啟發的剪枝演算法
人工神經網路中的剪枝被認為是來自人類大腦突觸修剪的一個想法,在人類大腦中,當軸突和樹突完全衰退和死亡,會導致突觸消失,這發生在許多哺乳動物的幼年早期和發育期初期之間。突觸修剪從出生時開始,一直持續到25歲左右。
[Lecun等. NIPS,89] [Han等. NIPS』15]
網路通常看起來與左邊的那個類似:下層的每個神經元都與上層每個神經元相連,但這意味著我們需要將許多浮點數相乘。理想情況下,我們只需要將每個神經元連接到其他的幾個神經元上就可以省去一些乘法;這就是所謂的「稀疏」網路。
稀疏模型更容易壓縮,而且我們可以在推斷時跳過0值以改進推斷延遲。
如果可以根據神經元的貢獻大小對網路中的神經元進行排序,那麼就可以將排名較低的神經元從網路中移除,從而得到一個更小、更快的網路。
獲得更快/更小的網路,對於在移動設備上運行這些深度學習網路非常重要。
例如,可以根據神經元權重的L1/L2範數進行排序。在修剪之後,準確性會下降(如果排序較合理,可則能不會下降太多準確率),並且網路通常是迭代地訓練-修剪-訓練-修剪以較大程度保證模型的準確率。如果我們一次修剪得太多,網路可能會受到嚴重破壞,無法恢復準確率。因此在實踐中,這是一個迭代的過程——通常稱為「迭代剪枝」:修剪/訓練/重複。
請參閱Tensorflow團隊編寫的代碼,以了解迭代剪枝。
權重修剪將權重矩陣中的單個權重設置為零。這相當於刪除連接,如圖所示。
為了實現k%的稀疏性,我們將權重矩陣W中的各個權重按大小排序,然後將最小的k%的部分權重設置為零。
完整代碼查看點擊此處
單元/神經元修剪
將權重矩陣中的整個列設置為零,實際上是刪除相應的輸出神經元。
為了達到k%的稀疏性,我們根據權重矩陣的l2範數對列進行排序,並刪除最小的k%的列。
完整代碼點擊此處
當然了,當您想增加稀疏性並刪除更多的部分網路時,模型性能將逐步下降。您估計稀疏性與性能之間的退化曲線是什麼樣的呢?
利用一個簡單的神經網路結構對MNIST數據集上的圖像分類模型進行剪枝 ,如下:
引用的參考代碼中使用的體系結構
使用代碼重新生成的退化曲線圖
許多研究人員認為剪枝是一種被忽視的方法,但它將得到更多的關注,並在實踐中更多地使用。我們展示了如何使用一個非常簡單的神經網路結構在一個簡單數據集上獲得良好的結果。我認為在實踐中利用深度學習來解決的許多問題都與此類似,在有限的數據集上使用遷移學習,因此這些問題也可以從修剪演算法中受益。
參考Code for this blog post(https://drive.google.com/open?id=1GBLFxyFQtTTve_EE5y1Ulo0RwnKk_h6J)
To prune, or not to prune: exploring the efficacy of pruning for model compression, Michael H. Zhu, Suyog Gupta, 2017(https://arxiv.org/pdf/1710.01878.pdf)
Learning to Prune Filters in Convolutional Neural Networks, Qiangui Huang et. al, 2018(https://arxiv.org/pdf/1801.07365.pdf)
Pruning deep neural networks to make them fast and small(https://jacobgil.github.io/deeplearning/pruning-deep-learning)
Optimize machine learning models with Tensorflow Model Optimization Toolkit(https://www.tensorflow.org/model_optimization)
* 文中的相關鏈接,請點擊【剪枝後這個深度神經網路速度提高了 3 倍,體積縮小了 4 倍】進行訪問。
via https://towardsdatascience.com/pruning-deep-neural-network-56cae1ec5505
你可能錯過了這些企業的秋招信息,新增B站、美團、攜程、網易等(持續更新中...)
自今天開始,AI研習社會定期搜集並推送各大名企校招崗位和內推信息,同時也會邀請求職成功者和企業人力專家分享求職經驗。另外,我們會在社區職薦版塊更新 AI 企業校招和社招信息,歡迎有志於在 AI 行業發展的應屆畢業生們來 AI 研習社投遞簡歷噢~
點擊鏈接可訪問查看過去一段時間企業校招信息:
https://ai.yanxishe.com/page/blogDetail/14121
雷鋒網雷鋒網雷鋒網


※深度學習的完整硬體指南
※把大象裝進盒子 海康威視AI開放平台小記
TAG:雷鋒網 |