【Binarized Neural Networks】论文笔记

[NIPS ‘16]论文地址:https://arxiv.org/pdf/1602.02830.pdf
代码地址:https://github.com/MatthieuCourbariaux/BinaryNet
这篇文章提出了一个新的网络:二值化网络(BNN),在运行时使用二值权重和激活。在训练时,二值权重和激活用于计算参数梯度。即网络权重和激活参数只有1和-1两种。

二值化准则

文章给出了2种二值化函数。 第一种是决策式二值化:
这里写图片描述
第二种是随机二值化:
这里写图片描述
这里写图片描述
看公式第二种随机二值化更合理,但是每次生成随机数的时候非常耗时,所以文章中采用的第一种方法。

梯度计算和累加

虽然BNN使用二值权重和激活来计算参数梯度,但由于两个原因,导致梯度不得不用较高精度的实数而不是二值进行存储。两个原因如下:
梯度的值的量级很小
梯度具有累加效果,即梯度都带有一定的噪音,而噪音一般认为是服从正态分布的,所以,多次累加梯度才能把噪音平均消耗掉。
另一方面,二值化相当于给权重和激活值添加了噪声,而这样的噪声具有正则化作用,可以防止模型过拟合。所以,二值化也可以被看做是Dropout的一种变形,Dropout是将激活值的一般变成0,从而造成一定的稀疏性,而二值化则是将另一半变成1,从而可以看做是进一步的dropout。

离散化梯度传播

如果采用上面的第一种二值化函数求导的话,那么求导后的值都是0。所以文章采用了一种方法,将sign(x)进行宽松。这样,函数就变成可以求导的了。
这里写图片描述
【Binarized Neural Networks】论文笔记_第1张图片

BNN训练算法

Binarize()函数对激活和权重进行二值化。
Clip()函数进行权重的裁剪。
BatchNorm()函数进行批量标准化。
BackBatchNorm()函数在反向传播中进行批量标准化。
Update()函数用于更新参数。
在下图中,右上角带有b字母小标的变量均为二值之后的变量。
【Binarized Neural Networks】论文笔记_第2张图片
前向传播时,首先对权重进行二值化处理,然后将二值化权重与上一层的输出相乘,对乘积进行批量标准化处理,二值化后变成下一层的输入。注意每一层的输出都是二值化之后的。
反向传播时,要注意梯度使用的是实值,不是二值化值。求权重梯度时是对二值化后的权重求梯度,但是更新时利用上面求得的梯度对实数值权重进行更新。
权重更新时要将超出[-1,1]之外的权重值裁剪掉。

BN优化算法

【Binarized Neural Networks】论文笔记_第3张图片
AP2(X)函数求的是与X最接近的2的幂次方。AP2(3.14)=4;AP2(2.5)=2。<<>>符号代表的位左移和位右移,利用位移优化乘法操作。

ADAM优化算法

【Binarized Neural Networks】论文笔记_第4张图片
ADAM利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。同样利用位移优化乘法操作。

第一层的操作

因为网络中所有层的激活和参数都是二值化的,但第一层的输入却是连续值的,因为是像素。但是,作者认为这不是一个大问题,因为ConvNet的第一层通常是最小的卷积层,无论是参数还是计算上面。作者将第一层也进行了处理。
在8位输入的情况下:
【Binarized Neural Networks】论文笔记_第5张图片
X是输入的8位向量,Xn是输入的有效位,Wb是1-bit权重的向量,S是得到的加权和(感觉就是二进制加权)。

整个网络计算

【Binarized Neural Networks】论文笔记_第6张图片
这里写的XNOR(异或非)但是实际计算时用的是XOR(异或)。在程序中-1值用0表示。

乘法优化

假设二值化后X=[1,-1,1,1,-1],W=[-1,1,1,-1,-1],

        正常乘法计算结果应该是X * W = 1 * (-1) + (-1) * 1 + 1 * 1 + 1 * (-1) + (-1) * (-1) = -1

程序中-1值用0表示:X=[1,0,1,1,0],W=[0,1,1,0,0],

                 X与W异或(相同为0,不同为1)计算之后得到:a=11010,
             程序中得到结果的公式为:-(2 * popcount(a) - len(a)) = -(2 * 3 - 5) = -1
popcount(a)函数返回计算结果a中有几个1,len(a)函数返回计算结果a的长度。

你可能感兴趣的:(新型网络,网络压缩,神经网络,论文笔记)