16

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

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzAxMjMwODMyMQ%3D%3D&%3Bmid=2456341770&%3Bidx=2&%3Bsn=c28fda30656394a01488ea6bc87d1925
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

点击上方“ 磐创AI ”,选择“置顶公众号”

精品文章,第一时间送达

作者:思

转载自: 机器之心 ,未经允许不得二次转载

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

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

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

二值神经网络是什么?

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

mAbueaV.jpg!web

二值神经网络示例。

对于储存的节省,这里可以举个例子,常规神经网络采用 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 倍加速比也带有误导性,因为它的对比并不是太公平。

2AnYBnZ.jpg!web

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: Can Binary Neural Networks Achieve MobileNet-level Accuracy?

  • 地址 https://arxiv.org/pdf/2001.05936v1.pdf

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

QriU7fq.jpg!web

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 准确率。

rQr6VbN.jpg!web

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

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

bQZfmm3.jpg!web

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

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

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

RbaEZvJ.jpg!web

表 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 同步的成本。 第二版不仅提升了效率,同时继续支持模型的压缩和二值化推理,可将模型部署在多种边缘设备上。

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

— 完 —

J3aYnyj.jpg!web长按扫码,关注我们

你与未来 只差一个

磐创AI


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK