美文网首页
神经网络量化:二值化与三值化网络

神经网络量化:二值化与三值化网络

作者: cheerss | 来源:发表于2019-05-04 11:31 被阅读0次

二值化网络

原文题目:BinaryConnect: Training Deep Neural Networks with binary weights during propagations

Motivation

卷积计算中主要就是乘法和加法运算,如果将权重变成二值,即只有1和-1,那么就可以把所有的乘法运算消除,只剩下加法运算和取反操作。因为任何数乘以1或者-1都是它自身或其相反数。

算法

如何二值化

确定版:令所有大于0的权重为1,小于0的为-1,如下图

随机版:将所有的权重做一次clip(文中称为hard sigmoid)值限制在[0, 1]之间,然后对所有权重依概率取1或者-1,所以在clip后,越接近1的权重最后取1的概率越大,反之取-1的概率越大。

算法流程

  1. 对所有权重进行二值化处理(bias不进行二值化,因为二值化是为了减少乘法运算,而bias本来就是加法操作,没有乘法)
  2. 进行前向和反向传播,过程中所有的操作均为浮点运算。
  3. 根据反向传播时计算的梯度更新权重,注意更新的是二值化前的权重,更新后做权重做clip。
  4. 一个batch结束,取下一个batch的数据并返回1
注意

上述第3步中的clip(下称a)和“随机版”二值化中的clip(下称b)不是一回事。二者有两点不同:

  1. a是因为在对权重做二值化时所有>1的数都会变成1,所以网络训练过程中的梯度对权重的真实大小不敏感,不加以限制可能会使权重变的非常大。b是因为做二值化本身的需要。
  2. a是将权重限制在了[-1, 1],b是将权重限制到了[0, 1]
算法流程

训练中用到的tricks

  1. 所有实验均用BN层,因为BN层不仅加快训练速度,还使得权重的幅值不会太大
  2. 用ADAM优化器,貌似是实验发现针对本实验而言,这个优化器效果最好。
  3. 学习率大小的调整方式来源于Understanding the difficulty of training deep feedforward neural networks和A method for unconstrained convex minimization problem with the rate of convergence o(1/k2)

Inference阶段的二值化

有三种方法:

  1. 测试阶段就直接使用二值化后的网络
  2. 测试阶段使用浮点化的网络。二值化仅用于加速网络训练。
  3. “随机版二值化”方法把训练好的网络采样出多种二值化版本,网络最终的输出采用这个二值化网络的输出的均值。

实验

实验只在MNIST和CIFAR和SVHN上进行了实验。

三值化网络

待续。。

相关文章

网友评论

      本文标题:神经网络量化:二值化与三值化网络

      本文链接:https://www.haomeiwen.com/subject/qzzznqtx.html