点击我爱计算机视觉标星,更快获取CVML新技术


本文转载自机器之心。

选自arXiv

作者:Mostafa Elhoushi 等

机器之心编译

参与:魔王、杜伟

前不久,北大、华为诺亚等合著的一篇论文,探讨了不用乘法用加法能不能做深度学习。最近,华为的另一篇论文,没有用加法替代乘法,而是用「按位移位」和「按位取反」来取代乘法运算。

深度学习模型,尤其是深度卷积神经网络(DCNN),在多个计算机视觉应用中获得很高的准确率。但是,在移动环境中部署时,高昂的计算成本和巨大的耗电量成为主要瓶颈。而大量使用乘法的卷积层和全连接层正是计算成本的主要贡献者。

论文链接:https://arxiv.org/pdf/1905.13298.pdf

华为的这篇论文提出了解决该问题的新方法,即引入两种新型运算:卷积移位(convolutional shift)和全连接移位(fully-connected shift),从而用按位移位(bitwise shift)和按位取反(bitwise negation)来取代乘法。使用了卷积移位和全连接移位的神经网络架构族即 DeepShift 模型。DeepShift 模型可以在不使用乘法的情况下实现,且在 CIFAR10 数据集上获得了高达 93.6% 的准确率,在 ImageNet 数据集上获得了 70.9%/90.13% 的 Top-1/Top-5 准确率。

研究者将多种著名 CNN 架构的卷积层和全连接层分别进行卷积移位和全连接移位转换,并进行了大量实验。实验结果表明,有些模型的 Top-1 准确率下降程度低于 4%,Top-5 准确率下降程度低于 1.5%。

所有实验均使用 PyTorch 框架完成,训练和运行代码也已经发布。

代码地址:https://github.com/mostafaelhoushi/DeepShift

引言

越来越多的深度神经网络针对移动和 IoT 应用而开发。边缘设备通常电量和价格预算较低,且内存有限。此外,内存和计算之间的通信量在 CNN 的电量需求中也占主要地位。如果设备和云之间的通信成为必要(如在模型更新等情况下),那么模型大小将影响连接成本。因此,对于移动/IoT 推断应用而言,模型优化、模型规模缩小、加速推断和降低能耗是重要的研究领域。

目前已有多种方法可以解决这一需求,这些方法可分为三类:

第一类方法是从头开始构建高效模型,从而得到新型网络架构,但要找出最适合的架构需要尝试多个架构变体,而这需要大量训练资源;

第二类方法是从大模型开始。由于网络中存在一些冗余参数,这些参数对输出没有太大贡献,因而我们可以基于参数对输出的贡献程度对它们进行排序。然后修剪掉排序较低的参数,这不会对准确率造成太大影响。参数排序可以按照神经元权重的 L1/L2 均值(即平均激活)进行,或者按照非零神经元在某个验证集上的比例进行。剪枝完成后,模型准确率会下降,因此需要进一步执行模型训练来恢复准确率。一次性修剪太多参数可能导致输出准确率大幅下降,因此在实践中,通常迭代地使用「剪枝-重新训练」这一循环来执行剪枝操作。这可以降低模型大小,并加快速度;

第三类方法是从大模型开始,然后用量化技术来缩减模型大小。在一些案例中,量化后的模型被重新训练,以恢复部分准确率。

这些方法的重要魅力在于:它们可以轻松应用于多种网络,不仅能够缩减模型大小,还能降低在底层硬件上所需的复杂计算单元数量。这带来了更小的模型占用、更少的工作记忆(和缓存)、在支持平台上的更快计算,以及更低的能耗。

此外,一些优化技术用二值 XNOR 运算来替代乘法。此类技术在小型数据集(如 MNIST 或 CIFAR10)上可能有较高的准确率,但在复杂数据集(如 ImageNet)上准确率会严重下降。

华为的这篇论文提出两种新型运算——卷积移位和全连接移位,用按位移位和按位取反来取代乘法,从而降低 CNN 的计算成本和能耗。这一神经网络架构族即为 DeepShift 模型。该方法主要使用 2 的幂或按位移位从头开始执行 one-shot 训练,或者对预训练模型进行转换。

DeepShift 网络

图 1:(a) 原始线性算子 vs 本研究提出的移位线性算子;(b) 原始卷积算子 vs 本研究提出的移位卷积算子。

如上图 1 所示,本论文的主要概念是用按位移位和按位取反来替代乘法运算。如果输入数字的底层二进制表示 A 是整数或固定点形式,则向左(或向右)按位移动 s 位在数学层面上等同于乘以 2 的正(负)指数幂:

按位移位仅等同于乘以正数,因为对于任意 s 值,都有 2_±s > 0。但在神经网络训练过程中,搜索空间中必须存在乘以负数的情况,尤其是在卷积神经网络中,其滤波器的正负值可用于检测边。因此,我们还需要使用取反运算,即:

与按位移位类似,取反运算的计算成本较低,因为它只需要对数字返回 2 的补码。

