第一次胜过MobileNet的二值神经网络,-1与+1的三年艰苦跋涉-阿里云开发者社区

开发者社区> 开发者小助手-bz8> 正文

第一次胜过MobileNet的二值神经网络,-1与+1的三年艰苦跋涉

简介: 近日,苹果以 2 亿美元左右价格收购初创公司 Xnor.ai 的消息引起了社区极大的关注。作为一家以二值神经网络 Xnor-net 起家的人工智能初创公司,Xnor.ai 被苹果高价收购,也许预示着低功耗、高效能的二值神经网络技术将开启广阔的应用前景。
+关注继续查看

二值网络是非常极致的一种神经网络,它的权重、激活值只有+1 与-1 两种状态。那么这么极简的神经网络到底能干什么,它的优势与限制都有什么?这就是本文关注的,我们希望通过基本概念、性能里程碑看看二值神经网络这几年到底有什么发展。


与此同时,本文也着重介绍了一种最前沿的二值网络 MeliusNet,它的诞生预示着二值网络在 ImageNet 上第一次能达到 MobileNet 的水平。


二值神经网络是什么?


我们知道模型压缩非常重要,想要应用到真实业务,模型就必须得高效。在模型压缩中,有一种非常极致的压缩方法,它通过限制权重只能取-1、+1 两个值,从而大量降低计算资源的需求。

4.jpg

二值神经网络示例。

对于储存的节省,这里可以举个例子,常规神经网络采用 FP32 来表示数值,权重文件经常会达到 1GB。而若权重数量相等,二值神经网络可以节省 32 倍的存储,权重文件也就由 1GB 降低到 32MB。这看起来就非常有吸引力,简直是部署边缘端模型的不二选择。


更重要的是,二值网络只有+1 与-1,这意味着所有运算只靠位运算就能完成,二值网络借助与门、异或门等运算,可以替代传统乘加运算。换句话说,在二值网络的传播过程中,基本是不需要乘法的,它只需要加法与位运算。如果有一个强大的二值网络,我们也许能摆脱对 GPU 等高性能计算设备的依赖。


既然有着这两大不可忽视的优势,那么为什么现在绝大多数神经网络还是采用的单精度浮点数?为什么神经网络做量化也只是压缩到 INT8 等低精度整数,而不能直接压缩到接近二值的超低精度?


与优势同样明显的是,二值神经网络也有不可忽视的缺陷。


令人又爱又恨的二值网络


针对二值网络的两大优势,它也有两大缺陷。首先,二值网络极致地将数值精度降低到-1 与+1,这肯定会大幅度降低模型的效果。这一点从 BNN 的开山之作 [1,2] 在 ImageNet 分类任务上 Top-1 准确度仅能达到 50% 左右就可见一斑。


其次,二值网络一直缺乏有效的训练算法,这也是困扰模型的艰难问题。很明显,既然二值网络在传播时采用的是±1,那么我们无法直接计算梯度信息,也就无法高效地使用反向传播更新权重。


因此想要学习一个可行的二值网络,我们不仅需要确定如何对输入、参数执行二值化,同时还需要能从二值化的结果计算对应梯度。


其实之前在 2016 年的时候,BNN 与 XNOR-Net 的提出令很多研究者看到了二值网络的优势。但问题在于,二值网络精度太低,又难以训练。因此在短暂的热潮之后,关于二值网络的各项研究都被搁置了,仅留下了少数最为核心的问题,例如如何提升二值网络的效果。


从 16 年到现在已经过去很久了,令人又爱又恨的二值网络到底有了哪些提升?后文希望从二值网络的发展路线、效果里程碑等方面回顾 BNN 近 3 年的发展历程。


走向现在的二值网络


BNN 与 XNOR-Net,它们是近来最早引起广泛关注的研究。对于构建二值网络的两个问题,BNN 采用符号函数 Sign() 来实现二值化,采用 Straight-through Estimator(STE)来传递梯度。其中二值化很好理解,即输入如果是正数和零,则返回+1,输入是负数,则返回-1。


而 STE 的主要思想也比较容易理解,因为二值化后的权重是无法精确计算梯度的,但在执行二值化前,那样的浮点数能产生足够准确的梯度。因此,STE 在训练中会保留浮点数,并采用梯度更新这样的浮点数,在训练完成后,我们对这些浮点数做一个二值化就能得到最终的网络,并可以丢弃浮点数。


这两个问题是二值网络的核心,很多新研究都针对它们提出了新的见解。


