移动端部署神经网络新方法:把CNN里的乘法全部去掉
前不久,機(jī)器之心報(bào)道過(guò)北大、華為諾亞等合著的一篇論文,探討了不用乘法用加法能不能做深度學(xué)習(xí)。最近,我們又看到華為的另一篇論文,這一次沒(méi)有用加法替代乘法,而是用「按位移位」和「按位取反」來(lái)取代乘法運(yùn)算。
深度學(xué)習(xí)模型,尤其是深度卷積神經(jīng)網(wǎng)絡(luò)(DCNN),在多個(gè)計(jì)算機(jī)視覺(jué)應(yīng)用中獲得很高的準(zhǔn)確率。但是,在移動(dòng)環(huán)境中部署時(shí),高昂的計(jì)算成本和巨大的耗電量成為主要瓶頸。而大量使用乘法的卷積層和全連接層正是計(jì)算成本的主要貢獻(xiàn)者。
論文鏈接:https://arxiv.org/pdf/1905.13298.pdf
華為的這篇論文提出了解決該問(wèn)題的新方法,即引入兩種新型運(yùn)算:卷積移位(convolutional shift)和全連接移位(fully-connected shift),從而用按位移位(bitwise shift)和按位取反(bitwise negation)來(lái)取代乘法。使用了卷積移位和全連接移位的神經(jīng)網(wǎng)絡(luò)架構(gòu)族即 DeepShift 模型。DeepShift 模型可以在不使用乘法的情況下實(shí)現(xiàn),且在 CIFAR10 數(shù)據(jù)集上獲得了高達(dá) 93.6% 的準(zhǔn)確率,在 ImageNet 數(shù)據(jù)集上獲得了 70.9%/90.13% 的 Top-1/Top-5 準(zhǔn)確率。
研究者將多種著名 CNN 架構(gòu)的卷積層和全連接層分別進(jìn)行卷積移位和全連接移位轉(zhuǎn)換,并進(jìn)行了大量實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明,有些模型的 Top-1 準(zhǔn)確率下降程度低于 4%,Top-5 準(zhǔn)確率下降程度低于 1.5%。
所有實(shí)驗(yàn)均使用 PyTorch 框架完成,訓(xùn)練和運(yùn)行代碼也已經(jīng)發(fā)布。
代碼地址:https://github.com/mostafaelhoushi/DeepShift
引言
越來(lái)越多的深度神經(jīng)網(wǎng)絡(luò)針對(duì)移動(dòng)和 IoT 應(yīng)用而開(kāi)發(fā)。邊緣設(shè)備通常電量和價(jià)格預(yù)算較低,且內(nèi)存有限。此外,內(nèi)存和計(jì)算之間的通信量在 CNN 的電量需求中也占主要地位。如果設(shè)備和云之間的通信成為必要(如在模型更新等情況下),那么模型大小將影響連接成本。因此,對(duì)于移動(dòng)/IoT 推斷應(yīng)用而言,模型優(yōu)化、模型規(guī)模縮小、加速推斷和降低能耗是重要的研究領(lǐng)域。
目前已有多種方法可以解決這一需求,這些方法可分為三類:
第一類方法是從頭開(kāi)始構(gòu)建高效模型,從而得到新型網(wǎng)絡(luò)架構(gòu),但要找出最適合的架構(gòu)需要嘗試多個(gè)架構(gòu)變體,而這需要大量訓(xùn)練資源;
第二類方法是從大模型開(kāi)始。由于網(wǎng)絡(luò)中存在一些冗余參數(shù),這些參數(shù)對(duì)輸出沒(méi)有太大貢獻(xiàn),因而我們可以基于參數(shù)對(duì)輸出的貢獻(xiàn)程度對(duì)它們進(jìn)行排序。然后修剪掉排序較低的參數(shù),這不會(huì)對(duì)準(zhǔn)確率造成太大影響。參數(shù)排序可以按照神經(jīng)元權(quán)重的 L1/L2 均值(即平均激活)進(jìn)行,或者按照非零神經(jīng)元在某個(gè)驗(yàn)證集上的比例進(jìn)行。剪枝完成后,模型準(zhǔn)確率會(huì)下降,因此需要進(jìn)一步執(zhí)行模型訓(xùn)練來(lái)恢復(fù)準(zhǔn)確率。一次性修剪太多參數(shù)可能導(dǎo)致輸出準(zhǔn)確率大幅下降,因此在實(shí)踐中,通常迭代地使用「剪枝-重新訓(xùn)練」這一循環(huán)來(lái)執(zhí)行剪枝操作。這可以降低模型大小,并加快速度;
第三類方法是從大模型開(kāi)始,然后用量化技術(shù)來(lái)縮減模型大小。在一些案例中,量化后的模型被重新訓(xùn)練,以恢復(fù)部分準(zhǔn)確率。
這些方法的重要魅力在于:它們可以輕松應(yīng)用于多種網(wǎng)絡(luò),不僅能夠縮減模型大小,還能降低在底層硬件上所需的復(fù)雜計(jì)算單元數(shù)量。這帶來(lái)了更小的模型占用、更少的工作記憶(和緩存)、在支持平臺(tái)上的更快計(jì)算,以及更低的能耗。
此外,一些優(yōu)化技術(shù)用二值 XNOR 運(yùn)算來(lái)替代乘法。此類技術(shù)在小型數(shù)據(jù)集(如 MNIST 或 CIFAR10)上可能有較高的準(zhǔn)確率,但在復(fù)雜數(shù)據(jù)集(如 ImageNet)上準(zhǔn)確率會(huì)嚴(yán)重下降。
華為的這篇論文提出兩種新型運(yùn)算——卷積移位和全連接移位,用按位移位和按位取反來(lái)取代乘法,從而降低 CNN 的計(jì)算成本和能耗。這一神經(jīng)網(wǎng)絡(luò)架構(gòu)族即為 DeepShift 模型。該方法主要使用 2 的冪或按位移位從頭開(kāi)始執(zhí)行 one-shot 訓(xùn)練,或者對(duì)預(yù)訓(xùn)練模型進(jìn)行轉(zhuǎn)換。
DeepShift 網(wǎng)絡(luò)圖 1:(a) 原始線性算子 vs 本研究提出的移位線性算子;(b) 原始卷積算子 vs 本研究提出的移位卷積算子。
如上圖 1 所示,本論文的主要概念是用按位移位和按位取反來(lái)替代乘法運(yùn)算。如果輸入數(shù)字的底層二進(jìn)制表示 A 是整數(shù)或固定點(diǎn)形式,則向左(或向右)按位移動(dòng) s 位在數(shù)學(xué)層面上等同于乘以 2 的正(負(fù))指數(shù)冪:按位移位僅等同于乘以正數(shù),因?yàn)閷?duì)于任意 s 值,都有 2_±s > 0。但在神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程中,搜索空間中必須存在乘以負(fù)數(shù)的情況,尤其是在卷積神經(jīng)網(wǎng)絡(luò)中,其濾波器的正負(fù)值可用于檢測(cè)邊。因此,我們還需要使用取反運(yùn)算,即:與按位移位類似,取反運(yùn)算的計(jì)算成本較低,因?yàn)樗恍枰獙?duì)數(shù)字返回 2 的補(bǔ)碼。
下文將介紹該研究提出的新型算子 LinearShift 和 ConvShift,它們用按位移位和取反取代了乘法:其中 s 是移位值,n 是取反值。在經(jīng)典的 CPU 架構(gòu)中,按位移位和按位取反僅使用 1 個(gè)時(shí)鐘周期,而浮點(diǎn)乘法可能需要 10 個(gè)時(shí)鐘周期。
LinearShift 算子其中輸入 x 可表示為矩陣 B × m_in,輸出 y 可表示為矩陣 B × m_out,W 是可訓(xùn)練權(quán)重矩陣 m_in × m_out,b 是可訓(xùn)練偏置向量 m_out × 1。B 是批大小,m_in 是輸入特征大小,m_out 是輸出特征大小。
該線性算子的反向傳播可表達(dá)為:其中 ?L/?y 是運(yùn)算的梯度輸入(運(yùn)算輸出的模型損失 L 的導(dǎo)數(shù)),?L/?x 是運(yùn)算的梯度輸出(運(yùn)算輸入的模型損失的導(dǎo)數(shù)),?L/?W 是運(yùn)算權(quán)重的模型損失的導(dǎo)數(shù)。本論文提出該移位線性算子,在其前向傳播中用按位移位和取反替代了矩陣乘法。其前向傳播可定義為:其中 N 是取反矩陣,S 是移位值矩陣,· 表示這兩個(gè)矩陣的對(duì)應(yīng)元素乘法。B 和 S 的大小是 m_in × m_out,b 是偏置向量,類似于原始線性算子。S、N 和 b 都是可訓(xùn)練的參數(shù)。
為了幫助推導(dǎo)后向傳播,研究者使用項(xiàng) V = (?1)^round(N) ˙ (2)^round(S),得到:注意,反向傳播導(dǎo)致 -1 和 2 的冪存在非整數(shù)值。但是,在前向傳播中,它們被四舍五入,以實(shí)現(xiàn)按位取反和移位。
ConvShift 算子
原始卷積算子的前向傳播可表達(dá)為:其中 W 的維度是 c_out × c_in × h × w,其中 c_in 是輸入通道大小,c_out 是輸出通道大小,h 和 w 分別是卷積濾波器的高和寬。LeCun 等 [1999] 將卷積的反向傳播表示為:類似地,本研究提出的卷積移位(即 ConvShift)算子的前向傳播可表示為:其中 N 和 S 分別表示取反和移位矩陣,維度為 c_out × c_in × h × w。類似地,為了推導(dǎo)反向傳播,研究者使用項(xiàng) V = (?1)^round(N) ˙ (2)^round(S),得到:基準(zhǔn)測(cè)試結(jié)果
研究者在 3 個(gè)數(shù)據(jù)集上測(cè)試了模型的訓(xùn)練和推斷結(jié)果:MNIST、CIFAR10 和 ImageNet 數(shù)據(jù)集。
MNIST 數(shù)據(jù)集
下表 1 展示了模型在 MNIST 驗(yàn)證集上的準(zhǔn)確率。我們可以看到,從頭訓(xùn)練得到的 DeepShift 模型的準(zhǔn)確率下降程度超過(guò) 13%,不過(guò)僅轉(zhuǎn)換預(yù)訓(xùn)練權(quán)重得到的 DeepShift 版本準(zhǔn)確率下降程度較小,而基于轉(zhuǎn)換權(quán)重進(jìn)行后續(xù)訓(xùn)練則使驗(yàn)證準(zhǔn)確率有所提升,甚至超過(guò)了原版模型的準(zhǔn)確率。CIFAR10 數(shù)據(jù)集
下表 2 展示了模型在 CIFAR10 驗(yàn)證集上的評(píng)估結(jié)果。我們注意到從頭訓(xùn)練得到的 DeepShift 版本出現(xiàn)了嚴(yán)重的準(zhǔn)確率下降,而基于轉(zhuǎn)換預(yù)訓(xùn)練權(quán)重訓(xùn)練得到的 DeepShift 模型準(zhǔn)確率下降幅度較小(不到 2%)。
值得注意的是,對(duì)于未經(jīng)進(jìn)一步訓(xùn)練的轉(zhuǎn)換權(quán)重,寬度更大、復(fù)雜度更高的模型取得的結(jié)果優(yōu)于低復(fù)雜度模型。這或許可以解釋為,模型復(fù)雜度的提升補(bǔ)償了運(yùn)算被轉(zhuǎn)換為 ConvShift 或 LinearShift 導(dǎo)致的精度下降。ImageNet 數(shù)據(jù)集
下表 3 展示了模型在 ImageNet 數(shù)據(jù)集上的結(jié)果,我們從中可以看到不同的模型結(jié)果迥異。最好的性能結(jié)果來(lái)自 ResNet152,其 Top-1 和 Top-5 準(zhǔn)確率分別是 75.56% 和 92.75%。值得注意的是,由于時(shí)間限制,一些模型僅訓(xùn)練了 4 個(gè) epoch。進(jìn)行更多訓(xùn)練 epoch 可能帶來(lái)更高的準(zhǔn)確率。復(fù)雜度較高的模型被準(zhǔn)換為 DeepShift 后,結(jié)果通常更好。MobileNetv2 等「難纏」模型在移除所有乘法運(yùn)算后準(zhǔn)確率僅降低了約 6%。與其他加速方法(如 XNOR 網(wǎng)絡(luò)、量化或剪枝)相比,這無(wú)疑是巨大的優(yōu)勢(shì),這些方法對(duì) MobileNet 的優(yōu)化帶來(lái)負(fù)面效果。然而,其他「難纏」網(wǎng)絡(luò)(如 SqueezeNet)的準(zhǔn)確率則出現(xiàn)了大幅下降。
為什么 MobileNetv2 的權(quán)重被轉(zhuǎn)換后,在未經(jīng)后續(xù)訓(xùn)練的情況下準(zhǔn)確率幾乎為 0?而在訓(xùn)練幾個(gè) epoch 后,Top-5 準(zhǔn)確率竟然超過(guò) 84%?這一點(diǎn)還有待分析。
總結(jié)
以上是生活随笔為你收集整理的移动端部署神经网络新方法:把CNN里的乘法全部去掉的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 柯世纳接替罗睿兰任IBM CEO,原为云
- 下一篇: 全球最大太阳望远镜发布最“高清”太阳照片