下文将介绍该研究提出的新型算子 LinearShift 和 ConvShift,它们用按位移位和取反取代了乘法:

其中 s 是移位值,n 是取反值。在经典的 CPU 架构中,按位移位和按位取反仅使用 1 个时钟周期,而浮点乘法可能需要 10 个时钟周期。

LinearShift 算子

其中输入 x 可表示为矩阵 B × m_in,输出 y 可表示为矩阵 B × m_out,W 是可训练权重矩阵 m_in × m_out,b 是可训练偏置向量 m_out × 1。B 是批大小,m_in 是输入特征大小,m_out 是输出特征大小。

该线性算子的反向传播可表达为:

其中 ∂L/∂y 是运算的梯度输入(运算输出的模型损失 L 的导数),∂L/∂x 是运算的梯度输出(运算输入的模型损失的导数),∂L/∂W 是运算权重的模型损失的导数。本论文提出该移位线性算子,在其前向传播中用按位移位和取反替代了矩阵乘法。其前向传播可定义为:

其中 N 是取反矩阵,S 是移位值矩阵,· 表示这两个矩阵的对应元素乘法。B 和 S 的大小是 m_in × m_out,b 是偏置向量,类似于原始线性算子。S、N 和 b 都是可训练的参数。

为了帮助推导后向传播,研究者使用项 V = (−1)^round(N) ˙ (2)^round(S),得到:

注意,反向传播导致 -1 和 2 的幂存在非整数值。但是,在前向传播中,它们被四舍五入,以实现按位取反和移位。

ConvShift 算子

原始卷积算子的前向传播可表达为:

其中 W 的维度是 c_out × c_in × h × w,其中 c_in 是输入通道大小,c_out 是输出通道大小,h 和 w 分别是卷积滤波器的高和宽。LeCun 等 [1999] 将卷积的反向传播表示为:

类似地,本研究提出的卷积移位(即 ConvShift)算子的前向传播可表示为:

其中 N 和 S 分别表示取反和移位矩阵,维度为 c_out × c_in × h × w。类似地,为了推导反向传播,研究者使用项 V = (−1)^round(N) ˙ (2)^round(S),得到:

基准测试结果

研究者在 3 个数据集上测试了模型的训练和推断结果:MNIST、CIFAR10 和 ImageNet 数据集。

MNIST 数据集

下表 1 展示了模型在 MNIST 验证集上的准确率。我们可以看到,从头训练得到的 DeepShift 模型的准确率下降程度超过 13%,不过仅转换预训练权重得到的 DeepShift 版本准确率下降程度较小,而基于转换权重进行后续训练则使验证准确率有所提升,甚至超过了原版模型的准确率。

CIFAR10 数据集

下表 2 展示了模型在 CIFAR10 验证集上的评估结果。我们注意到从头训练得到的 DeepShift 版本出现了严重的准确率下降,而基于转换预训练权重训练得到的 DeepShift 模型准确率下降幅度较小(不到 2%)。

值得注意的是,对于未经进一步训练的转换权重,宽度更大、复杂度更高的模型取得的结果优于低复杂度模型。这或许可以解释为,模型复杂度的提升补偿了运算被转换为 ConvShift 或 LinearShift 导致的精度下降。

ImageNet 数据集

下表 3 展示了模型在 ImageNet 数据集上的结果,我们从中可以看到不同的模型结果迥异。最好的性能结果来自 ResNet152,其 Top-1 和 Top-5 准确率分别是 75.56% 和 92.75%。值得注意的是,由于时间限制,一些模型仅训练了 4 个 epoch。进行更多训练 epoch 可能带来更高的准确率。

复杂度较高的模型被准换为 DeepShift 后,结果通常更好。MobileNetv2 等「难缠」模型在移除所有乘法运算后准确率仅降低了约 6%。与其他加速方法(如 XNOR 网络、量化或剪枝)相比,这无疑是巨大的优势,这些方法对 MobileNet 的优化带来负面效果。然而,其他「难缠」网络(如 SqueezeNet)的准确率则出现了大幅下降。

为什么 MobileNetv2 的权重被转换后,在未经后续训练的情况下准确率几乎为 0?而在训练几个 epoch 后,Top-5 准确率竟然超过 84%?这一点还有待分析。


模型压缩与应用部署交流群

关注最新最前沿的模型压缩、网络剪枝、知识蒸馏、新型网络设计、应用部署技术,扫码添加CV君拉你入群,(如已为CV君其他账号好友请直接私信)

(请务必注明: 部署)

喜欢在QQ交流的童鞋,可以加52CV官方QQ群:805388940。

(不会时时在线,如果没能及时通过验证还请见谅)


长按关注我爱计算机视觉

