Bi-Real Net: Enhancing the Performance of 1-bit CNNs With Improved Representational Capability and Advanced Training Algorithm

2018 ECCV

code: https://github.com/liuzechun/Bi-Real-net

0. 摘要

为了使 1-bit CNNs 的图像分类准确度接近其实值网络,本文提出了 Bi-Real Net 网络结构。通过 identity shortcut 方式将实值激活(在 1bit 卷积和(或)BatchNorm 层之后)连接到连续块的激活。大幅提升了网络的表达能力,而计算成本增加几乎可以忽略。

开发了针对 1bit CNNs 的训练算法,其中有三个技术创新:

  1. 推导出了对于激活的不可微 sign 函数的 tight 近似;
  2. 提出了关于权重的具有大小感知的梯度,来更新权重;
  3. 使用 clip 函数而不是 ReLU 来预训练实值 CNN 模型,以更好的初始化 Bi-Real net。

本文提出的算法在 ImageNet 上的实验,在 18 layers 和 34 layers 上分别得到了 56.4% 和 62.2% top-1 accuracy。相比之前的 SotA (比如 XNOR Net)在更节省内存和更低计算成本的情况下实现了高达 10% 的 top-1 准确性提升。

1. INTRODUCTION

BNN 又称为 1bit CNNs。现有的 BNN 方法在小数据集上可以比拟实值网络的精度,但是在 ImageNet 这样的大数据集上遭遇了严重的性能下滑,可见 1bit CNNs 不足以覆盖大规模数据集的多样性。这里对 XNOR-Net 概括的很好,用绝对平均权重和激活的方法提升 BNN 的表现。因为 XNOR-Net 找到分布的中心,以此为基准进行 sign 二值化。

在推理过程中,由于 bit-counting 操作,BNN 会产生整数输出。如果有 BatchNorm 层的话会产生实值输出。但是这些实值被紧跟着的 sign 函数编程 +1 和 -1。如图1(a)所示。很显然,这会导致大量信息的丢失,于是作者通过一个简单有效的操作将实值 shortcut 累加到下一个卷积模块上。大幅提高了模型的表型能力,并且只带了一些简单的加法操作,没有额外的空间占用。

作者进一步提出了用于训练 1bit CNNs 的算法的三个技术创新:

  1. 近似关于激活的 sign 函数的导数

    提出在反向传播中用一个分段线性函数来近似其导数,该函数源自对符号函数的二阶近似的分段多项式函数。

  2. 关于权重的幅度感知梯度

    由于直接对已经更新的梯度值进行二值化,只考虑了其符号信息没有考虑其幅度信息。所以本文提出了一个既考虑正负号又考虑幅度信息的方法。

  3. 初始化

    作为一个高度非凸优化问题,1 bit CNNs 的训练对初始值是敏感的。以往的初始值利用的是使用 ReLU 函数作为激活的实值预训练模型。而本文采用 clip 函数作为激活函数,预训练结果更贴近二值激活。

这三种方法不仅适用于 Bi-Real Net 也适用于其他网络结构。使用 18-layer Bi-Real net 三种方法对于 top-1 accuracy 的提升分别是:are 12%, 23% and 13%。如果利用上述三种优化方法并使用专门设计的 shortcut,Bi-Real net 可以实现 56.4% and 62.2% top-1 accuracy with 18-layer and 34-layer structures,respectively。相比全精度的 CNN 实现了 16 倍内存节省和 19 倍的计算量减少。

减少参数数量:

  • SqueezeNet:用 1x1 的卷积核代替 3x3 的卷积核,实现了 50 倍的参数量减少;
  • FitNets:通过小而深的学生网络模仿大型的教师网络,在 CIFAR-10 上取得相似精度的同时,实现了 10.4 倍参数量的减少;
  • Sparse CNN:利用系数矩阵操作,将 90% 以上的参数归零,来加速学习过程;
  • Deep Compression:使用连接剪枝、再训练量化和霍夫曼编码来减少神经连接的数量,减少了内存空间的使用。

这都是一些 15、16 年的老方法。

