【干货】二值神经网络:让AlphaGo能在手腕运行


赢得围棋人机大战的AlphaGo为了运行神经网络,用了280块GPU,功率超过一百个李世石[1]。

这种使用浮点计算的神经网络要求的大存储空间和大计算量,严重阻碍了其在手机、手表和移动机器人等设备上的应用。二值神经网络设法让计算主要在正1或负1间进行,几十倍地降低了网络大小和计算量,但一直以来难以达到高预测准确率。最新的进展大幅提高了二值神经网络的预测准确率并接近实用水平。

康奈尔大学管理的预印本网站arxiv.org以第一时间发表最新研究结果而闻名,比如佩雷尔曼关于庞加莱猜想关键步骤的证明。从2015年年底以来,有心人可以注意到,一场没有发令枪声的赛跑正在arxiv.org上进行。这次的主角是二值神经网络——一种大部分运算在正1或负1间进行的革命性的神经网络。

自2012年Alex Krizhevsky与GeoffreyHinton在百万图片量级的ImageNet数据集上的突破性工作以来,神经网络迅速在计算机视觉、语音识别、自然语言处理等领域更新了多项纪录,并在手写体汉字识别、自然图片分类等问题上先后超过了人类的平均水平。这一轮以深度学习为名的神经网络的应用热潮由多方面因素催生。其中,Alex等人贡献的强有力的神经网络构型产生了广泛的影响。这个以Alex命名的名为AlexNet的神经网络,包含超过6000万个浮点参数,处理一张长宽为224的彩色图片需要超过十亿次浮点运算。

在当时的硬件条件下,Alex被迫将网络拆分在两块显卡上才能进行实验。后续的VGG-16网络相比AlexNet提高了预测准确率,却更是一个网络大小超过500M,单图片浮点计算量超过280亿次的庞然大物。人们对预测准确率的追求甚至催生了ResNet这样的层数高达1001的网络。进一步的,即使是相同的网络,如果能对输入的各种情况做更详尽的计算,则能继续提高预测准确率。事实上,人们发现”大网络+多次计算=高质量”的公式在一定范围内成立。比如GoogleDeepMind在实验中发现,拥有280块GPU(图形处理单元)的分布式版AlphaGo,对战只有8个GPU的单机版时,达到了75%的胜率。

然而现在主流的GPU显卡单卡功耗就有275W,相当于三分钟内耗尽一部IPhone6的电池。高功耗还意味着对散热的苛刻要求,因此显卡的标准照片上更显眼的是一个大风扇而不是芯片。因此,功耗、计算能力等瓶颈制约了AlexNet为代表的神经网络被应用到更多的设备里。特别的,手表和Google Glass等可穿戴设备上,传统的触摸等交互方式捉襟见肘,特别需要语音等更智能的交互方式。然而恰恰这些平台因为重量与电池容量的苛刻限制无法承载AlexNet这性的强力神经网络。虽然云计算可以将一部分计算转移到云端,但在需要处理高流量输入信号和要求高实时性的场合中,云计算的带宽、延迟和全时可用性都受到挑战,而无法完全替代本地计算。因此,迫切需要一种小、快、强的网络来激活这些设备的智能。

二值神经网络是神经网络“小型化”探索中重要的一个方向。神经网络中有两个部分可以被二值化,一是网络的系数,二是网络的中间结果。通过把浮点单精度的系数变成正1或负1,系数的二值化能达成存储大小变为原来的1/32,也就是3%。另一方面,如果中间结果也变为二值,由于大部分计算都在1间进行,可以将浮点计算替换成整数位运算。在支持64位运算的CPU和GPU上,这意味着64倍的理论加速比。而64倍的加速比如果按摩尔定律折算,意味着提前9年用上了未来的硬件。如果打开各种设备的存储与计算能力比照表。二值网络将允许把一个此前只能在服务器上运行的神经网络运行在智能手表上,比如VGG-16网络。

二值神经网络的历史不短于使用单精度浮点运算的神经网络(以下简称单精度网络)。事实上,1943年Warren McCulloch和Walter Pitts提出的人工神经元模型就是一个二值神经网络。然而一直以来困扰二值神经网络的是缺乏有效的从训练数据中学习网络系数的算法。与此不同,单精度神经网络拥有带有坚实理论基础的梯度下降算法,从而迅速超越二值网络成为神经网络研究应用中的主流。一直到2014年,二值神经网络只在手写数字MNIST这种简单的任务上达到了可观的预测准确率,而同时的单精度神经网络已经可以在手写体汉字识别、1000类物体分类等问题上打败人类了。当时的一个估计是神经网络的系数至少需要10位左右精度,再少即会因为参数量化引入的噪声造成无法有效学习和使用。但对作为计算与生物学交叉的神经网络而言,有一个疑问一直挥之不去,单精度神经网络是生物可行的吗?人脑里的神经网络真的能以32位的精度来处理信号吗?

这一局面,在2015年底被突然打破。

