萬字綜述:用於深度神經網絡加速的Shift操作

2022-01-01 極市平臺

收錄於話題 #模型壓縮 7個

如何同時滿足減少可學習參數的數量以及維持computation/memory access比值?你需要Shift操作。本文將詳細介紹shift操作的具體方法、如何剪掉冗餘的Shift操作、3種用於深度神經網絡加速的Shift操作、如何利用bit-wise的Shift操作避免乘法運算以及如何將Shift的思想應用到加法網絡中。 >>年度盤點:極市計算機視覺資源匯總,頂會論文、技術視頻、數據集等(限時開放下載)

在之前的文章中,我們詳細介紹了模型壓縮中的Slimming操作以及高效模型設計的自動機器學習流水線,本文將非常全面的介紹模型壓縮的另一種操作:Shift。

目錄詳細講解3種用於深度神經網絡加速的Shift操作。再進一步的bit-wise的Shift操作, 走向無乘法的神經網絡講解如何利用bit-wise的Shift操作避免乘法運算。"移位"Shift操作與加法網絡結合,打造適用於邊緣設備的ShiftAddNet1 我們為什麼需要Shift操作?端側設備(手機,各種可穿戴設備,自動駕駛,智慧機器人等)的功率較低,內存受限。而且,內存之間的通信和計算量也對CNN的功耗有很大的影響。除此之外,如果設備需要和雲通信的話(模型更新等),模型的大小也會極大地影響成本。所以,對於端側設備和物聯網設備的推理過程(Inference)來講,模型的優化,尺寸的縮減,速度的提升和功耗的節約是研究的重點。CNN主要依賴卷積 (Spatial Convolution) 來聚合圖像中的空間信息。在神經網絡中,卷積核是卷積操作最核心的部分,它也叫濾波器,接收這一層的輸入Input,計算出這一層的輸出Output。卷積網絡計算密集,且模型變大的原因是卷積核引入了高強度的計算量,且使模型參數量急劇上升。在這樣的背景下,研究者們設法減少卷積核的大小,進而減少模型的計算量和參數量。其中比較著名的是Depthwise Seperable Convolution,即深度可分離卷積。如下圖所示,圖中對比了深度可分離卷積和常規卷積操作的不同:假設輸入張量 卷積核 輸出張量 

所以,常規卷積的computation/memory access

這裡需要著重強調的是computation/memory access,這個值反映了模型計算量與內存大小的比值,比值越大,代表我們把更多的資源傾向於計算,而不是內存訪問上;比值越小,則代表我們把更多的資源傾向於內存的訪問 (memory access),而這個過程相比計算要耗費更多的能量和更多的時間,使模型延遲 (Latency)上升嚴重。 這個缺點意味著I/O密集型設備 (I/O-bound device)無法實現最大的計算效率。註:關於I/O密集型設備 (I/O-bound device)計算密集型設備 (CPU-bound device):意思是計算機在處理某個任務的時候,主要時間花在什麼地方,就是被什麼所「束縛」。比如主要時間消耗在CPU計算上,也就是說處理該任務大部分時間都在等待CPU的計算而不是等待讀寫(硬碟/內存)數據,那麼就是CPU-bound,稱之為CPU密集型。反過來如果主要時間消耗在等待讀寫數據而CPU利用率很低,那麼該任務就是I/O-bound,I/O密集型。CPU bound的程序一般而言CPU佔用率相當高。這可能是因為任務本身不太需要訪問I/O設備,也可能是因為程序是多線程實現因此屏蔽掉了等待I/O的時間。
I/O bound 指的是系統的CPU效能相對硬碟/內存的效能要好很多,此時,系統運作,大部分的狀況是 CPU 在等 I/O (硬碟/內存) 的讀/寫,此時 CPU Loading 不高。根據以上的注釋,我們希望computation/memory access這個值儘量大,以更有效率地利用我們的硬體資源。式中, 

Depthwise Convolution的計算量: 

Depthwise Convolution卷積核的參數量:

所以,Depthwise Convolution的computation vs. memory access

