作者‖ Cocoon
编辑‖ 3D视觉开发者社区
导语:
本文是由香港科技大学发布于ECCV 2020的论文,是Bi-Real Net作者对二值化研究领域的最新成果,拥有着69.4%的精度,作者通过简单的优化激活函数的操作改进便取得了惊人的效果,本文将详细解读ReActNet的具体方法。
论文链接: https://arxiv.org/pdf/2003.03488.pdf
代码地址: https://github.com/liuzechun/ReActNet
概述
通常认为的二值神经网络,指模型权重以及激活值均为二进制数值的模型,被认为是最有前途的神经网络压缩方法之一。但显然,二值的表达与浮点数的表达存在着差距,而本篇所介绍的 R e A c t N e t ReActNet ReActNet,其目的就是希望在不引入额外计算开销的前提下,能够缩小这之间的差距。
论文首先构建了一个 B a s e l i n e Baseline Baseline网络,具体的构建方式为使用不引入参数的 s h o r t c u t shortcut shortcut修改某一浮点数网络,并将其二值化。该 B a s e l i n e Baseline Baseline网络在精度和效率上有较好的 t r a d e trade trade- o f f off off,比大多数已有的二值网络效果都要好。
通过大量的实验,文章发现,二值网络的性能对激活函数的分布非常敏感。基于该发现,文章提出将传统的 S i g n Sign Sign以及 P R e L U PReLU PReLU函数进行“推广”,并将“推广”后的函数分别命名为 R S i g n RSign RSign以及 R P R e L U RPReLU RPReLU,这样做的目的是希望在不引入额外计算开销的前提下,显式地学习分布的“ r e s h a p e reshape reshape”和“ s h i f t shift shift”。
最后,文章提出了所谓的“ D i s t r i b u t i o n a l L o s s Distributional Loss DistributionalLoss”来进一步地对二值网络进行强化,目的是使其与浮点数网络学到近似的输出分布。
合并了上述想法后所攒出来的网络即命名为 R e A c t N e t ReActNet ReActNet,其性能远超出当时已有的二值网络。
方法
一比特卷积
对于权重已经一比特化的卷积层来说,其乘法运算可以被按位运算 X N O R XNOR XNOR以及 p o p c o u n popcoun popcount操作替换,具体为:
X b ∗ W b = popcount ( XNOR ( X b , W b ) ) \mathcal{X}_{b} * \mathcal{W}_{b}=\operatorname{popcount}\left(\operatorname{XNOR}\left(\mathcal{X}_{b}, \mathcal{W}_{b}\right)\right) Xb∗Wb=popcount(XNOR(Xb,Wb))
其中 W b \mathcal{W_b} Wb以及 X b \mathcal{X_b} Xb分别表示二值权重矩阵以及二值激活。具体地,权重和激活通过以下的方式进行二值化:
x b = Sign ( x r ) = { + 1 , if x r > 0 − 1 , if x r ≤ 0 , w b = ∥ W r ∥ l 1 n Sign ( w r ) = { + ∥ W r ∥ l 1 ∥ , if w r > 0 − ∥ W r n ∥ l 1 n , if w r ≤ 0 x_{b}=\operatorname{Sign}\left(x_{r}\right)=\left\{\begin{array}{l} +1, \text { if } x_{r}>0 \\ -1, \text { if } x_{r} \leq 0 \end{array}, \quad w_{b}=\frac{\left\|\mathcal{W}_{r}\right\|_{l 1}}{n} \operatorname{Sign}\left(w_{r}\right)=\left\{\begin{array}{l} +\frac{\left\|\mathcal{W}_{r}\right\|_{l 1}}{\|}, \text { if } w_{r}>0 \\ -\frac{\left\|\mathcal{W}_{r}^{n}\right\|_{l 1}}{n}, \text { if } w_{r} \leq 0 \end{array}\right.\right. xb=Sign(xr)={
+1, if xr>0−1, if xr≤0,wb=n∥Wr∥l1Sign(wr)={
+∥∥Wr∥l1, if wr>0−n∥Wrn∥l1, if wr≤0
其中,下标 b b b和下标 r r r分别指代二值和浮点数。 ∥ W r ∥ l 1 n \frac{\left\| \mathcal{W}_{r}\right\|_{l 1}}{n} n∥Wr∥l1表示权重绝对值的平均值,其作用为作为尺度因子减少浮点数与二值之间的差距,在 X N O R − N e t XNOR-Net XNOR−Net(Rastegari 等,2016)中,也应用了类似的尺度因子。然而,随着后续所谓的 R e A c t ReAct ReAct操作的引入,这个尺度因子将变得不再重要。
Baseline网络
许多二值化工作选择的浮点数网络是<