二值化网络
原文题目: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的概率越大。


算法流程
- 对所有权重进行二值化处理(bias不进行二值化,因为二值化是为了减少乘法运算,而bias本来就是加法操作,没有乘法)
- 进行前向和反向传播,过程中所有的操作均为浮点运算。
- 根据反向传播时计算的梯度更新权重,注意更新的是二值化前的权重,更新后做权重做clip。
- 一个batch结束,取下一个batch的数据并返回1
注意
上述第3步中的clip(下称a)和“随机版”二值化中的clip(下称b)不是一回事。二者有两点不同:
- a是因为在对权重做二值化时所有>1的数都会变成1,所以网络训练过程中的梯度对权重的真实大小不敏感,不加以限制可能会使权重变的非常大。b是因为做二值化本身的需要。
- a是将权重限制在了[-1, 1],b是将权重限制到了[0, 1]

训练中用到的tricks
- 所有实验均用BN层,因为BN层不仅加快训练速度,还使得权重的幅值不会太大
- 用ADAM优化器,貌似是实验发现针对本实验而言,这个优化器效果最好。
- 学习率大小的调整方式来源于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阶段的二值化
有三种方法:
- 测试阶段就直接使用二值化后的网络
- 测试阶段使用浮点化的网络。二值化仅用于加速网络训练。
- “随机版二值化”方法把训练好的网络采样出多种二值化版本,网络最终的输出采用这个二值化网络的输出的均值。
实验
实验只在MNIST和CIFAR和SVHN上进行了实验。
三值化网络
待续。。
网友评论