0
本文作者: AI研習(xí)社-譯站 | 2019-08-08 11:19 |
目前,深度學(xué)習(xí)模型需要大量的計(jì)算、內(nèi)存和功耗,這成為我們?cè)趯?shí)時(shí)推理或在計(jì)算資源有限的邊緣設(shè)備以及瀏覽器上運(yùn)行模型的瓶頸。能量效率是當(dāng)前深度學(xué)習(xí)模型的主要關(guān)注點(diǎn)。提升這種效率的方法之一是著眼于推理效率。
更復(fù)雜的模型=>更多的內(nèi)存消耗=>更多的功耗
剪枝就是一種推理方法,它可以有效地獲得更小的模型、更高效的內(nèi)存、更高效的功率和更快的推理,同時(shí)在精度上損失較小,其他類似的技術(shù)還有權(quán)值共享和量化。深度學(xué)習(xí)的靈感來自于神經(jīng)科學(xué)領(lǐng)域的幾個(gè)方面。在深度學(xué)習(xí)中剪枝也是一個(gè)受生物學(xué)啟發(fā)的概念,我們將在稍后的文章中進(jìn)行討論。
隨著深度學(xué)習(xí)的進(jìn)步,最先進(jìn)的模型也變得越來越精確,但這種進(jìn)步是有代價(jià)的,我將在這個(gè)博客里對(duì)其中的一些進(jìn)行說明。
很難通過空中下載技術(shù)來分配大尺度模型。
挑戰(zhàn)二:速度
訓(xùn)練時(shí)間以fb.resnet.torch為基準(zhǔn),基于M40 GPUs。
如此長的訓(xùn)練時(shí)間限制了機(jī)器學(xué)習(xí)研究人員的效率。
挑戰(zhàn)三:能量效率
AlphaGo: 1920個(gè)cpu和280個(gè)gpu,每場(chǎng)比賽3000美元的電費(fèi)
在移動(dòng)設(shè)備上:快速耗盡電池電量
數(shù)據(jù)中心:增加成本
解決方法 — 高效的推斷算法
剪枝
權(quán)重共享
量化
低秩逼近
二值神經(jīng)網(wǎng)絡(luò) / 三值神經(jīng)網(wǎng)絡(luò)
Winograd轉(zhuǎn)換
人工神經(jīng)網(wǎng)絡(luò)中的剪枝被認(rèn)為是來自人類大腦突觸修剪的一個(gè)想法,在人類大腦中,當(dāng)軸突和樹突完全衰退和死亡,會(huì)導(dǎo)致突觸消失,這發(fā)生在許多哺乳動(dòng)物的幼年早期和發(fā)育期初期之間。突觸修剪從出生時(shí)開始,一直持續(xù)到25歲左右。
[Lecun等. NIPS,89] [Han等. NIPS’15]
網(wǎng)絡(luò)通常看起來與左邊的那個(gè)類似:下層的每個(gè)神經(jīng)元都與上層每個(gè)神經(jīng)元相連,但這意味著我們需要將許多浮點(diǎn)數(shù)相乘。理想情況下,我們只需要將每個(gè)神經(jīng)元連接到其他的幾個(gè)神經(jīng)元上就可以省去一些乘法;這就是所謂的“稀疏”網(wǎng)絡(luò)。
稀疏模型更容易壓縮,而且我們可以在推斷時(shí)跳過0值以改進(jìn)推斷延遲。
如果可以根據(jù)神經(jīng)元的貢獻(xiàn)大小對(duì)網(wǎng)絡(luò)中的神經(jīng)元進(jìn)行排序,那么就可以將排名較低的神經(jīng)元從網(wǎng)絡(luò)中移除,從而得到一個(gè)更小、更快的網(wǎng)絡(luò)。
獲得更快/更小的網(wǎng)絡(luò),對(duì)于在移動(dòng)設(shè)備上運(yùn)行這些深度學(xué)習(xí)網(wǎng)絡(luò)非常重要。
例如,可以根據(jù)神經(jīng)元權(quán)重的L1/L2范數(shù)進(jìn)行排序。在修剪之后,準(zhǔn)確性會(huì)下降(如果排序較合理,可則能不會(huì)下降太多準(zhǔn)確率),并且網(wǎng)絡(luò)通常是迭代地訓(xùn)練-修剪-訓(xùn)練-修剪以較大程度保證模型的準(zhǔn)確率。如果我們一次修剪得太多,網(wǎng)絡(luò)可能會(huì)受到嚴(yán)重破壞,無法恢復(fù)準(zhǔn)確率。因此在實(shí)踐中,這是一個(gè)迭代的過程——通常稱為“迭代剪枝”:修剪/訓(xùn)練/重復(fù)。
請(qǐng)參閱Tensorflow團(tuán)隊(duì)編寫的代碼,以了解迭代剪枝。
將權(quán)重矩陣中的單個(gè)權(quán)重設(shè)置為零。這相當(dāng)于刪除連接,如圖所示。
為了實(shí)現(xiàn)k%的稀疏性,我們將權(quán)重矩陣W中的各個(gè)權(quán)重按大小排序,然后將最小的k%的部分權(quán)重設(shè)置為零。
完整代碼查看點(diǎn)擊此處
單元/神經(jīng)元修剪
將權(quán)重矩陣中的整個(gè)列設(shè)置為零,實(shí)際上是刪除相應(yīng)的輸出神經(jīng)元。
為了達(dá)到k%的稀疏性,我們根據(jù)權(quán)重矩陣的l2范數(shù)對(duì)列進(jìn)行排序,并刪除最小的k%的列。
完整代碼點(diǎn)擊此處
當(dāng)然了,當(dāng)您想增加稀疏性并刪除更多的部分網(wǎng)絡(luò)時(shí),模型性能將逐步下降。您估計(jì)稀疏性與性能之間的退化曲線是什么樣的呢?
利用一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)對(duì)MNIST數(shù)據(jù)集上的圖像分類模型進(jìn)行剪枝 ,如下:
引用的參考代碼中使用的體系結(jié)構(gòu)
使用代碼重新生成的退化曲線圖
許多研究人員認(rèn)為剪枝是一種被忽視的方法,但它將得到更多的關(guān)注,并在實(shí)踐中更多地使用。我們展示了如何使用一個(gè)非常簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)在一個(gè)簡(jiǎn)單數(shù)據(jù)集上獲得良好的結(jié)果。我認(rèn)為在實(shí)踐中利用深度學(xué)習(xí)來解決的許多問題都與此類似,在有限的數(shù)據(jù)集上使用遷移學(xué)習(xí),因此這些問題也可以從修剪算法中受益。
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)
* 文中的相關(guān)鏈接,請(qǐng)點(diǎn)擊【剪枝后這個(gè)深度神經(jīng)網(wǎng)絡(luò)速度提高了 3 倍,體積縮小了 4 倍】進(jìn)行訪問。
via https://towardsdatascience.com/pruning-deep-neural-network-56cae1ec5505
你可能錯(cuò)過了這些企業(yè)的秋招信息,新增B站、美團(tuán)、攜程、網(wǎng)易等(持續(xù)更新中...)
自今天開始,AI研習(xí)社會(huì)定期搜集并推送各大名企校招崗位和內(nèi)推信息,同時(shí)也會(huì)邀請(qǐng)求職成功者和企業(yè)人力專家分享求職經(jīng)驗(yàn)。另外,我們會(huì)在社區(qū)職薦版塊更新 AI 企業(yè)校招和社招信息,歡迎有志于在 AI 行業(yè)發(fā)展的應(yīng)屆畢業(yè)生們來 AI 研習(xí)社投遞簡(jiǎn)歷噢~
點(diǎn)擊鏈接可訪問查看過去一段時(shí)間企業(yè)校招信息:
https://ai.yanxishe.com/page/blogDetail/14121雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。