Depthwise Convolution的計算量/內存佔用的比值相比於常規卷積小很多,這意味著Depthwise Convolution將更多的時間花費在內存訪問上,這比浮點運算慢好幾個數量級,並且更消耗能量。這個缺點意味著I/O密集型設備將無法實現最大的計算效率,使之不容易在硬體設備上實現。問:為什麼更輕量化的深度可分離卷積反而不利於實現最大的計算效率?答:因為其內部的Depthwise Convolution的computation/memory access這個比值太低了,換句話說,同樣的參數,沒有帶來同比的計算量。減少可學習參數 (learnable parameters)的數量。維持computation/memory access這個比值不變小Shift操作因此誕生。它的最大特點是:requires zero FLOPs and zero parameters。這個特點能夠同時滿足上面的2個要求。這樣,Shift操作維持了computation/memory access這個比值,從而能夠很容易地在硬體設備上實現。同時,Shift操作與其他的模型壓縮方法是正交 (orthogonal)的,即Shift操作可以與其他的壓縮方法聯合使用。A和B是正交 (orthogonal)的意思是:使用A方法,不妨礙B方法的使用,換句話說,A和B可以同時使用。2 如何進行Shift操作?原文連結:CVPR2018:Shift: A Zero FLOP, Zero Parameter Alternative to Spatial ConvolutionsShift操作可以看做是Depthwise Convolution的一種特殊情況,表達式為:式中,shift operation的卷積核 channel中的卷積核 只有一個是1,其他都是0。這裡的 通道域是空間域信息的層次化擴散。因此通過設置不同方向的shift卷積核,可以將輸入張量不同通道進行平移,隨後配合1x1卷積實現跨通道的信息融合,即可實現空間域和通道域的信息提取。圖3:shift卷積相當於將原輸入矩陣在某個方向進行平移
一個卷積核在每一個channel上面有 可能的shift選擇。顯然,在這樣的空間裡暴力搜索出最適合的shift選擇是不現實的。所以作者使用了近似的手段,即:把這 平移組(shift group)。那麼每組的 那麼下面的問題是:如何把每個channel正確地劃分到對應的組裡面?圖4:如何把每個channel正確地劃分到對應的組裡面?雖然通過這種手段大大縮小了搜索空間,但是仍然需要讓模型學出如何將第答:可以的。只需要在頭和尾加上 1x1卷積操作,我們有式子(2.4):這一點不難理解,即便對1x1卷積的輸入進行通道排序重組,在學習過程中,通過算法去調整排序 1x1 conv -> shift kernel -> 1x1 conv的結構。所有的pointwise convolution前面都會加上BN和ReLU激活函數。與此同時,為了形成殘差結構,模塊還添加了Identity塊,如果輸入輸出的shape是一樣的,就直接使用殘差即可;如果輸入輸出的shape是不一樣的,就結合downsampling。藍色虛線塊的Shift塊是實驗補充的一個設計,存在虛線部分的shift塊的設計稱之為原文連結:CVPR 2019:All you need is a few shifts: Designing efficient convolutional neural networks for image classification我們把CPU稱為compute-bound computation platforms,對於這類設備來說,算力是它們的瓶頸。而GPU稱為memory-bound computation platforms,對於這類設備來說,內存數據的移動等是它們的瓶頸。然後分別測試以下Shift操作Depth-wise convolution在這兩類設備上的運行時間(Runtime)的佔比:結果如下圖11所示。圖(a)和(b)展示了在ShiftNet(上一小節講的模型)中,Shift操作分別在在這兩類設備上的運行時間(Runtime)的佔比,我們發現,Shift操作在CPU上佔3.6%的運行時間,但在GPU上佔28.1%,這表明由於memory movement,Shift操作在memory-bound computation platforms上仍然佔據相當大的運行時間。圖(c), (d)展示了在ShiftNet中,我們僅用深度可分卷積Depthwise separable convolution代替Shift操作來測試其推理時間,得到此時的Depthwise convolution在GPU上的運行時間(Runtime)的佔比。其中,圖(c)為使用5×5卷積核的佔比,Depthwise separable convolution佔了運行時間的79.2%;圖(d)為使用3×3卷積核的佔比,Depthwise separable convolution佔了運行時間的62.1%。通過以上的對比即可體現出Shift操作的優越性,即:對於memory-bound的設備來說,某種操作佔用越小份額的運行時間,代表memory movement所需要的時間越短,即這種操作更有利於在memory-bound的設備中實現。圖11:Shift操作和Depth-wise convolution在這兩類設備上的運行時間(Runtime)的佔比儘管Shift操作在實際運行時間上優於Depthwise separable convolution,但它的實現仍然存在瓶頸,即上文所述memory movement。這裡自然就來了一個問題:如果消除無意義的Shift操作,那些memory movement可以減少。這也就是本文的motivation。為了抑制冗餘移位操作,作者在優化過程中增加了懲罰。結果發現,一定數目的Shift操作實際上足以提供空間信息通信。作者將這種類型的移位層稱為稀疏移位層(Sparse Shift Layer , SSR),如圖11(e)所示,它可以顯著減少Shift操作的佔用時間。具體是怎麼做的呢?我們先統一下Shift操作的表達:其中, 角標 為了使得移位數 , 也有研究者將位移從整數放寬到實數值,並將移位操作放寬到雙線性插值,以使其可微,前向傳播的表達式如下所示(圖12(b)):即對於輸出的每一個channel上的每個點 移位數  是可學習的參數時,損失對移位參數的偏導數為:式中 計算塊(FE-Block)最後一個計算單元,我們使用圖14(a)來改變下一個計算塊的信道號,或者使用圖14(c)來進行空間下採樣。模型:ResNet-20/56,ShiftResNet(GroupedShift)-20/56(上一小節的模型),ShiftResNet(SSL)-20/56。圖15:The analysis of SSL on CIFAR10 and CIFAR100Grouped Shift vs. Sparse Shift:通過Shift操作,網絡可以根據不同的任務和不同的數據集自適應地調整移位操作的位移和方向。通過偏移懲罰,它可以消除大部分偏移操作,同時保持網絡的精度與原始網絡相當。即使偏移操作的稀疏度超過90%,該網絡仍能保持相當好的性能,這表明只有少量的偏移操作在傳遞圖像分類的空間信息方面起著至關重要的作用。當稀疏度達到100%時,即不再使用Shift操作而只有1×1 convolution時,性能會有明顯下降,這也證明了Shift操作的重要性。Deep Networks vs. Shallow Networks:當網絡由20層變為56層時,Shift操作的冗餘度增加了,說明增加深度會給移位層帶來更多冗餘。當 SE 模塊 (Squeeze-and-Excitation)操作融合進圖14的FE-Block基本運算單元中,產生了2種新的FE-Block基本運算單元,如圖19所示。結果發現,將SE模塊放置在 inverted bottleneck部分更為合理。表中的結果從經驗上驗證了這個想法。此外,我們注意到,在裝備SE模塊後,Shift操作的稀疏度增加了很多,這可以從另一個角度反映SE模塊帶來的 channel attention 的作用。4 給深度神經網絡加速的Shift操作原文連結:WACV 2019:AddressNet: Shift-based Primitives for Efficient Convolutional Neural Networks本文作者提出了3種基於Shift的操作:channel shift, address shift, shortcut shift來減少GPU上的推理時間,這些操作避免了內存複製(memory copy),所以很快。比如,channel shift的速度要比channel shuffle的速度快12.7倍,但能得到相同的精度。一個神經網絡,擁有較小的參數量 (params.)或計算量 (FLOPs)並不總是導致直接的神經網絡推理時間 (inference time)的減少,因為這些最先進的緊湊架構 (compact architecture)引入的許多核心操作不能有效地在基於GPU的機器上實現。我們舉個例子,如下圖20所示:
在MobileNet網絡中,深度可分離卷積(depthwise separable convolutions)只佔了總計算量的3%和總參數量的1%,但是佔了總的推理時間的20%。
在ShuffleNet網絡中,Channel shuffle 與 shortcut connections操作不佔任何參數量和計算量,但是,推理時間卻佔了總的推理時間的30%。
在上文所講到的ShiftNet網絡中,特徵圖的 shift操作依舊是parameter-free 和 FLOP-free,但是,推理時間卻佔了總的推理時間的25%。雖然MobileNet和ShuffleNet的FLOPs大致相同,但後者需要多兩倍的推理時間。圖20:不同操作和模型中計算量、參數數量和推理時間的比較所以根據上面的現象作者得到結論:無論是減少參數量或者是計算量都不能確保減少推理時間。這也就是本文Motivation的來源,即:有哪些操作能夠既減少參數和計算量,使模型達到壓縮的效果,又減少推理時間,使模型達到加速的效果呢?答:作者為GPU-based machine設計了3種Shift primitive的操作,如下圖21所示:圖21:用於高效神經網絡架構設計的三種高效Shift primitive(a)表示Channel Shift:用來替代Channel Shuffle的操作。圖22:具有2層卷積的Channel Shuffle和Channel Shift操作Channel Shuffle非常耗時,因為它需要將特徵映射移動到另一個存儲空間。請注意,與浮點運算相比,移動數據在延遲和能耗方面要昂貴得多。相比之下,移動指針或加載數據的物理地址是free的。因此,作者提出Channel Shift Primitive來利用指針移位和最小化實際數據移動來減少時間和能量。Channel Shift 層,通道沿預定義的方向循環移位,該過程最多花費兩個單位的時間來複製數據,因此memory movement比Channel Shuffle少8倍。(b)表示Address Shift:有效收集空間信息而不消耗實際的推理時間。Address Shift是把卷積核沿著4種不同的方向移位,以右移為例:黑色箭頭指向feature map的初始地址,右移操作是指把這個地址移動一位,使它指向前面的A, 然後從地址開始在內存空間中連續取張量,相當於將整個張量右移一格。類似地,我們可以定義其他三種不同的移位操作(left,up和down)。圖23:實現4個方向的地址移位,其中A代表相鄰要素圖的值,黑色箭頭表示指向feature map 的 pointer式中, 左上移位方向也可以分解為左移位+上移位的形式。隨著信道數量的增加,配備地址移位操作的CNNs可以融合來自各個方向的所有信息。因此,我們可以只使用四個基本的移動方向來表示其他方向,以簡化網絡架構。(c)表示Shortcut Shift:通過預先分配連續的存儲空間來提供快速的channel concatenation以實現殘差,但是不消耗推理時間。作者通過預先分配一個固定大小的空間,將當前層的輸出放在上一層的輸出之後。換句話說,可以使兩層的輸出位於預先分配的連續存儲空間中,這樣就不會在channel concatenation上花費複製或計算時間。這些操作只需要在內存空間中移動指針來實現, 以最小化實際內存移動(memory copy),完全避免浮點運算,從而能夠實現推理加速。圖25:Address-based模塊 and Address-enhanced模塊如圖25(a)所示為Address-based模塊,首先通過pointwise group convolution layer,然後通過Channel Shift層融合channel之間的信息。再然後是address shift層融合spatial information,並將channel分為3組,對每一組的數據使用4種基本移位操作裡的一種。最後再通過pointwise group convolution layer來匹配channel數以及融合信息。如果特徵的大小是不變的,就再使用 additive residual connection,否則就使用average pooling + concatenation。如圖25(b)所示為Address-enhanced模塊,它進一步把Address Shift和Channel Shift融入第2個pointwise group convolution layer,並把channel分為4組,每一組分別使用一種方向的Address Shift操作,分別是Left,Up,Right,Down。Channel shift vs. Channel shuffle:以上二者都可以融合網絡不同的通道之間的信息,二者的性能的對比如圖26所示。圖26:Channel shift vs. Channel shuffle上圖為2者在相同的參數量(Params.)和計算量(FLOPs)下的性能對比,Total Time指的是模型的平均運行時間,Operation Time指的是這個操作的平均運行時間。兩種模型達到了相同的精度,但是Channel shuffle在兩個指標上的提速分別達到了1.4倍和12.7倍,顯示出這種操作的優越性。Address Shift vs. Feature map Shift:基於上面的分析,4種基本的移位操作(Left,Up,Right,Down)可以替代原本的 bit-wise,即按位進行。簡而言之就是:維持Shift操作的思想,只是把它按位進行。這個工作的思想其實是來自數字電路中乘法器的實現原理:比如說有一個整數10,我們把它用8位二進位表示為:00001010。對它做乘法時,比如乘以4,其實可以不直接相乘,而是把它按位左移2位:即:00001010→00101000。這樣一來,移位實現的乘除法比直接乘除的效率高很多。用移位實現乘除法運算:
a=a×16;
b=b÷16;
可以改為:
a=a<<4;
b=b>>4;
說明:
除2 = 右移1位 乘2 = 左移1位
除4 = 右移2位 乘4 = 左移2位
除8 = 右移3位 乘8 = 左移3位通常如果需要乘以或除以2的n次方,都可以用移位的方法代替。大部分的C編譯器,用移位的方法得到代碼比調用乘除法子程序生成的代碼效率高。實際上,只要是乘以或除以一個整數,均可以用移位的方法得到結果,如:答:我們總結了這樣一個結論,即:原數任意乘以一個數其實可以通過原數的移位操作加法操作來實現,而不需要直接相乘。且用移位的方法比調用乘除法子程序的計算量低很多。上面這句話就是這個工作的核心思想,現在我們把它推廣到神經網絡裡面,看看能為我們優化網絡,減少運算帶來哪些有益的啟發。我們定義一個移位矩陣Shift matrix 定點數(fixed-point):
定點數(fixed-point number)就是小數點位置固定的數,也就是說,小數點後面的位數是固定的,比如要記錄一筆帳目,這些帳目的數字都不會超過100,就可以使用2位小數位定點數來記錄,比如99.99,2.30,75.28;如果要更精確,可以使用3位小數位的定點數來記錄,比如7.668,38.235。存儲方式:
第1種方式是對每一個十進位數進行BCD編碼(BCD碼(Binary-Coded Decimal‎),用4位二進位數來表示1位十進位數中的0~9這10個數碼,是一種二進位的數字編碼形式,用二進位編碼的十進位代碼),然後加上一個額外的符號位,0表示正數,1表示負數。由於需要使用整數個字節數來存儲定點數,所以依據不同情形,符號位可能使用4bit編碼,也可能使用8bit編碼。如果用4bit編碼符號位,加上數值位的bit數剛好是整數字節,那麼就用4bit編碼編碼符號位,否則就用8bit編碼符號位。比如,對-9.99編碼,由於使用BCD編碼9.99需要1.5位元組,那麼使用4bit編碼符號位剛好就可以湊成2位元組,編碼結果如下:0001 1001 1001 1001;如果對-99.99編碼,由於使用BCD編碼99.99剛好是2位元組,那麼對符號位就使用8bit編碼,編碼結果如下:0000 0001 1001 1001 1001 1001(藍色部分表示符號位編碼,紅色部分表示數值位編碼)。第2種方式是有一個定點小數的規範。假設機器字長8 bits,我們規定從左至右,第一位為符號位,接著後5位表示定點小數的整數部分,後兩位表示定點小數的小數部分。那麼26.5的實際存儲形式為01101010。這種情況是可以進行移位的操作的。注意對定點數的編碼,不需要對小數點位置進行編碼,因為小數點位置是固定的(對同一定點數表示方式來說)。優缺點:
定點數的優點就是可以精確表示想要表示的數值,不會像浮點數一樣計算機內部無法精確的表示一些數值,比如要表示[0,100)之間的任何兩位小數,定點數都能精確表示;
定點數的缺點就是不適用於表示特別大或者特別小的數值,比如要表示[0.00000000026,490000000000)之間的任何11位小數,那麼就需要使用的字節高達12個(算上符號位)。在神經網絡中,要成的權重也可能為負值,所以再定義取負操作 乘法運算的過程用下式來表示:那麼,我們通過上述簡單的變換就把神經網絡的乘法操作轉換為了移位操作和加法操作。把訓練神經網絡的權重的問題轉化為了訓練移位矩陣Shift matrix和符號矩陣Shift matrix的問題。如下圖29所示:圖29:神經網絡的乘法操作轉換為了移位操作和加法操作問:如何訓練移位矩陣Shift matrix和符號矩陣Shift matrix呢?答:DeepShift-Q 和DeepShift-PS方法。假設現在有權重 LinearShift operator式中, 最接近的2的次冪 (4.5式),再把卷積和全連接的乘法變為移位相加,並使用Deepshift-Q or DeepShift-PS進行訓練。圖中的Simple FC:一個簡單的全連接模型,由3個線性層組成,特徵輸出大小分別為512、512和10。在層間插入了概率為0.2的Dropout層。所有中間層隨後都有一個ReLU激活。
圖中的Simple CNN: 由兩個卷積層和兩個線性層組成的模型。兩個卷積層的輸出通道大小分別為20和50,kernel size大小均為5×5,步長為1。在每個卷積層之後插入窗口大小為2x2的max-pool層,然後進行ReLU激活。線性層的輸出特徵尺寸分別為500和10。圖34:在ImageNet數據集的結果(只列舉了部分)6 "移位"Shift操作與加法網絡結合,打造適用於邊緣設備的ShiftAddNet原文連結:NeurIPS 2020:ShiftAddNet: A Hardware-Inspired Deep Network
加法網絡原文連結:CVPR 2020:AdderNet: Do We Really Need Multiplications in Deep Learning?關於加法網絡的詳細介紹和原理推導,請參考這篇博客:解讀模型壓縮1:輕量化模型設計新思路:加法神經網絡的故事https://zhuanlan.zhihu.com/p/262260391加法網絡的作者研究卷積神經網絡中用加法代替乘法的可行性。一般的卷積計算的過程是:假設我們的卷積核 CNN中的卷積運算是計算特徵和卷積核之間的互相關性。而這個互相關性可以理解為一種距離的度量。因此,卷積運算也可以看成是距離度量的一種方式。所以,在我們計算卷積的時候,可以理解為我們在度量特徵 距離度量的方式有很多種。大部分的度量函數都包含乘法,因此帶來了大量的計算代價。比如說:當使用互相關作為距離度量時,我們有有沒有那麼一種距離度量的方式,可以避開乘法運算?談到距離的度量,你一開始想到的應該是幾個範數: 卷積核特徵之間的相似性。因此,我們可以只使用加法來提取神經網絡中的特徵,並構建加法神經網絡。但是傳統的卷積神經網絡的輸出有正有負,可是按照上2式計算,輸出全是負值怎麼辦?藉助batch normalization,把輸出歸一化到一定的範圍,並正常在後面使用激活函數。儘管batch normalization涉及乘法運算,但是乘法運算量相比於常規卷積微乎其微。為什麼微乎其微?這裡作者給出了量化的對比:比如卷積核的尺寸是: 
卷積層的計算複雜度是: 
BN層的計算複雜度是: 
假設 那反向傳播的方法能不能和常規卷積操作進行類比?這一眼就能看出有問題,符號函數的輸出結果只有 輸出特徵 對於輸入特徵 的偏導數計算出的結果的量級可能大於1,當網絡很深時,反向傳播會導致梯度爆炸。所以,在對輸入特徵X求偏導數時,我們對其進行截斷:其中 乘法可以通過加法和邏輯位移位來執行,其硬體實現非常簡單且更快,而不會損害結果質量或精度。此外,在目前可用的處理器上,位移位指令比乘法指令更快,可用於乘法和除法的。 用一系列的移位和加法 (或減法)來實現常數的乘法 (或除法)。上述的「捷徑」節省了算術運算,並且可以很容易地應用於加速任何涉及乘法(標量、矢量或矩陣)的機器學習算法的硬體實現。僅僅使用Shift操作或者加法網絡性能均不如原始的DNN,但將二者結合在一起可以提高網絡的性能和表達能力,同時保持硬體效率的優勢。Shift操作屬於粗粒度操作,而加法網絡屬於細粒度的操作,二者的結合甚至有可能產生新的模型,在任務精度方面與基於乘法的DNN相當,同時提供更高的硬體效率。因此,以上也就是作者的Motivation,即把Shift操作加法網絡的思想相結合。首先我們比較一下在ASIC和FPGA上面,不同的數據格式 (Format)的不同操作 (Operation):乘法,加法和Shift操作能耗 (pJ):圖35:在ASIC和FPGA上面:乘法,加法和Shift操作的能耗 (pJ)我們發現,各種數據格式與它們相應的乘法相比,加法操作和Shift操作可以非常有效,大幅降低能耗。當分別在45nm CMOS和FPGA中實現時,Shift操作可以比它們的乘法電路節省高達196倍24倍能量成本。此外,對於16 bit的設計,據估計乘法器的平均功率和電路面積至少分別是Shift操作的9.7倍1.45倍。儘管Shift操作的硬體效率很高,但就表達效率(expressive efficiency)而言,Shift操作構建的網絡與基於乘法的網絡相比是不利的。關於表達效率(expressive efficiency),作者是這樣定義的:從形式上來說,如果B實現的任何功能都可以被A複製,但是存在A實現的功能,除非B的規模顯著變大,否則B無法實現。那麼架構A的表達效率要高於架構B。
例如,人們普遍認為,與淺層網絡(shallow network)相比,Deep network具有更高的表達效率,因為淺層網絡必須指數增長才能逼近多項式大小的DNN所表示的函數。為了便於討論,作者定義表達能力(expressive capacity)為:表達能力是指在相同或相似的硬體成本下網絡達到的精度,即如果網絡A以相同或甚至更少的浮點運算(或能量成本)為代價達到更高的精度,則認為網絡A比網絡B具有更好的表達能力。作者觀察到Shift操作在表達能力上不如加法網絡和乘法。總之,Shift操作的特點是硬體效率高,表達能力弱。加法可以對於 fixed-point 的數據可以比乘法節省高達196倍和31倍的能量成本,當分別在45nm CMOS和FPGA中實現時,可以比浮點格式的數據節省47倍和4.1倍的能量成本。目前並沒有相關的工作研究加法網絡的表達能力或者表達效率, 作者通過在各種setting下的實驗表明,基於加法的網絡通常比基於Shift操作的網絡具有更好的表達能力。在ResNet18和ImageNet數據集上,在計算量相當甚至更少的情況下, Addernes的精度比DeepShift高1.37%。而且,在DNN中,學習到的特徵細粒度的多樣性是另一個對所達到的精度很重要的因素。從這個角度來講,Shift操作屬於粗粒度操作,而加法網絡屬於細粒度的操作。以上我們在硬體層面和算法層面這2個方面對比了Shift操作和加法網絡。下面是把二者結合起來:為了更好地驗證作者的上述假設(1),即,將兩個weak players (Shift操作和加法網絡)集成為一個,與僅具有兩個weak players 之一的網絡相比,可以得到具有更高的任務準確性和硬體效率,我們採用基於SOTA的Shift操作和加法網絡來實現 shift and add layers:式中, 在反向傳播過程中,ShiftAddNet採用了SOTA的Shift操作和加法網絡的反向傳播設計。 簡單來說,Shift操作的反向傳播參考本文 (5.17) 式,加法網絡部分的反向傳播參考本文 (6.12) 式。為了查閱的方便,這裡再敘述一遍:(6.1) 加法網絡部分的前向傳播(依據(6.5)式)式中, (6.2) 加法網絡的反向傳播為(依據(6.12)式)在反向傳播時我們需要求輸出對輸入,輸出對權值的偏導數,分別如下(6.16)和(6.17)式所示:這裡我們需要將梯度截斷到-1到+1,如式(6.17)所示。如果不對X進行截斷,多層的反向傳播會使得改進梯度的量級和真實梯度的量級有著很大的累計誤差,導致梯度爆炸。ShiftAddNet的加法層的stride始終為1,Shift層的stride可以取與對應的原始卷積網絡一致。以上3式(6.15-6.17)為ShiftAddNet加法網絡部分的更新方法,嚴格按照了 (6.3) Shift部分的前向傳播(依據(5.7)式)(6.4) Shift部分的反向傳播(依據(5.17)式)加法網絡的輸入Shift操作的輸出,即: 模型和數據集: 作者分別在2種模型和6種數據集上進行了實驗,數據集為:CIFAR-10/100,MHEALTH, FlatCam Face, USCHAD, Head-pose detection。模型為:ResNet-20和VGG-19 small。評價指標: 為了評估硬體效率,作者使用了為SOTA FPGA (ZYNQ-7 ZC706)來評估DNN的能量消耗。Baseline有3個: AdderNet[1],DeepShift[5],ConvNet(The lottery ticket hypothesis: Finding sparse, trainable neural networks論文所提出的網絡)。ShiftAddNet的前向傳播過程(weights and activations)使用FIX32(32位定點數)格式的數據,反向傳播過程(error and gradient)使用FIX8(8位定點數)格式的數據。以上實驗的結果如下圖37所示:ShiftAddNet無論是在能耗方面還是在精度方面都超過了單純的Shift操作或者加法網絡。全精度的ShiftAddNet甚至是超過了基於乘法的ConvNet。我們可以發現量化為FP-8的ShiftAddNet的精度相比於FP-32的AdderNet的變化為-1.79%-0.18%,但是節約了65.1%-75.0%的能耗;量化為FP-8的ShiftAddNet的精度相比於DeepShift的變化為2.41%-16.1%,而且節約了34.1%-70.9%的能耗。作者同樣對比了在相同的量化精度下(FIX32/16/8)ShiftAddNet的精度和能耗都優於DeepShift和AdderNet。如下圖38所示為ShiftAddNet與DeepShift和AdderNet的訓練曲線,根據結果可以得出結論:ShiftAddNet以更少的時期和能量成本實現了相當或更高的精度,這表明它具有更好的泛化能力。圖38:ShiftAddNet與DeepShift和AdderNet的訓練曲線作者也嘗試了把Shift layer的參數固定住,只去更新加法網絡的參數,得到的結果如下圖39所示:圖39:通過在CIFAR-10/100和兩個IoT數據集上使用ResNet-20和VGG 19模型,在AdderNet(僅加法操作)、DeepShift(僅移位操作)和基於乘法的ConvNet上測試固定住Shift layer的參數的ShiftAddNet的準確性與能耗成本的關係。總體而言,與AdderNet(具有浮點或定點精度)和DeepShift相比,ShiftAddNet可以實現高達90.0%和82.8%的節能,同時實現更高的精度(-3.74%-31.2%和3.5%-23.6%)。更有趣的是,把Shift權重固定的ShiftAddNet具有更少的能源消耗,同時對量化的更好的魯棒性(FIX-8格式的數據取得了10.8%的精度提升)。作者也對ShiftAddNet中的Shift層進行剪枝,對比不同的剪枝率下的ShiftAddNet的性能,如下圖40所示。當剪枝率達到100%時,ShiftAddNet退化為AdderNet。我們可以發現,即使在Shift層被大幅刪減的情況下,ShiftAddNet仍能保持其快速收斂的優勢。圖40:ResNet-20 網絡, CIFAR-10數據集,不同剪枝率下ShiftAddNet的收斂曲線。最後一個對照試驗作者對比了對加法網絡層進行剪枝後的性能維持情況,如下圖41右側所示,使用ResNet-20作為主幹。當加法網絡層的剪枝率由30%→50%→70%→90%時,原AdderNet的性能出現大幅下降,即使稍微修剪AdderNet也會導致精度下降。圖41左側為第11個add layer中的權重分布。為了更好地可視化,直方圖中僅顯示非零權重。圖41:左:在ResNet20主幹,數據集CIFAR-10上訓練的的第11個Adder Layer中的權重分布直方圖。右:比較不同剪枝比例下的ShiftAddNet和AdderNet的精度。我們可以看到,原始的加法網絡,即AdderNet,在高剪枝率下不能為權重提供寬的動態範圍(權重分布的範圍變窄了,但是ShiftAddNet權重的分布範圍還是依舊很寬),而ShiftAddNet可以保持一致的寬動態範圍的權重。這解釋了ShiftAddNet對稀疏化的魯棒性的提高。圖41(c)中的測試精度比較表明,當剪掉add layer層中50%的參數時,ShiftAddNet仍然可以達到80.42%的測試精度,而原始AdderNet的精度下降到51.47%。[1] CVPR 2020:AdderNet: Do We Really Need Multiplications in Deep Learning?[2] CVPR 2018:Shift: A Zero FLOP, Zero Parameter Alternative to Spatial Convolutions[3] CVPR 2019:All you need is a few shifts: Designing efficient convolutional neural networks for image classification[4] WACV 2019:AddressNet: Shift-based Primitives for Efficient Convolutional Neural Networks[5] Arxiv:Deepshift: Towards multiplication-less neural networks[6] NeurIPS 2020:ShiftAddNet: A Hardware-Inspired Deep Network極市&英特爾 OpenVINO™中級認證,代碼均已內置,助力快速完成~

