模型压缩总览

深度学习使得很多计算机视觉任务的性能达到了一个前所未有的高度。不过,复杂的模型固然具有更好的性能,但是高额的存储空间、计算资源消耗是使其难以有效的应用在各硬件平台上的重要原因。为了解决这些问题,许多业界学者研究模型压缩方法以最大限度的减小模型对于计算空间和时间的消耗。最近团队里正在研究模型压缩相关的内容,正好在这里总结一下。(我的认识还很肤浅,本文也会不断补充和修改,欢迎拍砖)

理论基础

  • 必要性
    在许多网络结构中,如VGG-16网络,参数数量1亿3千多万,占用500MB空间,需要进行309亿次浮点运算才能完成一次图像识别任务。
  • 可行性
    论文<Predicting parameters in deep learning>提出,其实在很多深度的神经网络中存在着显著的冗余。仅仅使用很少一部分(5%)权值就足以预测剩余的权值。该论文还提出这些剩下的权值甚至可以直接不用被学习。也就是说,仅仅训练一小部分原来的权值参数就有可能达到和原来网络相近甚至超过原来网络的性能(可以看作一种正则化)。
  • 最终目的
    最大程度的减小模型复杂度,减少模型存储需要的空间,也致力于加速模型的训练和推测

目前的方案

  • 综述文章

  • 要解决这些问题往往需要从多个角度切入,包括机器学习算法,优化算法,计算机架构,数据压缩,索引编制及硬件设计等。对于模型压缩这一块的方法大致可以分为:低秩近似(low-rank Approximation),网络剪枝(network pruning),网络量化(network quantization),知识蒸馏(knowledge distillation)和紧凑网络设计(compact Network design)。


    image.png
  • 对于矩阵运算(特别是卷积运算)来说,如果权重矩阵稠密而且巨大,那么计算和存储都需要极大的开销。前三种方法都是致力于将权重矩阵变得更稀疏,以此来减小计算和存储的开销。后两种方法往往是需要对网络结构有较大的改动,也需要对神经网络的更深层原理有一定的认识才能进行更好的压缩。

  • 也能把模型压缩分为前端压缩和后端压缩:


    image.png
  • 对于模型压缩这方面的总览和发展历程,中科院的这篇已经介绍的非常好了。在这里我们主要分析一些论文并给出部分网上有的python实现代码。

1. 低秩近似/分解(low-rank Approximation/factorization):

这一部分的思路比较简单,如果把原先网络的权值矩阵当作满秩矩阵来看,那么是不是可以用多个低秩的矩阵来逼近原来的矩阵,以达到简化的目的?答案是肯定的。原先稠密的满秩矩阵可以表示为若干个低秩矩阵的组合,低秩矩阵又可以分解为小规模矩阵的乘积。对于二维矩阵运算来说SVD是非常好的简化方法,所以在早期的时候,微软研究院就做过相关的工作来对网络实现加速。后面对于高维矩阵的运算往往会涉及到Tensor分解方法来做加速和压缩,主要是CP分解、Tucker分解、Tensor Train分解和Block Term分解这些在2015年和2016年所做的工作。在这方面有几篇经典的论文。

论文

存在问题

应该说矩阵分解方法经过过去的发展已经非常成熟了,所以在2017、2018年的工作就只有Tensor Ring和Block Term分解在RNN的应用两篇相关文章了。
那么为什么Low-Rank在这两年不再流行了呢?除了刚才提及的分解方法显而易见、比较容易实现之外,另外一个比较重要的原因是现在越来越多网络中采用1×1的卷积,而这种小的卷积使用矩阵分解的方法很难实现网络加速和压缩。


2. 网络剪枝(network pruning):

