摘要:随着深度学习网络规模的增大,计算复杂度随之增高,严重限制了其在手机等智能设备上的应用。如何使用深度学习来对模型进行压缩和加速,并且保持几乎一样的精度?本文将为大家详细介绍两种模型压缩算法,并展示了阿里巴巴模型压缩平台和前向推理工具。

本次直播视频精彩回顾,戳这里!
本次直播PDF下载,戳这里!
演讲嘉宾简介:
李昊(花名:辽玥),阿里巴巴机器智能技术实验室高级算法专家,毕业于中科院,拥有工学博士学位,致力于深度学习基础技术研究以及在各个行业的应用。
以下内容根据演讲嘉宾视频分享以及PPT整理而成。
本文将围绕一下几个方面进行介绍:
1. 深度学习模型压缩与加速
  • Extremely Low Bit Neural Networks
  • Extremely Sparse Network
2. 训练平台
3. 高效前向推理工具
一. 深度学习模型压缩与加速
随着深度学习网络规模的增大,计算复杂度随之增高,严重限制了其在手机等智能设备上的应用。例如下图一展示的VGGNet和图二的残差网络,如此大规模的复杂网络模型在端设备上使用并不现实。
因此需要采用深度学习模型来进行压缩和加速,下面介绍两种压缩算法。
1. Extremely Low Bit Neural Networks

Low Bit模型是指将连续的权重压缩成离散的低精度权重。如下图所示,原始深度学习的网络参数为float型,需要32bit存储空间,将其转化成只有三值(0,+1,-1)的状态,存储只需要2bit,极大地压缩存储空间,同时也可以避免乘法运算,只是符号位的变化和加减操作,从而提升计算速度。
这里为大家提供一篇对Low Bit模型详细介绍的参考文章Extremely Low Bit Neural Networks: Squeeze the Last Bit Out with ADMM。
接下来以二值网络为例讲解上述的压缩过程。首先假设原始神经网络的优化目标函数为f(w),限制条件为深度学习网络的参数包含在C内,如果C为{-1,1},则该网络便为二值网络,如下所示:
这里引入了一种解决分布式优化和约束优化的常用方法ADMM(Alternating Direction Method of Multipliers),来求解以上离散非凸约束优化问题,其形式如下:
ADMM用于解决当目标函数为f(x)+g(z),其中限制条件是Ax+Bz=c的优化。首先写出增广拉格朗日函数,然后将上述问题转化成求解如下所示的xyz:
即先求解xz的极小值,然后得到y的更新。上述即为ADMM标准解法,接下来,如何将Low Bit Neural Networks问题转化成ADMM问题呢?
首先需要引入指示函数,形式如下所示:
此时二值神经网络的目标函数等价于优化目标函数和指示函数之和:
这意味着,当指示函数属于C时,优化目标即为初始目标,没有变化;当指示函数不属于C时,指示函数为正无穷,此时会首先优化指示函数。
然后需要引入一致性约束,这里引入辅助变量G,并约束W=G,则目标函数等价于:
加入辅助变量后,就可以将二值神经网络的优化问题转化为ADMM标准问题。接下来,写出上式增广拉格朗日公式,使用ADMM算法求解完成优化目标,如下所示:
除上述二值网络外,还有以下几种常用的参数空间:
参数空间中加入2、4、8等值后,仍然不需要乘法运算,只需进行移位操作。因此,通过这种方法将神经网络中的乘法操作全部替换为移位和加操作。
将上述Low Bit模型应用至ImageNet进行分类,最终的优化结果如下表所示:
表一展示了该算法在AlexNet和VGG-16的应用结果,可以发现该算法在二值和三值网络中的效果明显优于原始范围的应用,并且三值网络中的分类结果与全精度的分类结果相比,几乎是无损的。表二是该算法在ResNet-18和ResNet-50中的应用,结果也与表一中类似。
在检测方面,该算法仍具有较高的可用性。如下表所示:
本次实验的数据集为Pascal VOC 2007。根据上表中数据可知,三值空间内的检测结果精度与全精度参数空间相比,误差几乎可以忽略不计。
2. Extremely Sparse Networks

稀疏神经网络适用于网络中大部分参数为零的情况,存储参数可以通过简单的压缩算法,例如游程编码,极大的减小参数存储空间,并且由于0可不参与计算,从而节约大量的计算空间,提升计算速度。稀疏网络中,优化目标仍然和上述相同,限制条件改为如下所示:
对f(W)求梯度下降值(Gradient Descent),将其进行迭代,每迭代一次,就进行一次连接剪枝(Connection Pruning),裁剪的标准是,W的参数越小,重要性越低,将比较小的参数置零,从而保证稀疏度。
但上述解法存在一个明显的问题是,如下图所示:
w1与w2相比,w1与0更近,但若将w1置零,对函数的损失更大,因此在决定w的重要性时,必须同时考虑w本身大小和斜率。只有在w值和斜率都比较小时,才可以将其置零。基于上述标准,完成了对Alexnet和GoogleNet的稀少度实验,如下图所示:
由上图结果可知,无论是纯卷积网络,还是包含全连接层网络,都可以达到90%以上的稀疏度。
3. 实验结果对比

