當前位置:
首頁 > 知識 > 如何讓你的深度神經網路跑得更快

如何讓你的深度神經網路跑得更快

本文為 AI 研習社編譯的技術博客,原標題 :Making Deep Neural Networks Faster

翻譯 | 醬番梨、永恆如新的日常、灰灰在學習、康奈爾?斯摩

校對|醬番梨整理 | 菠蘿妹

https://medium.com/@datafineass/compressing-and-accelerating-high-dimensional-neural-networks-6b501983c0c8

由於內存和計算能力有限,隨著網路變得越來越深,對包括移動設備在內的有嚴格時延要求的有限資源平台而言,神經網路壓縮就成為一個關鍵問題。就降低性能和加快深度網路之間達到平衡,引發了很多研究。本文將作為能夠高效利用資源的深度網路的壓縮、加速的引言介紹。

在本篇博文中,在某種程度上會包含下面的主題。為了你更好地理解所描述到的方法,建議你最好瀏覽原文(見文末的參考文獻):

·剪枝和共享

·低秩分解

·緊湊卷積濾波器

·知識蒸餾


參數修剪和共享

剪枝:通過移除多餘的或不想要的部分從而減少某物的長度

簡單來說,剪枝就是移除對模型性能影響不大的參數。參數的冗餘和稀疏特性對模型性能的影響甚微,而剪枝正好利用了這一特性。對剪枝技術可以進一步劃分為三類:

量化和二進位化:量化就是將無限域的值轉化為有限域離散值的過程。假設我們有一張灰度圖像。量化(N級)就是將圖像中的每個像素點的顏色用N份權重來表示。而二進位化只會給出圖像的兩個灰度級別(灰或非灰)。

網路量化通過減少表示每個權重所需的比特數來壓縮原始網路。量化限制了可用於我們內核中的不同權重數目。對於N個比特位,可以表示2的N次方個權重。我們的目的是修改內核中的權重只能取2的N次方個值。因此,低於四個比特位參數量化雖然準確率沒有受到很大損失,但卻很難表示權重。

在測試過程中權重和激活受限於固定的精度

在訓練過程中權重和激活受限於固定的精度

觀察發現的好情況是,在訓練過程中量化對準確率影響並不顯著。可悲的是,量化就推理而言也沒有任何學習的餘地。

假設我們已經訓練了一個32比特位的網路,並打算將它的權重量化為4比特位用作見小規模的後期處理步驟。再向前傳遞過程中,所有的核心權重會得到量化。但是一旦權重被量化,就會返回平的或為零的梯度值,這意味著我們的沒有學習。為了在反向傳播中避免這一問題,我們使用了STE(Straight Through Estimator)。STE並未修改頂端節點的量化值。接著再次進行前向傳播和反向傳播。

還有一些設計8比特位、4比特位、2比特位以及1比特位的優秀文章。查閱參考文獻通過原文會進一步理解量化。

我很想談談二分神經網路,但是這裡已經囊括了許多篇優秀的文章。

修剪和共享:一個眾所周知的網路修剪和重量共享的的方法如下。

我們首先在網路中找中每層的標準差,以了解層的權重分布。

一旦我們知道分布的標準偏差,我們就通過閾值處理過程去除較低的權重。通過將層的標準偏差與修剪率相乘來獲得實用的閾值。不同層的修剪率來自於大量的實驗。

重新訓練修剪過的網路在權重到達最佳精度前將其移出。

在權重共享的階段,具有小差異的權重被代表值替換。這些代表值被稱為質心值,其根據層的重量分布而變化。線性距離計算後獲得的這些質心值將通過再訓練才能將其確定。

修剪過後

權重分享


低秩矩陣分解

低秩矩陣分解的主要思想為通過揭示數據中存在的潛結構,我們可以得到數據的壓縮表徵。LRMF將原始矩陣分解為低階矩陣,同時保留了潛在結構,解決了稀疏性問題。

在深度網路CNN中,卷積層通常有著非常密集的計算。因此,通過減少卷積運算的數量,可以壓縮網路,增加整體加速。

LRMF的工作原理是假設存在某個張量高度冗餘的4維的卷積核,我們可以通過分解來減少冗餘,因此全連接層可以被看作為2-D張量。

LRMF方法已經存在相當長的一段時間了,但是由於張量的分解通常是一個計算量很大的任務,因此它們具有嚴重的局限性。另外,非常重要的一點是對於具有不同信息的不同層,LRMF中的現有技術方法是通過逐層低秩近似,該方法無法進行全局參數壓縮。


緊湊型卷積濾波器

使用緊湊卷積濾波器可以直接降低相關的計算成本。這種壓縮方法可以在保持相當精度的同時實現整體加速,關鍵是利用用緊湊型濾波器代替過參型濾波器。你可能聽起來有點難以理解?可能你需要看一下下面的例子。