网络剪枝的主要思想就是将权重矩阵中相对“不重要”的权值剔除,然后再重新fine tune 网络进行微调。

  • 广义上的修剪包括:
    1. 正则化regularization:修改目标函数/学习问题,所以优化后可能会得到一个参数较少的神经网络,例如添加L1Norm在损失函数中
    2. 修剪pruning:面向大规模神经网络,并删除某些意义上冗余的特征或参数
    3. 增长growing:从小型网络开始,按某种增长标准逐步增加新的单元
  • 剪枝的基本流程
    1. 衡量神经元的重要程度
    2. 移除一部分不重要的神经元
    3. 对网络进行微调
    4. 返回第一步,进行下一轮剪枝
  • 这一部分的核心问题包括:
    • 剪枝的粒度变化——剪多深
    • 剪枝方法——怎么剪
      1. 如何衡量权值的重要性。
      2. 如何选取去除权值的数量或比例。
    • 什么时候剪
      1. 在去除不重要的权值之后,如何保持网络性能。
      2. fine tune之后又会产生新的不重要权值,如何解决。
        我们从这几个核心问题着手展开

论文

开山之作
剪枝的粒度变化——剪多深
  • 细粒度剪枝:对权重进行剪枝,fine-grained sparsity
    • 优点:保留模型精度
    • 缺点:非结构化剪枝,对局部进行调整,依赖于专门的运行库和硬件设备,如LeCun的1989脑损伤论文。
  • 粗粒度剪枝(直接剪去filter或channel),coarse grained sparsity
  • 特例:直接剪网络分支结构(粒度最大)2017-Driven Sparse Structure Selection for Deep Neural Networks
    • 总体:引入Gate控制分支,数据驱动,动态剪枝,端到端
    • 具体实现:为CNN模型训练和剪枝提出了一个统一的框架。通过在某些CNN结构上引入缩放因子和相应的稀疏正则化,将其定义为联合稀疏正则化优化问题。
    • 局限性:应用于宽网络结构,在某些网络上不能用
剪枝的方法——怎么剪
剪枝与训练的结合——什么时候剪
剪枝后综合处理的及其他剪枝相关论文

3. 网络量化(Network Quantization)

一般而言,神经网络模型的参数都是用的32bit长度的浮点型数表示,实际上不需要保留那么高的精度,可以通过量化,比如用0~255表示原来32个bit所表示的精度,通过牺牲精度来降低每一个权值所需要占用的空间。此外,SGD(Stochastic Gradient Descent)所需要的精度仅为6~8bit,因此合理的量化网络也可保证精度的情况下减小模型的存储体积。
根据量化方法不同,大致可以分为二值量化,三值量化,多值量化
对网络网络进行量化要解决三个基本问题

  1. 如何对权重进行量化
  2. 如何计算二值权重的梯度
  3. 如何确保准确率

论文

二值量化( binary quantization)

思想是将权值矩阵中的单精度浮点数用两个值来表示,一般考虑使用符号函数或者加入线性化的符号函数来近似。

  • 2017-Towards Accurate Binary Convolutional Neural Network
    致力于不损失模型精度,使用multiple binary weight/multiple binary activations
  • 2016-Binarized Neural Networks on the ImageNet Classification Task
    分析了权值变化
  • 2016-XNOR-NET
    • 提出了一个BWN(Binary-Weight-Network)和XNOR-Network,前者只对网络参数做二值化,带来约32x的存储压缩和2x的速度提升,而后者对网络输入和参数都做了二值化,在实现32x存储压缩的同时带了58x的速度提升;
    • 提出了一个新型二值化权值的算法;
    • 第一个在大规模数据集如ImageNet上提交二值化网络结果的工作;
    • 无需预训练,可实现training from scratch。
三值量化(ternary quantization)

改进二值量化

多值量化
量化++

这部分介绍的是网络量化+其他处理方法以达到模型压缩的目的的论文

变bit/组合bit量化

这一部分文章考虑对于同一个模型采用不同种类的bit组合来进行模型量化

哈希
量化总结

最为典型就是二值网络、XNOR网络等。其主要原理就是采用1bit对网络的输入、权重、响应进行编码。减少模型大小的同时,原始网络的卷积操作可以被bit-wise运算代替,极大提升了模型的速度。但是,如果原始网络结果不够复杂(模型描述能力),由于二值网络会较大程度降低模型的表达能力。因此现阶段有相关的论文开始研究n-bit编码方式成为n值网络或者多值网络或者变bit、组合bit量化来克服二值网络表达能力不足的缺点。

