Bi-Real-Net
Bi-Real Net: Enhancing the Performance of 1-bit CNNs With Improved Representational Capability and Advanced Training Algorithm
2018 ECCV
0. 摘要
为了使 1-bit CNNs 的图像分类准确度接近其实值网络,本文提出了 Bi-Real Net 网络结构。通过 identity shortcut 方式将实值激活(在 1bit 卷积和(或)BatchNorm 层之后)连接到连续块的激活。大幅提升了网络的表达能力,而计算成本增加几乎可以忽略。
开发了针对 1bit CNNs 的训练算法,其中有三个技术创新:
- 推导出了对于激活的不可微 sign 函数的 tight 近似;
- 提出了关于权重的具有大小感知的梯度,来更新权重;
- 使用 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 的算法的三个技术创新:
-
近似关于激活的 sign 函数的导数
提出在反向传播中用一个分段线性函数来近似其导数,该函数源自对符号函数的二阶近似的分段多项式函数。
-
关于权重的幅度感知梯度
由于直接对已经更新的梯度值进行二值化,只考虑了其符号信息没有考虑其幅度信息。所以本文提出了一个既考虑正负号又考虑幅度信息的方法。
-
初始化
作为一个高度非凸优化问题,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 倍的计算量减少。
2. RELATED WORK
减少参数数量:
- 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
二值激活和权重利用下式获得:
和 是实值激活和实值权重。由于卷积和 batch normalization 操作, 在 BNN 的训练和推理过程中始终存在。
如下图2所示,3x3 的卷积核产生的输出都是 -9~9 之间的奇数。
如下图3所示,如果有 BatchNorm 模块,就可以将整数激活转化为实值,用于二值权重在训练过程中的更新。
作者认为 BNN 表现没有实值网络好,是由于其表达能力差造成的。 作者通过 表示 的表达能力, 是一个标量、向量、矩阵或者张量。例如,一个 32 channels 的 14x14 的二值特征映射 的表达能力是 。给定一个 3x3x32 的二值权重核 , (二值卷积的输出)中每一项可以选择(-288 ~ 288)之间的偶数值,如图3(a)中所示。 因此它的表达能力就是 。注意 BatchNorm 是一个特别的操作,它不会增加数值选择的数量,只是根据不同的选择将(-288~288)缩放到特定的值。如果再使用 sign 函数,特征映射将被二值化,那么表达能力又将缩减到 。
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 处理后的数据 值可能有 289 种,而加上输入的 ,每个位置值又有了 289 种可能,所以数据 的值有 289*289 种选择,所以基于 shortcut 的 BNN 这个 block 的表达能力是 。
由于 identity shortcut ,每个 block 的表达能力都大大提升。同时带来的计算增加仅仅是两个实值的加法,而且如果动态(on the fly)计算的话,不会有额外的空间开销。
知乎这篇文章讲 BN 【传送门】,可以看到 BN 操作如下:
3.3 Training Bi-Real Net
由于权重和激活都是二值的,所以 stochastic gradient descent(SGD)不能直接用在训练 BNN 上。训练过程的两个主要挑战是:
- 如何计算激活的 sign 函数的梯度,由于 sign 是不可微的。
- 关于二值权重的 loss 的梯度太小,无法修改权重的符号。
如下图5,中间是 Clip 方法近似,©是本文提出的近似方法。
- Approximation to the derivative of the sign function with respect to activations.
激活的 sign 函数的导数的近似。
如图5(a)所示,sign 函数的导数是脉冲函数,无法用于训练。
是对不可微函数 的可微近似。如图5(b),Binaried Neural Networks 中使用 Clip 函数,其导数是阶跃函数。如图5©本文中使用 分段多项式函数近似,其函数表达式如下式左:
图5©中的阴影斜线部分是近似函数与 sign 的区别,计算可知,clip 的阴影面积是 1,而本文近似方法的阴影面积是 。且本文方法的导数是分段线性函数,如上式右。
- Magnitude-aware gradient with respect to weights.
关于权重的幅度感知梯度。
这里提出了如何更新第 个 block 的二值权重,例如 。简洁起见,这里假设只有一个权重 kernel,例如 是一个矩阵。
下图4是训练算法的图示,为了清晰起见,省略了 shortcut 模块。
如下式所示,在反向传播中使用梯度下降更新
表示逐像素求导。Binaried Neural Networks 中,如果 , 置为 1,否则置为 0。链式法则中的 可以如下表示:
其中 表示 BatchNorm 层的导数。 和 负相关。由于 , 取值也只有 -1 和 +1。
这里不确定我理解的对不对。
综合上面的分析,Binarized Neural Network 提出的梯度 仅仅与 的符号有关,而与幅度大小是相互独立的。
因此本文提出了取代上面 sign 函数的幅度感知函数:
其中 表示 中项的数量。权重更新如下:
其中
并且 与 的幅度有关(因为引入了 )。
因此, 同时与 的符号和幅度都有关系了。训练收敛后,仍然使用 获取二值权重 。在推到过程中,使用 中引入的 部分关联到 的幅度。
- Initialization
之前文中 BNN 的权重初始化源于其对应的实值网络在 ImageNet 上的预训练模型。由于实值网络中的 ReLU 函数处理结果是非负的,而 sign 是 -1 和 +1,所以实值网络对于 BNN 的初始化值并不是那么合适。
本文提出了使用 代替 ReLU 来预训练实值网络模型。
4. Experiments
下表1反映了使用本文提出的三种优化方法对比原来方法的效果。