CVPR2020论文点评: AdderNet(加法网络)
CVPR2020论文点评: AdderNet(加法网络)
论文原文链接:https://arxiv.org/pdf/1912.13200.pdf
源码链接:https://github.com/huawei-noah/AdderNet
简要
与简单的加法运算相比,乘法运算具有更高的计算复杂度。深度神经网络中广泛使用的卷积正好是来度量输入特征和卷积滤波器之间的相似性,这涉及浮点值之间的大量乘法。现在作者提出了加法网络(AdderNets)来交换深度神经网络中的这些大规模乘法,特别是卷积神经网络(CNNs),以获得更简易的加法以降低计算成本。
加法器网络简介
只有加法也能做深度学习,性能不输传统CNN。
在深度学习里,乘积是个避免不了的运算,比如做图像识别的卷积层,就需要做大量的乘法。
但是,与加法运算相比,乘法运算的计算复杂度高得多。
现在的深度学习在很大程度上依赖于GPU硬件,做大量的乘法运算,限制了它在移动设备上的应用,需要一种更高效的方法。
加法器网络的核心在于: 用L1距离代替欧氏距离。L1距离是求两点之间坐标差值的绝对值之和,因此全程不涉及乘法。
在加法器网中,作者以滤波器与输入特征之间的L1范数距离作为输出响应。分析了这种新的相似性度量对神经网络优化的影响。为了获得更好的性能,通过研究全精度梯度开发了一种特殊的反向传播方法。然后,作者还提出了一种自适应学习率策略,根据每个神经元梯度的大小来增强加法网络的训练过程。
上图就是加法网络的特征可视化结果。
不同BIT乘法和加法的运算代价对比。
研究背景
虽然深度神经网络的二值化滤波器大大降低了计算成本,但原始识别精度往往无法保持。此外,二进制网络的训练过程不稳定,通常要求较慢的收敛速度和较小的学习速率。经典CNN中的卷积实际上是测量两个输入的相似性。研究人员和开发人员习惯于将卷积作为默认操作,从视觉数据中提取特征,并引入各种方法来加速卷积,即使存在牺牲网络能力的风险。但几乎没有人试图用另一种更有效的相似性度量来取代卷积。事实上,加法的计算复杂度要比乘法低得多。因此,作者有动机研究用卷积神经网络中的加法代替乘法的可行性。
相关工作
Network Pruning
网络剪枝主要通过移除冗余的权重来实现网络的压缩和加速。比如用奇异值分解(SVD)全连接层的权重矩阵、去除预训练中的部分权重、将filter变换到频域避免浮点计算。还有的通过去除冗余的filter、或者对channel进行选择这样冗余filter/channel后续的计算就无需考虑了。
Efficient Blocks Design
Knowledge Distillation
除了去除网络中的冗余连接,Hinton还提出了knowledge distillation的概念,借助teacher网络的学习能力来指导student网络完成复杂任务的学习,变种有多个teacher网络、对中间隐层的学习以及对不同teacher网络学到的特征整合成新的知识来帮助student网络的训练。
Adder Network
不同类别的CNN特征按其角度来划分。由于AdderNet使用L1范数来区分不同的类,因此AdderNet的特征倾向于聚集到不同的类中心。
对于CNN中的卷积运算,假定输入X,filter表示为F,卷积后输出的是二者的相似性度量,表述如下面公式:
实际上二者的相似性度量可以有多种途径,但都涉及到大量的乘法运算,这就增加了计算开销。因此作者通过计算L1距离完成输入和filter之间的相似性度量。而L1距离仅涉及到两个向量差的绝对值,这样输出就变成了如下:
注意到使用互相关运算还是L1距离都可以完成相似性度量,但二者的输出结果还是有一些差别的。通过卷积核完成输入特征图谱的加权和计算,结果可正可负;但adder filter输出的结果恒为负,为此作者引入了batch
normalization将结果归一化到一定范围区间内从而保证传统CNN使用的激活函数在此依旧可以正常使用。虽然BN的引入也有乘法操作但计算复杂度已远低于常规卷积层。conv和BN的计算复杂度分别如下:
Optimization
神经网络利用反向传播来计算滤波器的梯度和随机梯度下降来更新参数。在CNN中,输出特征Y相对于滤波器F的偏导数被计算为:
但是在AdderNets中,Y相对于滤波器F的偏导数是:
但signSGD优化方法几乎不会选择到最陡的方向,而且随着维度增加效果会更差,因此本文使用如下公式进行梯度更新:
此外,如果使用full-precision
gradient的更新方法,由于涉及到前层的梯度值很容易导致梯度爆炸,因此本文还通过使用HardTanh将输出限定在[-1,1]范围内。
输出特征Y相对于输入特征X的偏导数计算为:
Adaptive Learning Rate Scaling
在传统的CNN中,假设权值和输入特征是独立的,服从正态分布,输出的方差大致可以估计为:
相反,对于AdderNets,输出的方差可以近似为:
AdderNets的输出具有较大方差,在更新时根据常规的链式法则会导致梯度比常规CNN更小,从而导致参数更新过慢。因此自然而然想到通过引入自适应学习率调整参数的更新learningrate组成:
包括神经网络的全局学习率和本地学习率,其中本地学习率表示为:
这样可以保证每层更新的幅度一致,最终AdderNet的训练过程表述为:
实验
在MNIST、CIFAR及ImageNet数据集山验证了AdderNet的有效性,随后进行了消融实验以及对提取的特征进行可视化。实验平台和框架:V100
Pytorch。
CIFAR-10和CIFAR-100
datasets分类结果
ImageNet datasets分类结果
AdderNet使用L1距离来度量输入与filter之间的关系,而不是使用卷积的互相关。因此需要探究一些AdderNet与CNN特征空间上的差异。因此就在MNIST数据集上搭建了LeNet++:6conv+1fc,每层神经元数目依次为:32,32,64,64,128,128,2。同样其中的conv层用add
filter替换可视化结果如图1所示,CNN的可视化结果为右侧,相似度通过cosin计算得到的,因此分类通过角度进行的分类。左侧是AdderNet的可视化结果,可以看到不同种类的聚类中心不同,这也验证了AdderNet具有同CNN相似的辨别能力。
对filter的可视化结果如上图所示,虽然AdderNet和CNN用的度量矩阵不同,但都具有特征提取的能力。
Learning curve of AdderNets using different optimization schemes
权重分布的可视化
对LeNet-5-BN的第三层进行可视化,AdderNet权重更接近Laplace分布,CNN的权重近似高斯分布,分别对应L1-norm和L2-norm。
注:左边是AdderNet,右边是CNNs
不过AdderNet仍需自己训练,官方表示将很快发布预训练模型。
现阶段的AdderNet并非没有缺陷,作者在项目主页中说,由于AdderNet是用加法过滤器实现的,因此推理速度较慢,需要用CUDA编写才能提高速度。这与作者希望提高神经网络运算速度的初衷还有一段距离。但这篇论文的作者表示,今后还会继续加法器神经网络的研究,发表更多的成果,让我们一起期待这项研究取得新的进展吧。
CVPR2020论文点评: AdderNet(加法网络)的更多相关文章
- 模糊视频帧插值:CVPR2020论文点评
模糊视频帧插值:CVPR2020论文点评 Blurry Video Frame Interpolation 论文链接:https://arxiv.org/pdf/2002.12259.pdf 摘要 现 ...
- 实时实例分割的Deep Snake:CVPR2020论文点评
实时实例分割的Deep Snake:CVPR2020论文点评 Deep Snake for Real-Time Instance Segmentation 论文链接:https://arxiv.org ...
- 给手绘图着色(添加颜色或色彩):CVPR2020论文点评
给手绘图着色(添加颜色或色彩):CVPR2020论文点评 Learning to Shade Hand-drawn Sketches 论文链接:https://arxiv.org/pdf/2002.1 ...
- 分层条件关系网络在视频问答VideoQA中的应用:CVPR2020论文解析
分层条件关系网络在视频问答VideoQA中的应用:CVPR2020论文解析 Hierarchical Conditional Relation Networks for Video Question ...
- CVPR2020论文解读:手绘草图卷积网络语义分割
CVPR2020论文解读:手绘草图卷积网络语义分割 Sketch GCN: Semantic Sketch Segmentation with Graph Convolutional Networks ...
- CVPR2019:无人驾驶3D目标检测论文点评
CVPR2019:无人驾驶3D目标检测论文点评 重读CVPR2019的文章,现在对以下文章进行点评. Stereo R-CNN based 3D Object Detection for Autono ...
- CVPR2020 论文解读:少点目标检测
CVPR2020 论文解读:具有注意RPN和多关系检测器的少点目标检测 Few-Shot Object Detection with Attention-RPN and Multi-Relation ...
- CVPR2020论文介绍: 3D 目标检测高效算法
CVPR2020论文介绍: 3D 目标检测高效算法 CVPR 2020: Structure Aware Single-Stage 3D Object Detection from Point Clo ...
- CVPR2020论文解析:实例分割算法
CVPR2020论文解析:实例分割算法 BlendMask: Top-Down Meets Bottom-Up for Instance Segmentation 论文链接:https://arxiv ...
随机推荐
- qta自动化
qta框架采用PO(page object)模式,即页面结构层和逻辑对象层,如图的用例结构:我们将页面结构放到lib层,将执行用例层放到test层,区分开方便维护:
- @unittest.skip(reason):强制跳转。reason是跳转原因
在执行测试用例时,有时候有些用例是不需要执行的,那我们怎么办呢?难道删除这些用例?那下次执行时如果又需要执行这些用例时,又把它补回来?这样操作就太麻烦了. unittest提供了一些跳过指定用例的方法 ...
- Blade模板引擎教程-常用语法格式
打印变量或者默认值,这个语法会自动转义变量内容中的html标记,使得html标签原样输出Welcome, {{ $name or 'California' }} 打印变量原始内容,不进行转义的用法{! ...
- 千位分隔符,音频音量加强,transform 垂直居中
1.最近做阴阳师日本官网,其中有个功能是获取预约人数,设计稿上的人数是这样151,567,000,想了想自己写还有点麻烦,于是网上copy了代码,再修改了下. 其中,有一点需要注意的是:函数中的str ...
- hdu3006 状态压缩+位运算+hash(小想法题)
题意: 给了n个集合,问你这n个集合可以组合出多少种集合,可以自己,也可以两个,也可以三个....也可以n个集合组在一起. 思路: 是个小想法题目,要用到二进制压缩,位运算, ...
- Windows PE变形练手3-把通用模板机器码直接覆盖目标PE
把通用模板机器码直覆盖目标PE 这个地方真是尝试了好久,遇到很多坑点,Win PE那本书上的东西有点不够,也就直接写书上的例子会发现很多地方不是说的那样,里面提供的信息太少了,就比如里面并没有提被注入 ...
- ERROR: Symbol file could not be found 寒江孤钓<<windows 内核安全编程>> 学习笔记
手动下载了Symbols,设置好了Symbols File Path,串口连接上了以后,出现ERROR: Symbol file could not be found, 并且会一直不停的出现windb ...
- Ext.MessageBox.alert()弹出对话框详解
Ext.MessageBox是一个工具类,他继承自Obiect对象,用来生成各种风格的信息提示对话框,Ext.Msg是该类的别名,使用Ext.MessageBox和用Ext.Msg效果是一样的,而后者 ...
- thymeleaf中[[${}]]与[(${})]的区别
[[-]]会被转义,[(-)]不会. 假设在后台传入msg的值为 <b>AAA</b> 在前台这样使用 [[${msg}]]___[(${msg})] 展示效果 官方参考文档
- Vulnerability: Cross Site Request Forgery (CSRF)
CSRF跨站请求伪造 这是一种网络攻击方式,也被称为one-click attack或者session riding 攻击原理 CSRF攻击利用网站对于用户网页浏览器的信任,挟持用户当前已登陆的Web ...