前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二值网络--Binarized Neural Networks

二值网络--Binarized Neural Networks

作者头像
用户1148525
发布2019-05-27 19:07:58
1.2K0
发布2019-05-27 19:07:58
举报

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1436691

Binarized Neural Networks NIPS2016

https://github.com/MatthieuCourbariaux/BinaryNet

本文针对二值网络提出了 训练方法:首先定义一个二值化函数,其次搞定二值函数计算梯度反向传播问题,有了这两个就可以进行二值网络的训练了。

1 Binarized Neural Networks

Deterministic vs Stochastic Binarization 二值化函数

我们对 weights 和 activations 都做二值化处理,+/-1,这两个值从硬件角度来看是很有优势的

这里介绍了两种二值化函数:

1) deterministic binarization决定性二值化,当一个值大于等于 0,二值化为 1,否则为 -1。这个二值化函数很容易实现,实际工作中表现也不错;就是一个符号函数。

2)stochastic binarization 随机性二值化,以一定概率二值化为 1,否则为 -1,这个概率由 一个 hard sigmoid 决定,随机性二值化实现比较难,所以一般我们不用它。

Gradient Computation and Accumulation

尽管我们的 BNN 训练方法使用了 二值化的 weights 和 activation 来计算参数梯度,weights的实数梯度被保存在 实数变量中。 Stochasic Gradient Descent (SGD) 的正常工作是需要 实数值 weights。 SGD 以一个 small and noisy steps 来探索参数空间。 that noise is averaged out by the stochastic gradient contributions accumulated in each weight,这种噪声在 weights 中被平均了。 所以保持这些 accumulators 足够的位数是很重要的。

梯度使用实数来表示原因:

1)梯度的值很小

2)梯度具有累加效果,即梯度都带有一定的噪音,而噪音一般认为是服从正态分布的,所以,多次累加梯度才能把噪音平均消耗掉

此外 在计算参数梯度时,对 weights 和 activations 增加 噪声算是一种 正定化形式,a form of regularization,可以帮助提高系统泛化性能。Dropout 在计算参数梯度时, 随机的将一半的 activations 清零。我们的 BNN训练方法可以看做是一个 Dropout 变体,我们二值化了

weights 和 activations

Propagating Gradients Through Discretization

符号函数不好进行梯度的反向传播啊,因此就把它近似成了右边的Htanh(x)的函数,这样在-1,1区间内导数就等于1。

在具体的算法使用中,对于隐含层单元:

activations 直接使用决定式的二值化函数得到二值化的激活值。

weights 对于权重:

1) 在进行参数更新时,要时时刻刻把超出-1,1的部分给裁剪了。即权重参数始终是-1,1之间的实数。

2) 在使用参数是,要将参数进行二值化。

Batch Normalization,简称BN。所谓的BN是指在数据经过一层进入下一层之前,需要对数据进行归一化,使之均值为0,方差为1。这样可以使得各层的参数量级上没有太大的差别。

有三个优点:

1)加速训练

2)减小权重的值的尺度的影响

3)归一化所带来的噪声也有模型正则化的作用。

但是,BN有一个缺点,那就是在训练时,因为要对数据进行scale,所以有很多矩阵乘法,导致训练时间过长。

因为二值化这一特殊情况,所以可以对BN进行优化,可以在不进行乘法的情况下近似计算BN,这就是shift-based Batch Normalization。

输入层特征编码

整个过程基本就是这样。还有一点,输入层的特征是没有进行二值化的,那怎么办呢?由于图像像素值分布在0,255之间,所以可以用8比特来表示,这样就能将输入的实值像素值变成二值化的编码了。整体BNN的流程如下,将乘法运算都变成了XNOR运算,可想而知其运算会很快。

下面是梯度推导公式,这个梯度只和实数权重矩阵 W 的符号有关,和其幅值无关。

参考:

https://blog.csdn.net/stdcoutzyx/article/details/50926174

https://blog.csdn.net/elaine_bao/article/details/50950969

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年04月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档