讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝

機器之心發表於2018-07-11

網路剪枝是一種加速 CNN 的常用方法。廈門大學和騰訊優圖的一項研究提出了一種全新的全域性和動態過濾器剪枝方法,能夠實現更好的剪枝效果且具有更好的適應性。該論文已被將於當地時間 7 月 13-19 日於瑞典斯德哥爾摩舉辦的 IJCAI-18 接收。

在 ICML 2018 與 IJCAI 2018 大會期間(今年都在斯德哥爾摩),騰訊將舉辦 Tencent Academic and Industrial Conference (TAIC),誠邀全球頂尖 AI 學者、青年研究員與騰訊七大事業群專家團隊探討最前沿 AI 研究與應用。

1 引言

卷積神經網路(CNN)已經在多種不同應用中取得了顯著的成功,其中包括影象分類 [He et al., 2016; Krizhevsky et al., 2012; Simonyan and Zisserman, 2014]、目標檢測 [Girshick et al., 2014] 和形義分割 [Long et al., 2015]。但是,這樣出色的表現也伴隨著顯著的計算成本——如果沒有高效的圖形處理器(GPU)的支援,將這些 CNN 部署到實時應用中會非常困難。因此,卷積網路加速已經成為了一大新興研究方向。

卷積神經網路加速方面的近期研究工作可分為三大類,即:低秩分解、引數量化和網路剪枝。其中,網路剪枝得到的研究關注正越來越大,由於這種方法的過濾器引數和中間啟用較少(輕記憶體的線上推理非常需要這一點),所以有記憶體佔用量小的優勢。

網路剪枝方法又可以進一步被分為非結構化剪枝和結構化剪枝兩類。

非結構化剪枝 [LeCun et al., 1989; Hassibi and Stork, 1993; Han et al., 2015a; 2015b] 的目標是直接對每一層的引數單獨剪枝,這會導致出現不規則的記憶體訪問情況,從而對線上推理的效率產生不利影響,在這種情況下,通常還需要設計專用硬體 [Han et al., 2016] 或軟體 [Liu et al., 2015; Park et al., 2017] 來進一步加速被剪枝的非結構化 CNN。

結構化剪枝 [Anwar et al., 2015; Lebedev and Lempitsky, 2016; Wen et al., 2016; Li et al., 2016; Luo et al., 2017; Molchanov et al., 2017; Hu et al., 2016] 的目標則是直接以整體形式移除過濾器。這種方法的效率會高很多,而且不需要專用硬體或軟體平臺。比如,Anwar 等研究者 [Anwar et al., 2015] 為過濾器方面和通道方面的卷積過濾器選擇引入了結構化的稀疏性,並基於此通過使用粒子濾波(particle filtering)來根據規則性剪枝過濾器。Luo 等人 [Luo et al., 2017] 隱含地將當前層中的卷積過濾器與下一層中的輸入通道關聯到了一起,並基於此通過下一層的輸入通道選擇來對當前層中的過濾器進行剪枝

但是,現有的結構化剪枝方案都是以一種逐層固定的方式來剪枝卷積神經網路,這種方式的適應性更差、效率更低且效果也更差。首先,在區域性剪枝中,需要迭代式的層方面的剪枝和區域性的微調,這需要密集的計算。第二,對顯著過濾器的錯誤剪枝是不可恢復的,這沒有適應性而且剪枝後的網路不能得到最優表現。

在這篇論文中,我們提出了一種全新的全域性和動態剪枝(GDP:global & dynamic pruning)方案,可以剪枝掉冗餘的過濾器來解決上述兩個問題,這能很大程度地加速剪枝後的網路,同時還能降低網路的準確度損失。

不同於之前的逐層固定過濾器剪枝方案,我們的關鍵創新是在所有網路層上全域性地評估各個過濾器的重要度/顯著性,然後在此基礎上動態地和迭代地剪枝和調整網路,並且還帶有重新呼叫在之前的迭代中被錯誤剪枝的過濾器的機制。圖 1 展示了我們提出的框架的流程圖。