Squeezenet以小於50分之一的參數和不到0.5 MB的模型大小實現了和Alexnet相同級別的性能。就這麼說吧,它比Alexnet要至少小了510倍。那麼他們究竟用了什麼方法呢?他們引入了「消防模塊」作為CNN架構的構建模塊。Squeezenet的設計策略大致可分為3個部分。

1、用1x1過濾器替換3x3過濾器。

2、減少3x3濾波器的輸入通道數量。

3、在神經網路的後期降低採樣採樣,以便使卷積層可以進行大的激活映射。由於輸出層具有小的激活映射,因此對神經網路過早的降低採樣(通過使步長>1)將會導致一些信息的丟失。由於延遲降低採樣,網路中的大多數層將具有更大的激活映射,這有助於提高的任務準確性,也同時保持了其他的所有層相等。

「消防模塊」就像下圖所示:

但我們只擔心如何將3x3濾波器和輸入通道分解成更小的卷積,從而形成一個更緊湊的網路,這在不但性能相同,而且速度也快的多,更重要的是內存比較便宜。


知識蒸餾

想像一下,將Kaggle或Imagenet的大型模型集合縮小為更小的模型,並且這些模型在運行時同樣出色。來自谷歌研究團隊的Hinton教授和Jeff Dean最近恰正在解決這個問題。一個類似的類比可以在教室中找到,教師就像是一個非常繁瑣的模型,需要經過嚴格訓練以達到標準,而學生則是較小的神經網路,從老師那裡獲得知識。本文旨在將知識從大型神經網路中提取或轉移到一個小得多的神經網路中,該網路直接從輸出的繁瑣的模型中學習,但是部署起來卻很輕鬆。為什麼會有這麼好的效果呢?當你使用繁瑣的模型進行相同的訓練,你不必擔心過度擬合之類的事情,因為笨重的模型已經處理過了。這種方法運作良好的另一個原因是因為這種神經網路訓練的是用「軟」概率來訓練繁瑣模型的,而不是進行「硬」方法來訓練目標的。例如,就像下圖那樣:

在這張有著建築物做背景的汽車圖片

當使用繁瑣的模型進行「硬」目標訓練就像這樣:

汽車 - 1;人類 - 0;建築 - 0;樹 - 0;

另一方面,蒸餾模型是在「軟」概率中進行運算如下:

車 - 約0.96;人 - 約0.00001;建築物 - 約0.03;樹木 - 約0.000002;

與笨重的模型相比,蒸餾模型顯然有更多的「信息」需要學習。但它可能仍然無法學習建築物的空間屬性,因為只有0.03可能性可以從中學習,並且沒有過多的增大梯度。

本文提出的解決該問題的一種解決方案是將輸入softmax的輸入(輸出概率的輸入)除以此處稱為「溫度」的數字。假設輸入softmax的輸入為[2,-2,-14,-10],除以溫度(假設為5),進入softmax的新項為[0.4,-0.4,-2.8,-2]]。這將以一種方式改變繁瑣模型的「軟」輸出概率,使得蒸餾模型更容易得知存在建築物。在softmax之後,軟概率看起來就像這樣:

車 - 約0.67;人 - 約0.04;建築物 - 約0.24;樹木 - 約0.05;(假設)

然而,這些概率將在預測時影響蒸餾模型。因此,重要的是在預測期間將softmax輸入恢復到其初始狀態,方法是將它們與「溫度」相乘。

這裡的溫度過參數可以隨用戶的習慣而改變。原始論文建議在大多數情況下用5作為初始溫度。降低溫度會將softmax輸入推向其原始值(我們不會了識別築物),而增加溫度值會為我們的梯度增加更多干擾,因為softmax將為幾乎所有類別輸出更高的概率。

參考文獻:

Distilling the Knowledge in a Neural Network (https://arxiv.org/abs/1503.02531)

SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and

Notes on Low-rank Matrix Factorization (https://arxiv.org/abs/1507.00333)

Minimum Energy Quantized Neural Networks (https://arxiv.org/abs/1711.00215)

Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1 (https://arxiv.org/abs/1602.02830)

A Survey of Model Compression and Acceleration for Deep Neural Networks (https://arxiv.org/abs/1710.09282)

Pruning Convolutional Neural Networks for Resource Efficient Inference (https://arxiv.org/abs/1611.06440)

Quantized Neural Networks: Training Neural Networks with Low Precision Weights and Activations (https://arxiv.org/abs/1609.07061)

Universal Deep Neural Network Compression (https://arxiv.org/abs/1802.02271)

想要繼續查看該篇文章更多代碼、鏈接和參考文獻?

戳鏈接:

http://www.gair.link/page/TextTranslation/1095


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

用神經網路打造專屬於你的豆瓣電影推薦系統
AI 初學者必須要了解的術語盤點

TAG:AI研習社 |