例如 [8] 等不少研究提出了 STE 的替代方案,这些方法大多尝试一种可微的 Approximator,或者使用比 STE 曲线更加平滑的函数来代替它。不过这些研究建立在实验和直觉上,缺少理论上严谨的证明,甚至在其它验证实验中 [9],也没有取得超过 STE 的结果。


二值网络的晋升之路


2016 提出的 BNN [1] 是 Bengio 等大牛的挖坑之作,该研究可以认为是现代二值网络的开山之作。研究者在 MNIST 与 CIFAR-10 等小数据上测试了模型效果,该研究至少证明二值神经网络是可行的。


同样在 2016 年提出的还有 XNOR-Net [2],入坑二值网络研究的小热潮就是它带动的。该模型在 ipohne 上做到了 yolo v1 的实时检测,可惜 ImageNet 上精度还是很低,仅为 51%。论文里 58 倍加速比也带有误导性,因为它的对比并不是太公平。

5.jpg

XNOR-Net 的效果展示,选自 [2]。


即使这样,51% 的准确率也持续到 2018 年才被超越,可见 BNN 准确率的提升并不简单。


WRPN [3] 和 Shen et al. [11] 通过提升卷积层通道数的方式来提升 BNN 的精度,即让 BNN 变得更宽。但是这样的方法很大程度上增加了运算复杂度,欠缺模型效果和计算复杂度上的平衡,实用性比较差。


ABC-Net 和 GroupNet[7] 是另一种提升 BNN 准确率的代表性方法。它们认为单个权重与激活值信息量不够,如果多学习几组,并取线性加权来逼近全精度输出,那么效果应该是足够的。这类方法计算复杂度太高,准确率是上去了,但速度优势也没了。


随后,Bi-RealNet [8] 和 BinaryDenseNet [9] 都坚持用一组权重与激活值,并通过改进网络结构来提升效果。研究者在设计结构时尝试调优网络的信息流,移除信息流中的「瓶颈」。这两项工作都更具实践意义,作者们也开源了对应代码。


值得注意的是,[9] 中作者做了完整详细的测评实验,验证之前研究提出的技巧或方法,例如 scaling factor,approxi-sign function 等。结果显示也许我们不需要复杂的技巧,只需要简单朴素的方法就能获得很好效果。


MeliusNet 来了


现在,来自德国波茨坦大学的 Joseph Bethge 和 Haojin Yang 等研究者提出了 MeliusNet [10],其准确度上能击败之前所有二值模型,甚至超越了 MobileNetV1。


与此同时,MeliusNet 的计算复杂度并不高,能充分利用二值网络的速度优势。整体而言,MeliusNet 继续在 BNN 定制化架构上进行探索,为二值网络设计了一套高效简洁的架构。




如下所示为 MeliusNet 的构建块,它主要由 Dense Block 与 Improvement Block 组成。其中 Dense Block 主要用于扩充特征的表达能力,而 Improvement Block 主要用于提升特征的质量。

6.jpg

MeliusNet 构建块示意图,选自 [10]。


Dense Block 是 DenseNet 的二值化变体,它包含一个二值卷积(Binary Convolution),并将输入特征压缩到 64 个通道数,并凭借到原本的输入特征上。举个栗子,Dense Block 的输入特征是 W*H*256,那么输出特征就是 W*H*320,相当于扩充了输入特征。


随后的 Improvement Block 主要关注新扩充特征的质量,如上图所示,所有特征图会经过新的卷积运算,并用来提升之前新生成的 64 张特征图。最后得出的 320 张特征图就是构建块的输出结果,可以看到,MeliusNet 信息流是不断扩充与精炼的。


研究者同样也做了很多实验,为了对比其它 SOTA 模型,研究者根据不同配置构建了不同大小的 MeliusNet,17MB 大小的 MeliusNet 59 在 ImageNet 上已经能达到 70.7% 的 Top-1 准确率。


7.jpg

表 1:不同 MeliusNet 在 ImageNet 上的效果。其中降低通道数的因子根据 32 的倍数来选,「/2」与「/4」等后缀表示 1×1 下采样卷积采用 2 和 4 的分组。选自 [10]。


MeliusNet 在 ImageNet 上的效果已经很好了,相比最开始 50% 左右的准确率已经提升了一大截。那么 MeliusNet 与其它二值网络、MobileNet V1 的对比又是怎样的?研究者在给定模型大小的情况下,对比了不同模型在 ImageNet 上的效果。


8.jpg

图 5:ImageNet 数据集上,不同模型在 4MB 和 5MB 大小下的效果。其中所有彩色的图标表示模型通过作者的策略训练,黑色表示原论文的结果。选自 [10]。