首先点燃战火的是Matthieu Courbariaux,他来自深度学习巨头之一的Yoshua Bengio领导的蒙特利尔大学的研究组。他们的文章于2015年11月出现在arxiv.org上。与此前二值神经网络的实验不同,Matthieu只关心系数的二值化,并采取了一种混和的策略,构建了一个混有单精度与二值的神经网络BinaryConnect:当网络被用来学习时,系数是单精度的,因此不会受量化噪声影响;而当被使用时,系数从单精度的概率抽样变为二值,从而获得加速的好处。这一方法在街拍门牌号码数据集(SVHN)上石破天惊地达到超越单精度神经网络的预测准确率,同时超越了人类水平,打破了此前对二值网络的一般印象,并奠定了之后一系列工作的基础。然而由于只有系数被二值化,Matthieu的BinaryConnect只能消减乘法运算,在CPU和GPU上一般只有2倍的理论加速比,但在FPGA甚至ASIC这样的专用硬件上则有更大潜力。

一石激起千层浪。Matthieu组很快发现自己的工作引起的兴趣超乎想像。事实上,3个月后,ItayHubara在以色列理工的研究组甚至比Matthieu组早了一天在arxiv.org上发表了同时实现系数和中间结果二值化,并在SVHN上达到了可观预测准确率的二值网络。由于双方的工作太过相似,三个星期后,也就是2016年2月29日,双方的论文被合并后以Matthieu与Itay并列一作的方式再次发表到arxiv.org上。这个同时实现系数和中间结果二值化的网络被命名为BinaryNet。由于达成了中间结果的二值化,BinaryNet的一个样例实现无需额外硬件,在现有的GPU上即达成了7倍加速。

每年的年初是机器学习相关会议扎堆的时段,Matthieu与Itay于3月17日更新了他们的合作论文,进行了一些细节的调整,看起来是投稿前的最后准备。但就在一天前的3月16日,来自西雅图的Allen institute for AI和华盛顿大学的Mohammad Rastegari等人用新方法改进了二值系数网络BinaryConnect和全二值网络BinaryNet,在大规模数据集ImageNet上分别提高预测准确率十几个百分点。其中,改进后的二值系数网络BWN已达到被普遍接受的神经网络质量标准:只差单精度AlexNet3个百分点。

而Mohammad改进BinaryNet的产物XNOR-Net,离单精度的AlexNet也只差13个百分点了。考虑到XNOR-Net相比AlexNet的惊人的实测58倍运行时加速,达到二值神经网络的理论上限的光明未来已近在眼前了。

Mohammad的方法的关键是达成了计算量与量化噪声间的一个巧妙平衡:用二值来进行AlexNet中最昂贵的卷积操作,而用一部分单精度值计算来降低量化噪声。也就是说,XNOR-Net不是一个纯粹的二值网络,却保留了二值网络绝大部分的好处。从数学的角度,Mohammad提出了一种用二值矩阵与单精度值对角阵之积近似一个单精度值矩阵的算法。这在数学里中可归为矩阵近似的一种。矩阵近似包含一大类方法,比如笔者所在的研究组此前提出的KroneckerFully-Connect方法,即用一系列小矩阵对的Kronecker积的和来近似一个大矩阵。类似的以减少存储大小和计算量为目的的工作还有利用随机投影的“DeepFried Network”,利用循环矩阵的”Circulant Network”等等。由于Mohammad的二值化方法也是一种近似,因此不可避免地会造成预测准确率的降低。寻找能快速计算的更好的矩阵近似方法,可能是下一步的主要目标。

现在,人类已经进入向二值神经网络完全潜力冲刺的最后出发阵地。关心的人们正在翘首期待这一天的到来,也许明天,也许后天的arxiv.org就会揭晓谁是那个撞线的人。

2015年4月时,一则新闻引起人们的注意:格鲁吉亚国际象棋特级大师在迪拜国际象棋公开赛时装作去厕所,实则是用手机上的对战软件作弊被发现。时间距离IBM用拥有30个结点的超级计算机“深蓝”战胜当时的国际象棋第一人卡斯帕罗夫过去了18年。按此推断,和李世石对战的AlphaGo,2034年左右也可能跑在手机上。现在有了二值神经网络,这一时间可能被提前到2025年,也就是9年后。如果那时柯洁还在现役,他要小心一个使用iPhone11s的人。

注:

[1] : 280块Titan X GPU的满负荷功率为77千瓦(不计外围电路和空调)。一个68kg成年人每日平均需要热量7208 kJ,折合功率为83瓦。大力士比赛时的输出功率为400瓦。因此保守估计,AlphaGo的功率超过100个李世石。

作者周舒畅:旷视科技(Face++)研究员,曾就职Google Research。旷视科技(Face++)以让机器看懂世界及至真正思考为使命,对于神经网络在视觉问题中的应用,和神经网络架构的优化、加速及其一般方法具有浓厚兴趣和深度积累。目前已在人脸识别、文字及图像识别技术领域取得多项突破性进展。

优质内容筛选与推荐>>
1、gai_strerror函数
2、Saltstack_使用指南04_数据系统-Grains
3、vscode入门记
4、为 Ubuntu 18.04 添加开机自动加载 ntfs分区 功能
5、实战物料主数据(MM01/MM02/MM03)屏幕增强


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号