A-卷积网络压缩方法总结( 三 )

4.1,二值网络的梯度下降现在的神经网络几乎都是基于梯度下降算法来训练的,但是二值网络的权重只有 \(\pm 1\),无法直接计算梯度信息,也无法进行权重更新 。为解决这个问题,Courbariaux 等人提出二值连接(binary connect)算法 , 该算法采取单精度与二值结合的方式来训练二值神经网络 , 这是第一次给出了关于如何对网络进行二值化和如何训练二值化神经网络的方法 。过程如下:

  1. 权重 weight 初始化为浮点
  2. 前向传播 Forward Pass:
    • 利用决定化方式(sign(x)函数)把 Weight 量化为 +1/-1, 以0为阈值
    • 利用量化后的 Weight (只有+1/-1)来计算前向传播 , 由二值权重与输入进行卷积运算(实际上只涉及加法) , 获得卷积层输出 。
  3. 反向传播 Backward Pass:
    • 把梯度更新到浮点的 Weight 上(根据放松后的符号函数,计算相应梯度值,并根据该梯度的值对单精度的权重进行参数更新)
    • 训练结束: 把 Weight 永久性转化为 +1/-1, 以便 inference 使用
4.1,两个问题网络二值化需要解决两个问题:如何对权重进行二值化和如何计算二值权重的梯度 。
1,如何对权重进行二值化?
权重二值化一般有两种选择:
  • 直接根据权重的正负进行二值化:\(x^{b}=sign(x)\) 。符号函数 sign(x) 定义如下:
\[sign(x) = \left \{\begin{matrix}-1 & x < 0 \\\\0 & x = 0 \\\\1 & x > 0\end{matrix}\right.\]
  • 进行随机的二值化,即对每一个权重,以一定概率取 \(\pm 1\)
2,如何计算二值权重的梯度?
二值权重的梯度为0 , 无法进行参数更新 。为解决这个问题,需要对符号函数进行放松,即用 \(Htanh(x) = max(-1, min(1,x))\) 来代替 \(sinx(x)\) 。当 x 在区间 [-1,1] 时,存在梯度值 1,否则梯度为 0。
4.3,二值连接算法改进之前的二值连接算法只对权重进行了二值化,但是网络的中间输出值依然是单精度的 , 于是 Rastegari 等人对此进行了改进 , 提出用单精度对角阵与二值矩阵之积来近似表示原矩阵的算法 , 以提升二值网络的分类性能,弥补二值网络在精度上弱势 。该算法将原卷积运算分解为如下过程:
\[I \times W\approx (I \times B)\alpha\]其中 \(I\in \mathbb{R}^{c\times w_{in}\times h_{in}}\) 为该层的输入张量,\(I\in \mathbb{R}^{c\times w\times h}\) 为该层的一个滤波器,\(B=sign(W)\in \{+1, -1\}^{c \times w\times h}\)为该滤波器所对应的二值权重 。
这里,Rastegari 等人认为单靠二值运算,很难达到原单精度卷积元素的结果,于是他们使用了一个单精度放缩因子 \(\alpha \in \mathbb{R}^{+}\) 来对二值滤波器卷积后的结果进行放缩 。而 \(\alpha\) 的取值,则可根据优化目标:
\[min \left \| W -\alpha B \right \|^{2}\]得到 \(\alpha = \frac{1}{n}\left |W \right |\ell{1}\) 。二值连接改进的算法训练过程与之前的算法大致相同,不同的地方在于梯度的计算过程还考虑了 \(\alpha\) 的影响 。由于 \(\alpha\) 这个单精度的缩放因子的存在,有效降低了重构误差 , 并首次在 ImageNet 数据集上取得了与 Alex-Net 相当的精度 。如下图所示:
A-卷积网络压缩方法总结

文章插图
可以看到的是权重二值化神经网络(BWN)和全精度神经网络的精确度几乎一样 , 但是与异或神经网络(XNOR-Net)相比而言 , Top-1 和 Top-5 都有 10+% 的损失 。
相比于权重二值化神经网络,异或神经网络将网络的输入也转化为二进制值,所以,异或神经网络中的乘法加法 (Multiplication and ACcumulation) 运算用按位异或 (bitwise xnor) 和数 1 的个数 (popcount) 来代替 。
更多内容,可以看这两篇文章:
  • https://github.com/Ewenwan/MVision/tree/master/CNN/Deep_Compression/quantization/BNN
  • 二值神经网络(Binary Neural Network , BNN)
4.4 , 二值网络设计注意事项