参数量化:

  • DoReFaNet 和 QNN 使用 1bit 的权重和 2bit 的激活,在 ImageNet 上分别实现了比实值 AlexNet 低了 6.1% 和 4.9% 的不错表现。
  • BinaryNet 在 MNIST 和 CIFAR-10 上使用 1bit 权重和 1bit 激活实现了可与全精度网络相比较的精度。
  • XNOR-Net 给二值乘上权重核的绝对平均值来提升网络 BinaryNet。
  • ABC-Net 使用更多的 weight base 和 activation base 来提升网络精度。

3. Methodology

3.1 Standard 1-bit CNNs and Its Representational Capability

二值激活和权重利用下式获得:

ara_rwrw_r 是实值激活和实值权重。由于卷积和 batch normalization 操作,ara_r 在 BNN 的训练和推理过程中始终存在。

如下图2所示,3x3 的卷积核产生的输出都是 -9~9 之间的奇数。

如下图3所示,如果有 BatchNorm 模块,就可以将整数激活转化为实值,用于二值权重在训练过程中的更新。

作者认为 BNN 表现没有实值网络好,是由于其表达能力差造成的。 作者通过 R(x)\mathbb{R}(\mathbf{x}) 表示 x\mathbf{x} 的表达能力,x\mathbf{x} 是一个标量、向量、矩阵或者张量。例如,一个 32 channels 的 14x14 的二值特征映射 A\mathbf{A} 的表达能力是 R(A)=214×14×32=26272\mathbb{R}(\mathbf{A}) = 2^{14 \times 14 \times 32} = 2^{6272} 。给定一个 3x3x32 的二值权重核 W\mathbf{W}AW\mathbf{A} \otimes \mathbf{W} (二值卷积的输出)中每一项可以选择(-288 ~ 288)之间的偶数值,如图3(a)中所示。 因此它的表达能力就是 R(AW)=2896272\mathbb{R}(\mathbf{A} \otimes \mathbf{W}) = 289^{6272} 。注意 BatchNorm 是一个特别的操作,它不会增加数值选择的数量,只是根据不同的选择将(-288~288)缩放到特定的值。如果再使用 sign 函数,特征映射将被二值化,那么表达能力又将缩减到 262722^{6272}

3.2 Bi-Real Net Model and Its Representational Capability

下图3(b)通过一个简单的 shortcut 在 sign 函数之前保留实值激活,来增加 BNN 的表达能力。可以看到一个 block 是 “Sign → 1-bit convlution → batch normalization → addition operator”。由于 BN 处理后的数据 Arl+1A_r^{l+1} 值可能有 289 种,而加上输入的 ArlA_r^{l} ,每个位置值又有了 289 种可能,所以数据 Aaddl+1A_{add}^{l+1} 的值有 289*289 种选择,所以基于 shortcut 的 BNN 这个 block 的表达能力是 (2892)6272(289^2)^{6272}

由于 identity shortcut ,每个 block 的表达能力都大大提升。同时带来的计算增加仅仅是两个实值的加法,而且如果动态(on the fly)计算的话,不会有额外的空间开销。

知乎这篇文章讲 BN 【传送门】,可以看到 BN 操作如下:

3.3 Training Bi-Real Net

由于权重和激活都是二值的,所以 stochastic gradient descent(SGD)不能直接用在训练 BNN 上。训练过程的两个主要挑战是:

  1. 如何计算激活的 sign 函数的梯度,由于 sign 是不可微的。
  2. 关于二值权重的 loss 的梯度太小,无法修改权重的符号。

如下图5,中间是 Clip 方法近似,©是本文提出的近似方法。

  • Approximation to the derivative of the sign function with respect to activations.

激活的 sign 函数的导数的近似。

如图5(a)所示,sign 函数的导数是脉冲函数,无法用于训练。

F(Arl,t)F(\mathbf{A}_r^{l,t}) 是对不可微函数 Sign(Arl,r)Sign(\mathbf{A}_r^{l,r}) 的可微近似。如图5(b),Binaried Neural Networks 中使用 Clip 函数,其导数是阶跃函数。如图5©本文中使用 分段多项式函数近似,其函数表达式如下式左:

图5©中的阴影斜线部分是近似函数与 sign 的区别,计算可知,clip 的阴影面积是 1,而本文近似方法的阴影面积是 23\frac{2}{3} 。且本文方法的导数是分段线性函数,如上式右。

  • Magnitude-aware gradient with respect to weights.

关于权重的幅度感知梯度。

这里提出了如何更新第 ll 个 block 的二值权重,例如 Wbl{1,+1}\mathbf{W}_b^l \in \{-1, +1\} 。简洁起见,这里假设只有一个权重 kernel,例如 Wbl\mathbf{W}_b^l 是一个矩阵。

下图4是训练算法的图示,为了清晰起见,省略了 shortcut 模块。

如下式所示,在反向传播中使用梯度下降更新 Wrl\mathbf{W}_r^l

Wbl,tWrl,t\frac{\partial \mathbf{W}_b^{l,t}}{\partial \mathbf{W}_r^{l,t}} 表示逐像素求导。Binaried Neural Networks 中,如果 Wrl,t(i,j)[1,1]\mathbf{W}_r^{l,t}(i,j) \in [-1, 1]Wbl,t(i,j)Wrl,t(i,j)\frac{\partial \mathbf{W}_b^{l,t}(i,j)}{\partial \mathbf{W}_r^{l,t}(i,j)} 置为 1,否则置为 0。链式法则中的 LWbl,t\frac{\partial \mathcal{L}}{\partial \mathbf{W}_b^{l,t}} 可以如下表示:

其中 θl,t=Arl+1,tAml,t\theta^{l,t} = \frac{\partial \mathbf{A}_r^{l+1,t}}{\partial \mathbf{A}_m^{l,t}} 表示 BatchNorm 层的导数。LWbl,t\frac{\partial \mathcal{L}}{\partial \mathbf{W}_b^{l,t}}Wbl,t\mathbf{W}_b^{l,t} 负相关。由于 Wbl,t{1,+1}\mathbf{W}_b^{l,t} \in \{-1,+1\}LWbl,t\frac{\partial \mathcal{L}}{\partial \mathbf{W}_b^{l,t}} 取值也只有 -1 和 +1。

这里不确定我理解的对不对。

综合上面的分析,Binarized Neural Network 提出的梯度 LWrl,t\frac{\partial \mathcal{L}}{\partial \mathbf{W}_r^{l,t}} 仅仅与 Wrl,t\mathbf{W}_r^{l,t} 的符号有关,而与幅度大小是相互独立的。

因此本文提出了取代上面 sign 函数的幅度感知函数:

其中 Wrl,t|\mathbf{W}_r^{l,t}| 表示 Wrl,t\mathbf{W}_r^{l,t} 中项的数量。权重更新如下:

其中

并且 θl,t\overline{\theta}^{l,t}Wrl,t\mathbf{W}_r^{l,t} 的幅度有关(因为引入了 Wrl,tWrl,t\frac{\|\mathbf{W}_r^{l,t}\|}{|\mathbf{W}_r^{l,t}|})。

因此, LWrl,t\frac{\partial \mathcal{L}}{\partial \mathbf{W}_r^{l,t}} 同时与 Wrl,t\mathbf{W}_r^{l,t} 的符号和幅度都有关系了。训练收敛后,仍然使用 Sign(Wrl)Sign(\mathbf{W}_r^l) 获取二值权重 Wbl\mathbf{W}_b^l 。在推到过程中,使用 θl\theta^l 中引入的 Wrl,tWrl,t\frac{\|\mathbf{W}_r^{l,t}\|}{|\mathbf{W}_r^{l,t}|} 部分关联到 Wbl\mathbf{W}_b^l 的幅度。

  • Initialization

之前文中 BNN 的权重初始化源于其对应的实值网络在 ImageNet 上的预训练模型。由于实值网络中的 ReLU 函数处理结果是非负的,而 sign 是 -1 和 +1,所以实值网络对于 BNN 的初始化值并不是那么合适。

本文提出了使用 clip(1,x,1)clip(-1, x, 1) 代替 ReLU 来预训练实值网络模型。

4. Experiments

下表1反映了使用本文提出的三种优化方法对比原来方法的效果。