Binarized Neural Networks

本文介绍了一种名为BNNs的二值神经网络,它在CNNs的基础上,将权重和激活值量化为1bit,大幅提高了计算效率。文章详细解释了二值化方法、梯度处理以及优化技巧,并提供了实验结果。

论文地址:https://arxiv.org/pdf/1602.02830.pdf
代码:
Theano框架:https://github.com/MatthieuCourbariaux/BinaryNet
Torch框架:https://github.com/itayhubara/BinaryNet

主要内容

BNNs是在CNNs的基础上,将权重和激活值量化为1bit,即取值为+1和-1,这样前向传播时就能减少内存大小和访问,同时大部分的算术运算也转化成位运算,计算效率大大提高。作者还编写了一个二进制乘法的GPU内核,在MNIST上比普通的GPU快7倍,而且不损失任何精度。

权重、激活值和梯度的处理

作者提出两种二值化方法:
1.Deterministic(确定法)
在这里插入图片描述
即直接使用符号函数。
2.Stochastic(随机法)
在这里插入图片描述
其中,
在这里插入图片描述
虽然随机法更加合理,但实现比较困难,需要硬件生成随机数,所以一般都是用确定法。

需要注意的是,梯度并未二值化。因为SGD的步长很小,而且梯度是累加的即带有一定的噪声,而噪声一般都服从正态分布,需要多次累加梯度来平均噪声。因此需要高精度的实数梯度。

BNN方法可以看作是Dropout的变形,区别在于Dropout是将一半的激活值置0,而BNN则是进一步将另一半置1。

二值化后还存在一个问题:sign函数是常数函数,导数为0,因此无法进行梯度传播。因此作者采用了STE的思路,用饱和STE的方法进行处理:
假设C为损失函数,有:
在这里插入图片描述
在这里插入图片描述
其中,gr=∂C∂rg_r=\frac{\partial C}{\partial r}gr=rCgq=∂C∂qg_q=\frac{\partial C}{\partial q}gq=qC,而1∣r∣≤11_{|r| \leq 1}1r1表示当−1≤r≤1-1 \leq r \leq 11r1时,梯度为1,否则梯度为0。可以看作用Htanh函数代替sign函数,即:
在这里插入图片描述
解决上面的问题后,给出如下训练算法:
在这里插入图片描述

优化技巧

Shift based Batch Normalization:主要用AP2(x)操作和移位操作代替乘法。AP2(x)是求与x的值最接近的2的次幂。具体如下:
在这里插入图片描述
Shift based AdaMax:
在这里插入图片描述
第一层:除了第一层输入,其他所有层的输入都是二元的,不过这影响不大。一方面,输入层相对于其他层通道更少(如rgb);另一方面,连续的输入转化成定点是很容易的。对于8bit输入,有:
在这里插入图片描述

前向传播时各层的计算方法如下:
在这里插入图片描述
该算法利用±1\pm 1±1乘法运算表的特点,用同或xnor代替乘法。

一些实验结果

在这里插入图片描述
在这里插入图片描述
Theano使用的是普通的BN层。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值