上文中介绍了稀疏和量化两种方法,实验一将这两种方法同时作用于Alexnet,结果如下所示:
由上图可以得知,在3Bits,稀疏度为90%以上时,精度损失几乎可以忽略不计,此时压缩率可以达到82倍以上。
实验二中,将两种方法作用于InageNet和Pascal VOC,其中P是稀疏,Q是量化,由图中结果可知,实验过程精度损失极小,并且InageNet中inference的速度有明显提升,Pascal VOC可以达到稀疏度88.7%,量化为3bits,40倍的压缩率下,相对于全精度网络mAP只有1点的下降幅度。
二. 训练平台
基于上述两种方法,建立起Gauss训练平台。目前Gauss训练平台支持多种常见训练任务(例如人脸、ocr、分类、监测等)和模型(例如CNN、LSTM等),并且支持多机训练,能够以尽可能少的参数设置,减少用户使用成本。
同时Gauss训练平台支持两种模型训练工具:Data-dependent和Data-independent。Data-dependent模型训练工具需要用户提供训练数据,训练时间较长,适合压缩和加速要求较高的场景。Data-independent模型训练工具无需用户提供任何训练数据,一键式处理,处理时间在秒级。
三. 高效前向推理工具
建立起训练平台之后,模型的真正运用还需要高效的前向推理工具。基于低精度矩阵计算工具AliNN&BNN,快速实现低比特矩阵乘法计算。实现后的推理工具在ARM平台上相比竞品提速2-5倍,Intel平台上提速3倍。

文章作者:聒小小噪

原文链接

端上智能——深度学习模型压缩与加速相关推荐

  1. 腾讯 AI Lab 正式开源PocketFlow自动化深度学习模型压缩与加速框架

    11月1日,腾讯AI Lab在南京举办的腾讯全球合作伙伴论坛上宣布正式开源"PocketFlow"项目, 该项目是一个自动化深度学习模型压缩与加速框架,整合多种模型压缩与加速算法并 ...

  2. 一文看懂深度学习模型压缩和加速

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 1 前言 近年来深度学习模型在计算机视 ...

  3. 深度学习模型压缩与加速

    深度神经网络在人工智能的应用中,包括语音识别.计算机视觉.自然语言处理等各方面,在取得巨大成功的同时,这些深度神经网络需要巨大的计算开销和内存开销,严重阻碍了资源受限下的使用.模型压缩是对已经训练好的 ...

  4. 深度学习模型压缩与加速综述!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Pikachu5808,编辑:极市平台 来源丨https://zh ...

  5. 深度学习模型压缩与加速综述

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 本文详细介绍了4种主流的压缩与加速技术:结构优化.剪枝.量化 ...

  6. 深度学习模型压缩与加速技术(三):低秩分解

    目录 总结 低秩分解 定义 特点 1.二元分解 2.多元分解 参考文献 深度学习模型的压缩和加速是指利用神经网络参数的冗余性和网络结构的冗余性精简模型,在不影响任务完成度的情况下,得到参数量更少.结构 ...

  7. 深度学习模型压缩与加速技术(二):参数量化

    目录 总结 参数量化 参数量化定义 参数量化特点 1.二值化 二值化权重 二值化权重与激活函数 2.三值化 3.聚类量化 4.混合位宽 手工固定 自主确定 训练技巧 参考文献 深度学习模型的压缩和加速 ...

  8. 深度学习模型压缩与加速技术(七):混合方式

    目录 总结 混合方式 定义 特点 1.组合参数剪枝和参数量化 2.组合参数剪枝和参数共享 3.组合参数量化和知识蒸馏 参考文献 深度学习模型的压缩和加速是指利用神经网络参数的冗余性和网络结构的冗余性精 ...

  9. PyTorch 深度学习模型压缩开源库(含量化、剪枝、轻量化结构、BN融合)

    点击我爱计算机视觉标星,更快获取CVML新技术 本文为52CV群友666dzy666投稿,介绍了他最近开源的PyTorch模型压缩库,该库开源不到20天已经收获 219 颗星,是最近值得关注的模型压缩 ...

最新文章

  1. 通过脚本案例学习shell(二) --- 通过线性显示/etc/passwd内容了解while read用法
  2. 进击的Python【第一章】:Python背景初探与Python基础(一)
  3. java命名$_java命名规范
  4. [YTU]_2535 (Problem I: C++复数运算符重载(+与))
  5. hisi mmz内存管理
  6. RocketMQ 核心
  7. java1.5特性_JDK核心API:Java1.5语言新特性简单总结
  8. ecshop首页调用指定分类的所有产品(指定一级调二级)
  9. [PAT乙级]1009 说反话
  10. AutoIt: WinGetClassList可以把当前窗口所有的handle全部列出来
  11. react 组件构建_让我们用100行JavaScript构建一个React Chat Room组件
  12. 迭代式客户端-服务系模型
  13. 数字int转换成文字string形式的方法
  14. 如何在Mac上的Pages文稿中设置对开页?
  15. Building Autoencoders in Keras
  16. WebM视频格式怎么转换成MP4
  17. cesium--3d-tiles译文[官方]
  18. 分享四个黑科技app,每一个都让你好用到停不下来
  19. 马尔可夫链(Markov chain)的基本认识
  20. oppoa59s计算机功能,OPPO A59s怎么开启OTG功能-OPPO A59s开启OTG功能方法 - 河东软件园...

热门文章

  1. python vector_50行Python代码实现经典游戏,不仅是划水神器,更是学习利器!
  2. 前端怎么获取cookie的值_京东购物小程序cookie方案实践(附Demo)
  3. 北大保安又双叒…出“传奇”!这次是挑战“天下第一考”
  4. 美国教授北大演讲:并不是每个人都适合做学术
  5. 中国已消失的9所世界级大学
  6. 毕业一年多被裁,没有计算机文凭,我在两个月内搞定4份Offer,且收入翻倍
  7. 又一位大师辞世!今年已痛失15位两院院士
  8. 和大家谈谈数学模型之美
  9. (pytorch-深度学习)循环神经网络的从零开始实现
  10. HTML字体小于12谷歌不兼容,Chrome谷歌浏览器下不支持css字体小于12px的解决办法...