我們首先初始化一個預訓練的卷積網路,然後給所有過濾器施加一個全域性掩模並使之等於 1(即確定對應過濾器是否被剪枝的外部開關。然後,我們設計一個全域性判別函式來決定各個過濾器的顯著性分數。這種分數能引導我們以全域性的方式剪枝所有層上不顯著的過濾器,即等價於將不顯著的過濾器的掩模設為 0。最後,我們迭代式地調整這個稀疏網路並且以一種自上而下的方式動態地更新過濾器顯著性。通過這樣的操作,之前被掩蔽的過濾器還有重新被呼叫的可能,這能顯著提升被剪枝後網路的準確度。在優化方面,GDP 可以被描述成一個非凸優化問題,然後可以使用貪婪的交替更新方法通過隨機梯度下降有效求解。

讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝

圖 1:GDP 的圖示。每個有顏色的矩形(比如紅色矩形)都是過濾器集合 W∗ 中的一個過濾器,具有二元值的全域性掩模 m 決定了過濾器的顯著性(即表示對應的過濾器是顯著的或不顯著的)。首先,我們使用一個預訓練的模型和一個完全全域性掩模來初始化網路。然後,通過將冗餘過濾器對應的掩模的值設為 0 來在所有層上以全域性的方式將它們剪枝掉。最後,執行過濾器和全域性掩模的迭代式動態更新,從而提升剪枝後網路的準確度。

我們在 ImageNet 2012 資料集 [Russakovsky et al., 2015] 上評估了新提出的 GDP,並且基於被廣泛使用 AlexNet [Krizhevsky et al., 2012]、VGG-16 [Simonyan and Zisserman, 2014] 和 ResNet-50 [He et al., 2016] 實現了它。通過對比之前最佳的過濾器剪枝方法 [Wen et al., 2016; Li et al., 2016; Luo et al., 2017; Molchanov et al., 2017; Hu et al., 2016],結果表明新提出的 GDP 方案能得到更優的表現:在 AlexNet 上以 1.15% 的 Top-5 準確度損失實現了 2.12 倍的 GPU 加速,在 VGG-16 上以 1.45% 的 Top-5 準確度損失實現了 2.17 倍的 CPU 加速,在 ResNet-50 上以 2.16% 的 Top-5 準確度損失實現了 1.93 倍的 CPU 加速。

3 全域性式動態剪枝

3.1 符號標記方法

CNN 可被看作是一種將輸入影象對映成某個輸出向量的前饋式多層架構。在 CNN 中,最耗時的部分是卷積層。讓我們將第 l 層中的影象特徵圖集合表示為 讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝,其大小為 H_l×W_l,各個特徵圖(即通道)為 C_l。這些特徵圖要麼是網路 Z_0 的輸入,要麼是輸出特徵圖 Z_l,其中 l∈[1, 2, ... , L]。此外,我們將各個特徵圖表示為 讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝,其中 k∈[1, 2, ... , C_l ]。第 l 個卷積層的各個輸出特徵圖 是通過將卷積運算元(∗)應用到一組輸入特徵圖上獲得的,這些特徵圖的過濾器引數化為:讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝;即:

讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝

其中 f(*) 是一個非線性啟用函式,比如修正線性單元(ReLU)。

在 Caffe [Jia et al., 2014] 和 TensorFlow [Abadi et al., 2016] 等很多深度學習框架中,基於張量的卷積運算元通過降低輸入和重新構造過濾器的形狀而被重新形式化為了一種矩陣乘矩陣的乘法,比如:

讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝

其中,矩陣 讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝 的每一行都與輸出張量的空間位置有關,這個輸出張量是通過基於輸入張量 讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝 的變換而得到的,並且矩陣 讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝 根據過濾器 W_l 重新調整了形狀。

3.2 新提出的剪枝方案

讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝

演算法 1:我們提出的全域性式動態剪枝方案

我們的目標是以全域性的方式剪枝冗餘的過濾器。為此,可以直接將大型網路轉換成緊湊的網路,而不重複地評估每個過濾器的顯著性和逐層微調剪枝後的網路。我們引入了一種全域性掩模,以在訓練過程的每次迭代中臨時掩蔽不顯著的過濾器。基於此,公式 (2) 可改寫為:

讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝

其中 讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝 是一個二元值的掩模。如果第 k 個過濾器是顯著的,則,否則就為 0。⊙ 表示 Khatri-Rao 積運算元。

正如我們說過的,以一種不可恢復/固定的方式剪枝過濾器在實踐中不夠靈活且效果很差,這會給網路表現水平帶來嚴重損失。注意,因為過濾器之間存在複雜的互連,所以過濾器顯著性可以會在剪枝了特定的層後發生很大的變化 [Guo et al., 2016]。因此,動態剪枝(即從一種全域性角度實現被掩蔽的過濾器的回滾)在提升剪枝後網路的可判別性(discriminability)方面有很高的需求。

為了更好地描述新提出的 GDP 的目標函式,我們將整個網路的過濾器表示為 讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝,並將全域性掩模表示為 讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝。然後我們給出一個訓練樣本集 讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝,其中 X_i 和 Y_i 分別表示輸入和目標輸出。我們求解的是以下優化問題:

讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝

其中 L(·) 是被剪枝網路的損失函式,比如交叉熵損失。g(X; W*, m) 的輸入為 X;具有過濾器 W* 和全域性掩模 m,並使用它們將輸入對映成一個 s 維的輸出(s 是類別數)。h(·) 是用於決定過濾器的顯著性值的全域性判別函式,這取決於 W* 的預先知識。函式 h(·) 的輸出是二元的,即如果對應的過濾器是顯著的,則輸出 1,否則輸出 0。

(4) 式是我們的 GDP 框架的核心函式,這是非凸的,其求解方法將在 3.3 節介紹。β ∈ (0, 1] 是一個決定被剪枝網路的稀疏度的閾值。因為有 讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝 運算元,所以 (4) 式是一個 NP-hard 問題。我們通過將 m 的界限設定在 W∗ 的預先知識上而簡化了這個 NP-hard 問題。然後,通過使用隨機梯度下降而貪婪且交替地更新 W* 和 m,我們可以對其進行求解,詳見 3.3 節。

4 實驗

讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝

表 1:GDP 和 GDP-D(沒有動態更新的全域性剪枝)的 FLOPs 比較,其中 β 設為 0.7。FLOPs% 是指剩餘的 FLOPs 所佔的百分比。

讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝

表 2:用於加速 AlexNet 的不同剪枝方法比較。Hy-P 表示超引數設定,批大小為 32(下面的表格都一樣)

讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝

圖 2:在加速 AlexNet 和 VGG-16 方面不同過濾器選擇方案的比較。Scratch 表示從頭開始訓練的網路,Ori 表示原始 CNN,GDP-D 表示沒有動態更新的全域性剪枝

讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝

表 3:加速 VGG-16 的結果。

讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝

圖 3:使用 GDP 方案剪枝 VGG-16 時採用不同 β 值的結果比較。(a) 使用 GDP 方案剪枝 VGG-16 時採用不同 β 值的訓練損失和 Top-1 測試準確度;(b) 使用不同 β 值的 GDP 剪枝後的網路在微調後的訓練損失和 Top-1 測試準確度。

讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝

表 4:加速 ResNet-50 的結果。

讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝

圖 4:在 VGG-16 的第一層上動態地更新過濾器、掩模和輸出特徵圖。左:過濾器和掩模;右:輸出特徵圖。在左列中,每個矩形都包含了過濾器和掩模,其中黑色框表示掩模沒改變,紅色框表示過濾器和掩模更新了。另外,其中僅有黑白兩色的小矩形表示對應的過濾器是否顯著,■ 表示顯著,□ 表示不顯著。在右列中,對應改變的特徵圖用紅色框標出。

論文:通過全部和動態過濾器剪枝加速卷積網路(Accelerating Convolutional Networks via Global & Dynamic Filter Pruning

讓CNN跑得更快,騰訊優圖提出全域性和動態過濾器剪枝

論文地址:https://www.ijcai.org/proceedings/2018/0336.pdf

卷積神經網路加速近來得到了越來越多的研究關注。在文獻中提出的各種方法中,過濾器剪枝一直都被視為一種有潛力的解決方案,這主要是由於其在網路模型和中間的特徵圖上都有顯著的加速和降低記憶體的優勢。為了做到這一點,大多數方法都傾向於以一種逐層固定的方式剪枝過濾器,這種方式無法動態地恢復之前被移除的過濾器,也不能在所有層上聯合優化被剪枝的網路。在這篇論文中,我們提出了一種全新的全域性和動態剪枝(GDP)方案,可剪枝冗餘的過濾器,從而實現 CNN 加速。尤其值得提及的是,我們提出了一種基於每個過濾器的預先知識的全域性判別函式,讓 GDP 成了首個在所有層上全域性地剪枝不顯著過濾器的方法。另外,它還能在整個剪枝後的稀疏網路上動態地更新過濾器的顯著性,然後恢復被錯誤剪枝的過濾器,之後再通過一個再訓練階段來提升模型準確度。特別要指出,我們通過使用貪婪的交替更新的隨機梯度下降而有效地解決了新提出的 GDP 對應的非凸優化問題。我們進行了大量實驗,結果表明,相比於之前最佳的過濾器剪枝方法,我們提出的方法在 ILSVRC 2012 基準的多種前沿 CNN 的加速上表現更優。

相關文章