从上图 a 可以看出,MeliusNet 22 要比 BinaryDenseNet 28 有更高的准确率,且没有额外的运算。与此同时,在 b 图中,MeliusNet 是第一个实现能媲美 MobileNet 的二值神经网络。


 此外,研究者还对比了其它使用多组权重与激活值的二值网络、更大一些的 MobileNet 1.0。结果表明尽管 MeliusNet 是二值网络,但它在 ImageNet 上的效果已经非常惊人了。


9.jpg

表 2:不同模型架构的计算复杂度与效果对比,MeliusNet 相比 MobileNet 0.5、0.75 和 1.0 能实现相等或更好的效果。选自 [10]。


通过一系列实验,我们至少可以明确,二值网络在准确度上也是非常有潜力的。MeliusNet 证明了更好的二值网络架构,确实能产生更优秀的模型效果。


二值网络能干什么?


 首先二值网络本身就是一种模型压缩方法,它能以更小的存储代价、计算代价实现相同的功能。在 WRPN [3] 中,Intel 的研究员在 FPGA 和 ASIC 等多种不同硬件上验证了二值网络的效果。该研究表示在 FPGA 和 ASIC 等定制芯片上,和标准单精度模型相比,BNN 可以达到超过 50 倍的加速比,同时达到千分之一的能耗比。

[Image: image.png] 图注:低精度运算在不同硬件上的效果提升。d 图可以看到二值网络的加速比超过 50 倍,g 图可以看到能耗效率能提升一千倍。


既然效果这么强硬,而且 MeliusNet 的准确率也提升来了,那我们为什么不试一试?


如果不考虑论文复现代码,目前能用的可靠开源项目并不多。

  • BMXNet 2017 [5] 由来自德国 Hasso Plattner Institute 的研究员 Haojin Yang 等开发,它是一个基于 MXNet 的二值化开源框架。它支持使用 CuDNN 进行训练,并使用二值运算符 XNOR 和 Bitcount 做推断。不足之处是二值化内核并未经过专门调优,因此在 ARM CPU 上的速度表现并不突出。
  • Dabnn 2019 [4] 由京东 AI 研究院推出,基于汇编调优后的 BNN 推理工具。它有效提升了 BNN 在 ARM 框架端上的推理速度,但是这个工具并不能用于模型训练,需要使用其它工具进行训练。
  • BMXNet-v2 2019 [9],Bethge 和 Yang 等开源了支持 Gluon API 的第二版。该框架采用的一系列改进大大降低了模型训练难度,大大减小了同 MXNet 同步的成本。第二版不仅提升了效率,同时继续支持模型的压缩和二值化推理,可将模型部署在多种边缘设备上。


有了这些工具,再加上架构上的创新,二值神经网络能做的比我们想象的更多。也许以后跑在手机等移动设备上的神经网络,就能经常见到二值网络大显身手。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9494 0
DL:深度学习算法(神经网络模型集合)概览之《THE NEURAL NETWORK ZOO》的中文解释和感悟(七)
DL:深度学习算法(神经网络模型集合)概览之《THE NEURAL NETWORK ZOO》的中文解释和感悟
16 0
DL之AlDL之AlexNet:利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型)(二)
DL之AlexNet:利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型)
34 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10843 0
第一次胜过MobileNet的二值神经网络,-1与+1的三年艰苦跋涉
近日,苹果以 2 亿美元左右价格收购初创公司 Xnor.ai 的消息引起了社区极大的关注。作为一家以二值神经网络 Xnor-net 起家的人工智能初创公司,Xnor.ai 被苹果高价收购,也许预示着低功耗、高效能的二值神经网络技术将开启广阔的应用前景。
16 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13177 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11507 0
Netflix开源面向稀疏数据优化的轻量级神经网络库Vectorflow
在Netflix公司,我们的机器学习科学家在多个不同的领域处理着各种各样的问题:从根据你的爱好来定制电视和推荐电影,到优化编码算法。我们有一小部分问题涉及到处理极其稀疏的数据;手头问题的总维度数很容易就能达到数千万个特征,即使每次要看的可能只是少数的非零项。
4234 0
第一次胜过MobileNet的二值神经网络,-1与+1的三年艰苦跋涉
近日,苹果以 2 亿美元左右价格收购初创公司 Xnor.ai 的消息引起了社区极大的关注。作为一家以二值神经网络 Xnor-net 起家的人工智能初创公司,Xnor.ai 被苹果高价收购,也许预示着低功耗、高效能的二值神经网络技术将开启广阔的应用前景。
18 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
6891 0
1654
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载