CLIP Q 先剪枝後量化的壓縮框架

2021-08-22 07:18:35 字數 2168 閱讀 3740

clipping. 設定兩個截止點標量c−c−

和c+ c

+,用超引數

p p

來確定,使正引數中(p

×100)%

' role="presentation">(p×

100)%(

p×100)

%的引數小於c+c+

,同時使負引數中(p

×100)%(p

×100)%

的引數大於c−c−

。位於c

− c−和c

+ c

+之間的引數置為0。注意的是這種減除是暫時的,在下個週期中,用這個規則作用於更新後的引數,之前被剪枝的連線可能會重新出現。

partitioning。第二步把未被剪掉的引數分到不同的量化區間。可以被視覺化到乙個一維數軸上。通過給定的權重位寬

b b

,將數軸劃分為2b

−1' role="presentation">2b−

12b−

1個區間,再加上從c−c−

到c+ c

+的0區間。文中採用了deep compression中linear (uniform) partitioning方式。

quantizing.量化值是由量化區間中的值平均得來的,並在下次的前向傳播中賦值。和clipping一樣,值只是暫時的量化,可能在後面的過程進行更改。

首先設定p=

0.25,b

=2p

=0.25,b

=2根據設定的閾值減去不需要的小權重;

剩下的12個權重分為22

−1=322

−1=3

類;計算每一類的均值,作為量化值。

訓練中量化值和全精度值都會被跟蹤,其中全精度值用於引數更新和反向傳播,量化值用於前向計算。訓練完成之後只需要保留量化值即可。整體演算法的偽**如圖:

演算法中的超引數有p,

b p,b

兩個,文中採用貝葉斯優化方法確定最優引數θi

=(pi

,bi)

θ i=

(pi,

bi):

minθϵ(

θ)−λ

⋅ci(

θ)minθϵ

(θ)−

λ⋅ci

(θ)對於第

i i

層,ϵ(

θ)' role="presentation">ϵ(θ

)ϵ(θ

)為top1誤差,ci

(θ) ci(

θ)表示壓縮效果,經由:ci

(θ)=

(mi−

si(θ

))/∑

imi ci(

θ)=(

mi−s

i(θ)

)/∑i

mi計算得來。其中mi

m i是

i i

層需要以非壓縮形式儲存的權重所需的位元數,si

(θ)' role="presentation">si(

θ)si

(θ)是使用稀疏編碼方案在使用

θ θ

進行剪枝量化之後來儲存所需的位元數。後面使用高斯過程進行建模,有些複雜,不再進行講解。

其實這個方法很容易想到,最大的創新我覺得也是他超引數的自動設定了。由於每個mini-batch之後繼續更新,所以是一種不固定的量化剪枝,因而給定的b,

p b,p

引數也隨著網路不斷更新。結果在googlenet 上有10x壓縮,resnet-50有15x,還是不錯的。但實際上真的需要用超引數的自動設定嗎?從目前自己的實驗上來看感覺也沒有那麼重要,損失可能也就在1%以內。