剪枝 再訓練 稀疏化DeepID2

2021-07-24 02:12:27 字數 1934 閱讀 5868

本次介紹的依然是壓縮網路的方法,不過有了具體的應用場景:壓縮的模型是deepid2+。方法**於《2015 arxiv: sparsifying neural network connections for face recognition》,文章是王曉剛、湯曉鷗團隊的,所以結果依舊很漂亮,但誰又能保證沒點trick呢。t_t

整個演算法的流程很簡單:從網路的最後一層開始,根據一定規則對該層進行剪枝,然後retrain網路,迴圈上述過程。

剪枝的實現方法,就是為權重施加乙個相同大小的mask, mask中只有啟用的地方才是1,其餘全0.

演算法流程圖如下:

剪枝的目標就是只保留重要的權重。

全連線層剪枝

首先,對於如全連線和區域性連線這些沒有權值共享的層,我們可以很簡單的計算神經元之間的相關性:

假設 a

i  是當前層的乙個神經元, 上一層有 

k  個神經元,則此時 ai

與上一層之間應該有 

k  個連線,即 

k  個權重引數: bi

1,bi

2…bi

k 。 於是我們可以用下式計算 ai

與每乙個 bi

krik

=e[a

i−μa

i][b

ik−μ

bik]

σaiσ

bik

其中 μ  和 

σ  分別是在驗證集上計算得到的均值與方差。

正相關和負相關同樣重要,而且實驗發現保留一些相關性較小的權重也會提高實驗效果。

於是,作者首先將所有正相關的 ri

k  降序排列,然後均分為兩部分,在前一部分隨機取樣 λs

k+個,在後面一部分隨機取樣 (1

−λ)s

k+個, 其中 

s  為事先確定的稀疏度, 

λ 文中設定為0.75 。對負相關採取同樣操作。據此,我們可以建立出表示剪枝的掩膜矩陣。

卷積層剪枝

卷積層剪枝稍微複雜一點,因為存在權值共享。設 a

im是當前層第 

i  個feature map中的第 

m  神經元,該feature map中的共有 

m  個神經元。顯然,根據卷積規則,這 

m  個神經元都只與乙個卷積核有關,即 

k  個權值有關 ( 

k  為filter size)。於是, ( bm

k  應該是上一層 feature map 中卷積的部分,該部分的位置與 

m  有關,且包含 ( 

k  個元素。

最後,相關係數通過平均的方式計算:ri

k=∑m

=1m∣

∣∣e[

aim−

μaim

][bm

k−μb

mk]σ

aimσ

bmk∣

∣∣實驗部分,主要是為了對比說明幾處設定。

下面是在lfw人臉驗證的實驗,1/256表示稀疏度,整個實驗都沒有去碰卷積層,因為對於作者所用的vgg來說,全連線佔據了90%的參數量。此外,壓縮之後效能居然有提公升,簡直奇蹟。

還記得之前選擇權重的時候,是排序之後選擇了一大部分相關性較高的加上一小部分相關性較小的。下圖將其同另外兩種策略進行了對比,一種是 

r  表示全部隨機選擇,一種是 \(\h) 表示只選擇相關性最高的。

結論就是:權重的幅值並不能很好地指示權重的重要性。

**:

演算法訓練 剪格仔(dfs 剪枝 回溯)

題目描述 如下圖所示,3 x 3 的格仔中填寫了一些整數。10 1 52 20 30 1 1 2 3 我們沿著圖中的星號線剪開,得到兩個部分,每個部分的數字和都是 60。本題的要求就是請你程式設計判定 對給定的 m x n 的格仔中的整數,是否可以分割為兩個部分,使得這兩個區域的數字和相等。如果存在...

思維訓練題,再繼續加油!

試圖不用if else語句和任何比較,求出兩個數的最大值?不考慮a,b的正負性,僅僅記錄 k a b,而後構造邏輯表示式 k a k b 就可以了。但是如果是任意兩個整數呢?有人給出思路 二者之差的絕對值,再加上a b,就得出最大值。由於不知道c語言庫函式是如何定義abs函式的,如果用了比較的方法,...

正則化 L1正則化(稀疏性正則化)

稀疏向量通常包含許多維度。建立特徵組合會導致包含更多維度。由於使用此類高維度特徵向量,因此模型可能會非常龐大,並且需要大量的 ram。在高維度稀疏向量中,最好盡可能使權重正好降至 0。正好為 0 的權重基本上會使相應特徵從模型中移除。將特徵設為 0 可節省 ram 空間,且可以減少模型中的噪點。以乙...