知识蒸馏(knowledge distillation)

蒸馏模型采用的是迁移学习,通过采用预先训练好的复杂模型(Teacher model)的输出作为监督信号去训练另外一个简单的网络。这个简单的网络称之为student model。

论文

开山之作
  • 2006-Model Compression
    尝试用一个神经网络近似多个集成的分类器
  • 2014-Do deep nets really need to be deep?
    • Our success in training shallow neural nets to mimic deeper models suggests that there probably exist better algorithms for training shallow feed-forward nets than those currently available.
    • 该文章训练了和深度网络几乎拥有同样参数数量的浅层网络(也就是更肥更短的网络),在TIMIT phoneme recognition task上能够达到与深度网络相近的性能,以此说明了深度网络并不是一定优于浅层网络。
  • 2015-Distilling the knowledge in a neural network参考阅读
    • 作者Hinton认为是有办法将深度网络中所学到的知识转移到另一个相对简单的网络中去的。
    • 提出用改造的原始模型的softmax输出(加入一个温度常数T控制预测概率的平滑程度)作为一个软目标(soft target),加权结合真实标签(hard target)来计算小网络训练时的损失函数,权重经验值推荐为9:1。
    • 这种方法对于没有标签的数据集也可以拿来训练,而且实验效果还不错。在mnist数据集上对于迁移训练集数据中包含无标签数据或者某些类别数据缺失,依然能够有很好的表现。另外大模型的输出相较于GTlabel来说包含更多信息,如类间距和类内方差等,所以这也可以作为数据增广的一种手段。
监督信息

着重于研究教学监督信息的丰富与改进

学生模型设计、方法集成
其他任务
模型加速
非压缩目的的蒸馏

总结

  • 总体的来说,知识蒸馏是一种迁移学习,将大模型的知识最大程度的教授给小模型,以达到压缩模型的目的。目前来看,无论是压缩比还是蒸馏后的性能都还有待提高。
  • 存在的问题和研究的趋势
    1. 寻“知识”的不同形式,去除softmax的限制,研究趋向于选用中间特征层
    2. 如何选择特征层,如何设计损失函数
    3. 训练学生模型数据集的选择
    4. 学生模型的设计
    5. 如何和其他压缩方法集成

紧凑网络设计

  • 如果要把模型压缩分为两部分的话,我想可以分为压缩已有的网络和构建新的小网络两种。其中剪枝、量化和低秩分解可以归到第一种,蒸馏归入第二种,而更好的方法就是在模型构建的初始阶段,就选择小而紧凑的网络,也就是紧凑网络设计。
  • 目前我觉得应用紧凑模型设计最成功之一要数MobileNets系列
    了,当然也包括ShuffleNets系列,Inception系列(特别是V3和Xception)等。

论文

2017-MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

  • 提出采用深度可分离卷积(Depthwise separable convolution)来构建卷积,并且给出了不同程度的accuracy和latency的trade off。

参考:

  1. CNN 模型压缩与加速算法综述

  2. 【一文看懂】深度神经网络加速和压缩新进展年度报告

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • title: "My Jumble of Computer Vision"category: "Computer ...
    joshua_1988阅读 3,222评论 0 3
  • “我们也很抱歉,我希望我像你们一样仁慈,但我只是四年级辍学人。我有一个妻子,我有两个女儿,这就是我的全部世界。我从...
    兔几默先生阅读 512评论 0 0
  • 2017年的最后一个月,我用了半个小时,结束了七年的感情…… 没有人教我如何去面对离婚后的自己,大家只看到我还和以...
    玉鱼雨钰阅读 287评论 0 0
  • 我可能就是那么的没有出息吧。 明明知道结局,但还是想努力一把,想每天起床看到你,想每天一起去买菜,知道你的身体不好...
    言尚阅读 152评论 0 0