一、前言
近年來,深度學習因為在圖像,語音等領域得到了很好的實踐效果,而被廣泛使用。隨着深度學習的發展,深度模型越來越大,越來越復雜。伴隨而生研究方向是:網絡壓縮。
網絡壓縮是指,在不損失網絡精度的同時,減少網絡的測試時間或者是網絡參數的存儲空間。本文主要介紹一種通過低秩逼近的方法對網絡進行壓縮,提高網絡前向傳播效率。
二、低秩表示
如果把矩陣看成是一個個行或者列向量,秩就是行或者列向量極大無關組中所含向量的個數。
簡單來說:Z的樣本空間與數據集D的樣本空間是等價的。基於低秩表示的假設,在圖像去燥等領域取得了不錯的效果。本文主要說它在網絡壓縮里的應用。
三、CNN與網絡壓縮
本文介紹的網絡壓縮方法只適用於卷積層和全連接層。在介紹網絡壓縮之前,我們首先對CNN網絡有一個大概的了解。
CNN基本包括以下一些Layer:conv /bn / action /pool /fc 等。其中pool/action 層正常是沒有參數的;因此,我們所說的關於CNN網絡的壓縮主要是指針對conv 和 fc而言。
網絡壓縮的目的是:1 提高運行時間效率;2 降低模型空間存儲大小;
對於CNN網絡來說:1 網絡參數的90%來源於全連接層;2 網絡運行時間的90%來源於卷積層;3 卷積層的時間大部分都消耗在前面幾層(

四、低秩逼近的網絡壓縮
卷積層為例:
卷積W可以看成是f個w(k*k*c)的卷積作用於輸入的featuremap上。
假設這f個卷積滿足低秩表示的約束,我們可以找到M個(M<f)w(kkc)的卷積,通過線性組合,得到近似等價的輸出。
接下來:我們看看運算量的變化:
原始卷積計算量:O(KKFWH)
新卷積計算量:O((KKM+MF)WH)
如果使得新卷積的計算量小於原始卷積的計算量,則需要滿足:
五、低秩逼近網絡壓縮的具體解決方案
上面這一頁PPT給出了常用的兩種方法,總的來說都是講一層卷積拆分成兩層卷積。第一類方式是嚴格按照低秩逼近的意義,先得到M個低秩的featuremap 然后對着M個featuremap進行1*1的卷積操作,從而得到與原卷積非常近似的輸出。第二類方法是從目標出發,中間產生多少的featurenmap並不是重點,重點是如何盡量確保進過兩次卷積輸出的featurenmap的值與原卷積輸出的值近似相等。
模型優化:第一類優化
優化的目標是已知W,計算A和S,具體如下,利用交替迭代的方法解算A和S:
模型優化:第二類優化
第二類優化的目的是將W拆分為兩個矩陣的乘積,具體計算同樣可以利用方法1中迭代優化的算法。但是,已有的矩陣分解已經提供了這種方法的一種算法近似解,如SVD分解,如上圖。
關於代碼實現,非常簡單:簡單截圖如下:
總結:低秩逼近的方法用於全連接層效果較好,但是對運行時間提升空間不是很大。一般能達到1.5倍。將低秩逼近的壓縮算法用於卷積層時,會出現誤差累積的效果,對最后精度損失影像較大,需要對網絡進行逐層的微調,費時費力。