XNOR-net
简介
文章中提出了两种二值化网络,分别是Binary-Weight-Networks
和XNOR-Networks
。
Binary-Weight-Networks
对模型中的权重W进行二值化操作,即要么是1要么是-1。其中更新参数时依然采用原参数W进行更新。XNOR-Networks
通过对权重W和输入I都进行二值化操作,同时降低空间和实践复杂度。
二值化操作过程
传统的Conv层:I*W
其中I是输入,W是权重,*是卷积操作
Binary-weight-Network的二值化操作:(I*B)α
其中B为二值化的权重矩阵,α是一个实数。
二值化网络的过程就是找到合适的B和α。使得W≈αB,这里a默认为正数。
我们希望尺度参数α和二值矩阵B替代原来的权重,就希望W和αB的差距尽可能小,这里使用来描述两者的差距,设:
J
(
B
,
α
)
=
∣
∣
W
-
B
,
α
∣
∣
2
J(B,α) = ||W-B,α||^2
J(B,α)=∣∣W-B,α∣∣2这里W和B看作向量,用的是向量的2范数的平方,则这里的α和B的取值则为J最小时对应的α和B的值,记为:
α
∗
,
B
∗
=
a
r
g
m
i
n
J
(
B
,
α
)
α^*,B^*=argminJ(B,α)
α∗,B∗=argminJ(B,α)由于矩阵二范数符合分配律,得:
J
(
B
,
α
)
=
α
2
B
T
B
−
2
α
W
T
B
+
W
T
W
J(B,α) = α^2B^TB - 2αW^TB + W^TW
J(B,α)=α2BTB−2αWTB+WTW由于B是-1和1组成的向量,则BTB为常数n,n为B的长度,又因为W是已知矩阵,则WTW也是常量,设为c,则可以重写方程为:
J
(
B
,
α
)
=
α
2
n
−
2
α
W
T
B
+
c
J(B,α)=α^2n-2αW^TB+c
J(B,α)=α2n−2αWTB+c
由J的定义知J一定非负,由于α默认为正数,则要使WTB最小,则WTB最大,
B
∗
=
a
r
g
m
a
x
(
W
T
B
)
B^*=argmax(W^TB)
B∗=argmax(WTB),故:
B
∗
=
s
i
g
n
(
W
)
B^*=sign(W)
B∗=sign(W)确定了B的值后,J为一元二次方程,易得J最小时的α值:
α
∗
=
W
T
B
∗
n
α^*=\frac{W^TB^*} n
α∗=nWTB∗替换B后得:
由此便确定了α和B的值。
因此,此处的二值权重滤波器只需要通过取原权重W的sign函数即可,而最优尺度因子α通过将权重各元素取绝对值再取平均值即可得到
训练N层的二值权重CNN的算法Algorithm1:
首先将每层的滤波器通过计算B和α二值化,然后用B和α进行前向传播,然后进行反向传播,参数更新时使用带动量的SGD或ADAM优化。
XNOR-Networks
XNOR-Networks
将参数W和输入值I都进行二值化,这样卷积可通过XNOR和比特位运算高效实现:
令 X T W ≈ β H T α B X^TW≈βH^TαB XTW≈βHTαB,其中H,B均为二值矩阵,α,β为实数,近似公式为:
其中
⊙
\odot
⊙表示点乘,令Yi=XiWi,Ci=HiBi,γ=βα,则等式可变为
相似于Binary-Weights-Networks
中参数最优解的求解过程,可以得到,
这样XTW就被近似为γ*C*。
对于卷积滤波器W经过处理的每一个I中的子Tensor(与W的shape相同),都要计算一个尺度因子(figure2有两个例子,尺度因子计算公式为对应子Tensor的l1范数的平均数),因为与卷积滤波器点乘的子Tensor有很多重叠部分,会产生很多重复计算过程。故而先计算一个矩阵A:
代表每个channel的元素值绝对值的平均数,然后用一个2D滤波器k(wh矩阵)对A进行卷积,得到矩阵K,其中k的每个元素均为1/(wh),则K所存储的就是所有的尺度因子β(易证明),当获得了α(与Binary-Weight-Networks
计算方式相同)和β后就可以计算卷积操作的近似:
以上 ⊛ \circledast ⊛代表以XNOR或bitcount为基础操作的卷积操作。
训练 XNOR-Networks
:
常规CNN网络中的block:卷积
→
\to
→ BN-norm
→
\to
→ 激活
→
\to
→ 池化
XNOR-Networks
中的改进:
为了减少二值化的损失,在二值化卷积层之前就对输入进行归一化,这让数据保持0均值,因此,阈值为0可以减少量化误差(不是很懂)
XNOR-Networks
中的block:
在BinActiv中计算sign(I)和K,然后在BinConv中计算然后再进行池化,同时可以在BinConv层后加入激活层,这样可以让XNOR-Networks
与SOTA网络兼容使用。
XNOR-Networks
的训练算法与Binary-Weight-Networks
相同。
k-比特量化:
二值网络的递推,将sign函数替换为