把CNN里的乘法全部去掉会怎样?华为提出移动端部署神经网络新方法相关推荐

  1. excel+运算符在php里不起作用,excel乘法函数,为什么我在EXCEL里插入乘法函数不管用...

    话题:excel乘法函数 问题详情:为什么我在EXCEL里插入乘法函数不管用,比如我输入=E5*F5它 推荐回答1:一.公式没问题,检查公式的输入有没有错,=号前面有没有空格二.检查单元格格式有没有错 ...

  2. wps右边的标记区域怎么去掉_在wps文字里把修订标记去掉的操作流程

    亲们或许不熟悉wps这款应用,而今天笔者讲解的是在wps文字里把修订标记去掉的操作流程,想学习在wps文字里把修订标记去掉的操作步骤的,就去下文看一看,了解了解,相信对大家一定会有所帮助的. 在wps ...

  3. 计算机上显示F怎么取消,去掉任务栏安全删除硬件里出现删除硬盘驱动器C,D,E,F和光驱的方法...

    去掉任务栏安全删除硬件里出现删除硬盘驱动器C,D,E,F和光驱的方法 发布时间:2012-09-03 15:10:59   作者:佚名   我要评论 任务栏"安全删除硬件"里出现删 ...

  4. 怎么将tflite部署在安卓上_tensorflow从训练自定义CNN网络模型到Android端部署tflite...

    网上有很多关于tensorflow lite在安卓端部署的教程,但是大多只讲如何把训练好的模型部署到安卓端,不讲如何训练,而实际上在部署的时候,需要知道训练模型时预处理的细节,这就导致了自己训练的模型 ...

  5. 不仅搞定“梯度消失”,还让CNN更具泛化性:港科大开源深度神经网络训练新方法

    原文链接:不仅搞定"梯度消失",还让CNN更具泛化性:港科大开源深度神经网络训练新方法 paper: https://arxiv.org/abs/2003.10739 code: ...

  6. 在PL/SQL里直接插入日期时提示 is not a valid date and time的解决方法

    在PL/SQL里直接插入日期时提示 is not a valid date and time的解决方法 参考文章: (1)在PL/SQL里直接插入日期时提示 is not a valid date a ...

  7. 一种通过scout ESI和CNN解码EEG运动想象四分类任务的新方法

    目录 导读 系统框架 实验 特征提取 结论 导读 东北电力大学和长春理工大学研究团队开发并实现一种结合脑电图源成像(ESI)技术和卷积神经网络(CNN)的新方法,以对运动想象(MI)任务进行分类.ES ...

  8. 【必看】HTML+CSS去掉img图片底部的空白的3种通用方法

    去掉img图片底部的空白的3种通用方法 效果如图: 图片下方有莫名的空白,总是去不掉! 空白产生的原因:图片是内联元素,默认带有一定的间距,间距与文字字体有一定的关系. 因此,基于此原因有一下解决方法 ...

  9. 怎样去除excel表中的虚线_Excel表格里的虚线如何去掉?

    相信大家在使用Excel办公软件的时候,都遇到过表格里的各种虚线,这些虚线虽然并不会影响我们正常使用软件,但是却非常的影响我们的心情,尤其是强迫症患者更是无法容忍它们的存在,那么应该怎样去掉这些讨厌的 ...

最新文章

  1. 计算机应用基础第四章知识点,计算机应用基础 第四章电子表格笔试知识点总结...
  2. python中怎么比较两个列表-如何比较python中的两个列表并返回匹配
  3. HDMI和VGA接口
  4. SQL语句实现两个数据库表直接操作
  5. 计算机表格怎么求面积,在wps表格中怎么把数据生成面积图?
  6. 别把数学想得太难,数学是一场游戏
  7. Linux安装中文字体_宋体
  8. 比特币、以太坊、瑞波币、万融链和区块链
  9. 《艾恩ASP文件上传类》开发和使用总结
  10. 计算机安装pdf打印机驱动,Win7安装Microsoft Print to PDF虚拟打印机的方法
  11. 基于无线传感器网络LEACH算法的改进
  12. Hadoop之自定义InputFormat
  13. Hexo在博客中插入图片
  14. VUE使用echarts实现中国地图航线动态展示
  15. 软件质量的定义以及相关理论
  16. Java的短信接口的使用
  17. Java 笔记-抽象类,接口
  18. 50道正则表达式面试题目,你能答对几道?
  19. 19考研报名系统今日关闭!记得检查!研招现场确认最全提醒
  20. Analytics Zoo 入门

热门文章

  1. C++ I/O流 格式控制(下)
  2. Struts2数据封装
  3. 读《程序员修炼之道——从小工到专家》(The Pragmatic Programmer: From Journeyman to Master)
  4. QT [007] QT UI 的控件操控问题 - 如何操控多嵌套的UI控件
  5. flyme7 android彩蛋,魅族 15 系列开启预约,Flyme7 或是发布会彩蛋
  6. 图像处理中ct图的通道是多少_新一代安检CT机,智能安防领域又一明星产品
  7. oracle11查看dblink,配置oracle11g通过dblink+透明网关访问GBase
  8. java nio 消息_java nio消息半包、粘包解决方案
  9. python第七章动手试一试_《Python从入门到实践》第八章动手试一试
  10. 怎么让电脑速度变快_小科普 | 免费的路由器!用你的电脑开5G热点!