您的位置:首页 > 大数据 > 人工智能

BinaryConnect: Training Deep Neural Networks with binary weights during propagations

2017-06-02 15:21 363 查看

1 Introduction

      深度神经网络(DNN)大大推动了广泛的任务的state-of-the-art,特别是在语音识别[1,2]和计算机视觉方面,特别是图像中的物体识别[3,4]。最近,深度学习在自然语言处理方面取得重要进展,特别是统计机器翻译[5,6,7]。有趣的是,造成这一重大进展的关键因素之一是图形处理单元(GPU)的出现,加速10到30倍,从[8]开始,类似的改进与分布式训练[9,10]。事实上,在更多数据上训练大型模型的能力使得观察到了过去几年中的这种突破。今天,设计新的深度学习算法和应用程序的研究人员和开发人员经常发现自己受到计算能力的限制。随着在低功耗设备(不同于GPU)放置深度学习系统的推动,大大增加了针对深层网络的专业硬件研发的兴趣[11,12,13]。

       在深层网络的训练和应用过程中进行的大部分计算都考虑了实值权重乘以实值激活(在识别或者反向传播算法的前向传播阶段)或梯度(在反向传播算法的后向传播阶段)。本文提出了一种称为BinaryConnect的方法,通过强制将这些正向和反向传播中使用的权重二值化,即仅限于两个值(不一定是0和1)来消除对这些乘法的需要。我们展示了可以在置换不变的MNIST,CIFAR-10和SVHN上,BinaryConnect实现state-of-the-art的结果。

       下面两条使其具有可行性:(不懂)

       1.需要足够的精度来积累和平均大量的随机梯度,但是噪声权重(我们可以将离散化视为一种噪声形式的少数值,特别是如果我们使这种离散化随机)与深度学习的主要优化算法--随机梯度下降(SGD)是可兼容的。 SGD通过进行小的噪声尝试来探索参数空间,并通过每个权重累积的随机梯度贡献来平均噪声。因此,重要的是要为这些累加器保持足够的精度,这一切都是绝对需要高精度的。 [14]和[15]表明可以使用随机或随机舍入来提供无偏离的离散化。[14]已经表明,SGD需要精度至少为6到8位的权重,[16]成功地训练了具有12位动态定点计算的DNN。此外,脑突触的估计精度在6位和12位之间变化[17]。

      2.噪声权重实际上提供了一种正则化形式,可以帮助泛化能力更好,如先前所示的变分权重噪声[18],Dropout [19,20]和DropConnect [21],这增加了激活或权重的噪声。例如,最接近BinaryConnect的DropConnect [21]是非常有效的正则化器,它在传播过程中随机地用0替换一半的权重。以前的工作表明,只有权重的预期值需要高精度,而噪声实际上是有益的。

    本文的主要贡献如下。

•我们引入了BinaryConnect,它是一种在正向和反向传播期间用二值化权重训练DNN的方法(第2节)。

•我们显示BinaryConnect是一个正则化器,我们在置换不变的MNIST,CIFAR-10和SVHN(第3节)上获得近似最先进的结果。

•我们使BinaryConnect的代码公开

2 BinaryConnect

        在本节中,我们给出BinaryConnect的更详细的视图,考虑选择哪两个值,如何离散化,如何训练以及如何执行inference。

2.1 +1或-1

       应用DNN主要包括卷积和矩阵乘法。 因此,DL的关键算术运算是乘加运算。 人工神经元基本上是计算其输入的加权和的乘加器。

       BinaryConnect在传播过程中将权重约束为+1或-1。 结果,许多乘加操作被简单的加法(和减法)代替。 这是一个巨大的增益,因为固定点加法器在面积和能量方面比定点乘加器要便宜得多[22]。(不懂)

2.2 Deterministic vs stochastic binarization

     二值化操作将实值权重转换为两个可能的值。 一个非常简单的二值化操作将基于符号函数:



其中wb是二值化权重,w是实值权重。 虽然这是一个确定性操作,但对隐藏单元的许多输入权重的这种平均离散化可以弥补信息的丢失(不懂)。 允许进行更精细和更正确的平均过程的另一种方法是随机二值化:



我们使用这样一个hard sigmoid而不是soft版本,因为它在计算上要少得多(在软件和专门的硬件实现中),并且在我们的实验中产生了出色的结果。 它类似于[23]引入的“hard tanh”非线性。 它也是分段线性的,对应于ReLU的有界形式[24]。

2.3 Propagations vs updates

       让我们考虑与SGD更新的反向传播不同的步骤,以及在这些步骤中离散权重是否有意义。

       1.给定DNN输入,逐层计算神经元激活,直到顶层,这是DNN在给定输入下的输出。该步骤被称为正向传播。

       2.给定DNN目标,计算训练目标的梯度,考虑每层的激活,从顶层开始,逐层下移直到第一个隐藏层。该步骤被称为反向传播或反向传播的反向阶段。

       3.计算梯度,考虑每层的参数,然后使用其计算的梯度及其先前的值更新参数。此步骤称为参数更新。

 

     
      理解BinaryConnect的一个关键点是,我们只在前向和后向传播(步骤1和2)中二值化权重,而不是在参数更新(步骤3)期间进行二值化,如算法1所示。在更新过程中权重保持良好的精度是SGD能够工作所需要的。由于通过梯度下降获得的这些参数变化很小,即SGD在最大程度改善训练目标的方向上执行大量几乎无穷小的变化(加上噪音)。执行所有这一切的方法是假设在训练结束时最重要的是权重的符号w *,但是为了弄清楚,我们对连续值的数量进行了很多小的改变w,只有到最后才考虑它的符号:



    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  深度学习
相关文章推荐