添加極市小助手微信(ID : cvmart2),備註:姓名-學校/公司-研究方向-城市(如:小極-北大-目標檢測-深圳),即可申請加入極市目標檢測/圖像分割/工業檢測/人臉/醫學影像/3D/SLAM/自動駕駛/超解析度/姿態估計/ReID/GAN/圖像增強/OCR/視頻理解等技術交流群:每月大咖直播分享、真實項目需求對接、求職內推、算法競賽、乾貨資訊匯總、與 10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發者互動交流~
覺得有用麻煩給個在看啦~  

相關焦點

  • 圖神經網絡綜述:模型與應用
    近年來,圖神經網絡的研究成為深度學習領域的熱點。近日,清華大學孫茂松組在 arXiv 上發布預印版綜述文章 Graph Neural Networks: A Review of Methods and Applications。
  • 深度學習模型壓縮與加速綜述
    因此,如何在不影響深度學習模型性能的情況下進行模型壓縮與加速,成為了學術界和工業界的研究熱點。1、簡介深度學習模型壓縮與加速是指利用神經網絡參數和結構的冗餘性精簡模型,在不影響任務完成度的情況下,得到參數量更少、結構更精簡的模型。被壓縮後的模型對計算資源和內存的需求更小,相比原始模型能滿足更廣泛的應用需求。
  • 萬字長文:深度卷積神經網絡特徵可視化技術(CAM)最新綜述
    因此就有了「深度學習可解釋性「這一領域,而CAM(Class Activation Mapping)技術就是其中之一,其利用特徵可視化來探究深度卷積神經網絡的工作機制和判斷依據。本文通過七篇論文來論述該技術,並附帶代碼解析。CAM是什麼?
  • ​貝葉斯神經網絡最新綜述
    神經網絡先回顧一下傳統神經網絡,論文限於篇幅的原因有一些重要的細節沒有展開,而且我一直覺得神經網絡中一個完善的形式應該是通過矩陣的形式表現出來,同理矩陣形式 BP 反向傳播原理也能一目了然可以發現標量視角下的神經網絡更新參數求解梯度會給人一種很混亂的感覺。2.2 矩陣形式的神經網絡下圖為 3 層不考慮偏置項的全連接神經網絡示意圖:
  • 圖神經網絡(Graph Neural Networks,GNN)綜述
    每個圖都有一個大小可變的無序節點,圖中的每個節點都有不同數量的相鄰節點,導致一些重要的操作(例如卷積)在圖像上很容易計算,但不再適合直接用於圖域。此外,現有機器學習算法的一個核心假設是實例彼此獨立。然而,對於圖數據來說,情況並非如此,圖中的每個實例(節點)通過一些複雜的連結信息與其他實例(鄰居)相關,這些信息可用於捕獲實例之間的相互依賴關係。
  • 圖神經網絡及其在電力系統中的應用綜述,12頁pdf
    深度神經網絡已經徹底改變了電力系統中的許多機器學習任務,從模式識別到信號處理。
  • 【乾貨】Batch Normalization: 如何更快地訓練深度神經網絡
    【導讀】本文是谷歌機器學習工程師 Chris Rawles 撰寫的一篇技術博文,探討了如何在 TensorFlow 和 tf.keras 上利用 Batch Normalization 加快深度神經網絡的訓練
  • 西安交大最新「基於深度神經網絡的高效視覺識別」綜述論文,32頁pdf329篇文獻闡述深度視覺識別研究進展與新方向
    在大量訓練數據和新的強大計算資源的幫助下,深度神經網絡在許多具體任務上大大提高了其性能。雖然識別精度通常是新進展的首要考慮,但效率實際上是相當重要的,有時對學術研究和工業應用都至關重要。此外,整個社會也高度需要對效率的機遇和挑戰有深刻見解。雖然從不同角度對DNN的效率問題進行了全面的調研,但據我們所知,很少有系統地關注視覺識別,因此不清楚哪些進展適用於視覺識別,還有哪些需要關注。
  • 深度神經網絡全面概述:從基本概念到實際模型和硬體基礎
    近日,由 IEEE Fellow Joel Emer 領導的一個團隊發布了一篇題為《深度神經網絡的有效處理:教程和調研(Efficient Processing of Deep Neural Networks: A Tutorial and Survey)》的綜述論文,從算法、模型、硬體和架構等多個角度對深度神經網絡進行了較為全面的梳理和總結。
  • 注意力模型深度綜述:注意力類型和網絡架構都有什麼
    它們還被廣泛用於提高神經網絡的可解釋性,無法解釋的神經網絡被視為黑箱模型;第三,它們還有助於克服循環神經網絡的一些挑戰,如隨著輸入長度的增加而導致的性能下降,以及輸入的序列處理所帶來的計算效率低下。因此,本文旨在對注意力模型進行簡短而又全面的綜述。
  • 清華大學等首篇「動態神經網絡」最新綜述論文,20頁pdf236篇文獻
    動態神經網絡是深度學習領域的一個新興研究課題。
  • 深度學習加速綜述:算法、編譯器、體系結構與硬體設計
    算法頂層算法頂層在深度學習加速的工作也囊括了很多方面,例如:更好的分布式訓練調度(大規模分布式機器學習系統),更好的優化算法,更簡單高效的神經網絡結構,更自動化的網絡搜索機制(神經網絡架構搜索NAS), 更有效的網絡參數量化剪枝算法、卷積運算的優化等等。1.1. 大規模分布式機器學習這方面主要是分布式系統的一些設計。
  • 如何使用CUDA,cuDNN加速opencv深度學習神經網絡
    前幾期的文章,我們分享了如何使用opencv來實現YOLOV3以及YOLOV4使用python輕鬆實現高大上的YOLOV4對象檢測算法高大上的YOLOV3對象檢測算法,使用python也可輕鬆實現很多神經網絡都可以使用
  • 綜述 | Google-斯坦福發布~深度學習統計力學
    最近來自谷歌大腦和斯坦福的學者共同在Annual Review of Condensed Matter Physics 發布了深度學習統計力學的綜述論文《Statistical Mechanics of Deep Learning》,共30頁pdf,從物理學視角闡述了深度學習與各種物理和數學主題之間的聯繫。
  • 7大類深度CNN架構創新綜述
    (CNN)是一種特殊類型的神經網絡,在各種競賽基準上表現出了當前最優結果。深度 CNN 架構在挑戰性基準任務比賽中實現的高性能表明,創新的架構理念以及參數優化可以提高 CNN 在各種視覺相關任務上的性能。本綜述將最近的 CNN 架構創新分為七個不同的類別,分別基於空間利用、深度、多路徑、寬度、特徵圖利用、通道提升和注意力。
  • 深度 | 輕量級深度卷積神經網絡在農業機器人中的應用
    因為機器人平臺的資源是有限的,所以很難部署深度卷積神經網絡,並且用有限的數據去訓練深度神經網絡也是很困難的。使用最先進的網絡所需要的計算能力是那些常見機器人負擔不起的。這篇文章在複雜度和準確度之間做了一個折中,並通過以下步驟解決了這個問題。首先,開發者把一個預先訓練好的模型 Inception-v3[3] 適應在這個任務中。然後,他們使用模型壓縮和「蒸餾」技術實現了指數級減少的參數。
  • Python深度學習之生成對抗神經網絡(GAN)簡介及實現
    生成對抗網絡是現在人工智慧領域的當紅技術之一,網絡是近兩年深度學習領域的新秀,火的不行,本文旨在淺顯理解GAN,分享學習心得。GAN的主要靈感來源於博弈論中零和博弈的思想,應用到深度學習神經網絡上來說,就是通過生成網絡G(Generator)和判別網絡D(Discriminator)雙方的博弈學習,相互提高,最終達到一個平衡點,最終的均衡點為納什均衡點,此時生成器 G 生成的樣本非常逼真,使得鑑別器 D 真假難分。
  • IBM實驗室:集成光子神經網絡的新機遇
    後者的一個關鍵方面是將大量並行的突觸互連層和非線性激活函數等基本神經網絡構建模塊深度嵌入到基礎平臺中。神經形態計算的主要任務是計算和優化神經網絡中的突觸,其中傳入神經元的信號通過多次乘法累加(multiply-accumulate,MAC)進行加權和求和。如果我們考慮兩個網絡層之間的所有突觸連接,這個運算最終可以表述為一個大的向量-矩陣乘法。
  • 藉助稀疏推理加速行動裝置和網頁上的神經網絡
    如通過使用帶有 ML 加速庫 XNNPACK 的 TensorFlow Lite 這樣的 ML 推理框架,工程師可以在模型大小、推理速度和預測質量之間找到最佳平衡點,以便模型能適配於各種設備。優化模型的方法之一是使用稀疏神經網絡 (Sparse Neural Networks) [1, 2, 3],這些網絡中的很大一部分權重值都會設置為 0。
  • 圖神經網絡概述
    圖計算(Graph Computing)具有數據規模量大、局部性低、計算性能高等特性,圖計算算法}s-}}主要可以分為路徑搜索算法、中心性算法、社群發現算法等三類,實現了在關係複雜型的大規模數據上高時效性和準確度的表現,在社交網絡、團體反欺詐和用戶推薦等領域有著重要的應用。