現在的深度學習的模型越來越大,有個結論是說,大腦的啟用是非常稀疏的,對模型引數有什麼好的辦法壓縮嗎

時間 2021-05-09 20:20:12

1樓:

現代神經網路使用GPU或向量化的CPU指令或神經網路ASIC進行訓練和推理,這些硬體結構天生對稠密的Tensor操作進行了優化,比如卷積、RELU、BN、downsample/upsample、全連線,相比於單個浮點數運算能快上幾百幾千倍.稀疏的網路結構對training/inference效率沒有明顯提高,反而會增加工程上的複雜度,也可能損失模型的精度。

也許有一天支援稀疏Tensor操作的計算機硬體成為現實,稀疏模型才會有更大的意義。

2樓:Dong Chen

1:網路引數壓縮,具體方法有:parameters的壓縮,filter-based壓縮

2:Dynamic DNN,網路不再是從頭到尾的執行,簡單的samples可以提前輸出網路,代表做BranchyNet, Dynamic DNN等。

3:最近出來的Binary DNN,eBNN也是個不錯的方向。

3樓:公尺牛牛

相當多的訊號都存在某個變換空間使其在其中是稀疏的(稱為可稀疏訊號)

人(和貓)只對可稀疏訊號感興趣?:):)

人(和貓)對於可稀疏訊號的處理方式也是可稀疏的

4樓:「已登出」

model compression 目前考慮能夠在現有框架上執行且不需要額外工程優化的方法我覺得有以下幾種

1.channel-wise pruning.

2.knowledge distilling.

3.group convolution.

5樓:

大腦的啟用非常稀疏那是針對大腦哪個級別的神經元數量的,現在的深度學習模型還遠達不到大腦那個規模,追求稀疏只是為了抵抗過擬合罷了,因為沒有乙個隱藏曾神經元數量選取的指導意見,設多了容易過擬合,設少了不收斂,只好先多設下再去norm或dropout。不要迷信稀疏。

6樓:何宜暉

[1707.06168] Channel Pruning for Accelerating Very Deep Neural Networks

By Yihui He, Xiangyu Zhang, Jian Sun, ICCV 2017

基於CNN每一層都是稀疏地假設,我們考慮是否能找到neuron之間的關係,僅留下最具有代表性地neuron?

分為兩步解決問題:

找出每一層具有代表性地neuron,我們利用lasso regression來進行類似model selection的過程。將剩餘的neuron去掉(pruning)。

利用剩下的代表性neuron來重構(reconstruction)這一層原本的輸出。

效果可以達到:

VGG-164倍加速, Top-5 accuracy 下降0.0Xception-50, 2倍加速, Top-5 accuracy 下降1.0Faster RCNN, 2倍加速mmAP 下降0.

0

在GitHub上公布了Code : yihui-he/channel-pruning

7樓:Sa1ka

在 DNN 方面已經有了很多模型壓縮的方法,但就如最高票答案所說,這些壓縮的方法並不關係模型的解釋性,而是單純的從模型的角度出發,試圖減少模型的參數量而不降低模型的效能。這些方法主要涉及到兩個方面:edge pruning 和 node pruning.

首先是Dong Yu等人的工作,他們發現在實際的 ASR(Automatic Speech Recognition) 系統中,DNN 的 weight 分布如下:

這張圖說明了,在乙個具有7個隱層的 DNN 中,基本上每層都有差不多50%的 weight 的絕對值是小於0.1的,那麼很容想到,這些 weight 對最後結果的影響相對來說是比較小的。Dong Yu等人的想法也非常簡單,首先訓練乙個完整的模型,然後刪去那些權重小的 weight ,最後再把壓縮過的模型再次進行 fine-tune,結果如下:

最後發現,即使壓縮模型的參數量只有原始模型的22%,依舊能有不錯的效能。

同時Jian Xue等人還採用了 SVD 的想法來進行 edge pruning。在DNN中,實際上每層都有乙個 weight matrix,而對 matrix 進行處理的乙個常用方法就是SVD,即:

也就是說對於 weight matrix,我們對其進行奇異值分解,然後只保留k個最大的奇異值。這種方法得到了不錯的結果:

除了 edge pruning 之外,Tianxing He 等人從 node 的角度出發,對 DNN 進行壓縮,其基本想法是這樣的:對於 DNN 隱層中的每個節點,我們採用如下的公式來衡量其重要性:

其中表示層數,表示節點的下標。這個公式的意義非常簡單,即對於某個隱層節點,我們計算其 output weight 絕對值之和,作為衡量其重要性的指標。然後刪去那些相對來說不重要的節點,最後再進行 fine-tune。

這個想法與 Dong Yu 非常類似,即如果乙個節點 output weight 都很小的話,那麼其對最終結果的影響也是很小的。作者得到的結果也很不錯:

值得注意的是,這種 node pruning 的方法還可以與之前提到過的 edge pruning 的方法結合使用,可以進一步對模型進行壓縮,結果如下:

實際上,現在模型引數怎麼設定,以及多少參數量才能達到我們需要的 capacity,都是我們所不知道的,因此在一般實驗中大家都是把模型引數往大了設定,這勢必會造成模型的冗餘。用這些prunning 的方法則能很好的幫助我們壓縮模型的大小,減少模型的冗餘。

參考文獻:

[1] Dong Yu, Frank Seide, Gang Li, and Li Deng, 「Exploiting

sparseness in deep neural networks for large vocabulary

speech recognition,」 in Proc. ICASSP, 2012.

[2] Jian Xue, Jinyu Li, and Yifan Gong, 「Restructuring of

deep neural network acoustic models with singular value

decomposition,」 in Proc. InterSpeech, 2013.

[3] Tianxing He, Yuchen Fan, Yanmin Qian, Tian Tan, Kai Yu, "Reshaping deep neural network for fast decoding by node-pruning," in Proc. ICASSP, 2014.

8樓:仁孟

個人看來,當前模型壓縮存在幾種思路:

1.通過網路結構上的優化,涉及某種比較緊湊的網路module,例如fire module、(Inception裡面的module也有這個意思)。

2. 通過矩陣運算的角度進行優化,例如quantilized(量化) CNN、Kronecker內積的方式優化等,這種在模型的加速上效果比較好。

3. prune的方式:通過一步步找出作用不太的neuron然後刪掉,prune->retrain等方式。

4. distilling的方式:類似teacher-student的網路結構,通過大模型來train小模型等。

一家之言

9樓:

其實這裡面有兩個問題,乙個是效果問題,乙個是效率問題。

所謂模型「大」,也有兩方面,乙個是模型複雜度,乙個是計算開銷。

目前神經網路計算上的主要部分是線性運算,已經是非常高效了,在保證模型複雜度的前提下,計算效率難再提公升。

像題主引用的文章,其實是利用先驗知識(在不傷害performance的前提下)減小了模型複雜度,從而減小了計算開銷。類似的方法並不少,比如fine tuning(利用底層特徵的先驗知識),比如max pooling(利用稀疏性)。

但是:

模型複雜度是低了,那麼多資料沒用上怎麼辦?堆引數啊!最後計算開銷沒減少,performance倒是上去了。

你看人家過擬合了不是減引數,而是加regularization term,加雜訊。大力出奇蹟,可是DL的基本哲學哦。

牙齒縫隙越來越大有遇到過的嗎

福芽口腔管家 按照描述,要先看看自身下排牙是否有缺失,如果有缺牙,那麼很有可能是因為牙齒缺失導致的鄰牙傾斜,牙縫會慢慢變大,這種情況,有可能是先需要矯正後種牙了。第二種情況就是自身有牙周炎,也是會造成牙齒鬆動牙間隙過大的。第三種則是自身牙齒發育的問題,如果不是缺牙的話,建議您還是去口腔醫院拍片看看 ...

為什麼現在的手機越來越大,越來越重,越來越厚了?

五行缺錢 而且各種新的功能,比如5g 高變焦倍數的相機等,都需要更大空間,而且它們會導致耗電增大,因此必須要用更大的電池,也會占用空間。 飛貓走壁 最主要的是電池技術沒有本質提公升,只能以增加容量 就意味著增加電池大小 的方法延長續航。電池大了,機身小了塞不進去。從根本上就拉高了手機重量的下線。如線...

為什麼現在勳興越來越大勢呢?

筱筱 如果了解張藝興的都知道張藝興是宇宙直男,連戴長頭髮的假髮妝扮都極度討厭的人,你卻相信在具有魔幻功能的剪刀手的剪輯,那也只是你的腦迴路異於常人。再就是看到所有exo綜藝節目和巡演的都知道吳世勳背吻過每乙個隊友,跟其他11個隊友尤其是八個寒鍋隊友的互動更親密,更甜寵。個人認為吳世勳這種行為可能是營...