深度学习模型压缩方法(1)-----综述

1.研究背景

  • 对模型预测精度无明显影响
  • 压缩模型的参数数量、深度来降低模型空间复杂度 
    • 全连接层参数多,模型大小由全连接层主导
  • 不显著提高训练时间复杂度,降低预测时间复杂度(计算量) 
    • 卷积层计算量大,计算代价由卷积操作主导

2.方法

2.1.更精细模型的设计

  • Aggregated Residual Transformations for Deep Neural Networks
  • DenseNet
  • Highway
  • [2016,Iandola,]SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size 
    • 思想:
    • 将3x3卷积核替换为1x1卷积核(1个1x1卷积核的参数是3x3卷积核参数的1/9,这一改动理论上可以将模型尺寸压缩9倍)。
    • 减小输入到3x3卷积核的输入通道数
    • 尽可能的将降采样放在网络后面的层中
    • 借鉴ResNet思想,对原始网络结构做了修改,增加了旁路分支,将分类精度提升了约3%。
    • 作者提出了一个类似inception的网络单元结构,取名为fire module。一个fire module 包含一个squeeze 卷积层(只包含1x1卷积核)和一个expand卷积层(包含1x1和3x3卷积核)。其中,squeeze层借鉴了inception的思想,利用1x1卷积核来降低输入到expand层中3x3卷积核的输入通道数。
  • MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 
    • 思想:借鉴factorized convolution的思想,将普通卷积操作分成两部分
    • Depthwise Convolution:每个卷积核滤波器只针对特定的输入通道进行卷积操作
    • Pointwise Convolution:采用1x1大小的卷积核将depthwise convolution层的多通道输出进行结合
  • ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices 
    • 思想:基于MobileNet的group思想,将卷积操作限制到特定的输入通道。而与之不同的是,ShuffleNet将输入的group进行打散,从而保证每个卷积核的感受野能够分散到不同group的输入中,增加了模型的学习能力。

2.2.模型裁剪/剪枝(Pruning)

  • 思路源头都是来自于Oracle pruning 的方法,即挑选出模型中不重要的参数,将其剔除而不会对模型的效果造成太大的影响。在剔除不重要的参数之后,通过一个retrain的过程来恢复模型的性能。
  • 如何找到一个有效的对参数重要性的评价手段,在这个方法中就尤为重要,我们也可以看到,这种评价标准花样百出,各有不同,也很难判定那种方法更好。
  • 目前,基于模型裁剪的方法是最为简单有效的模型压缩方式。

2.2.1单个权重(Weight)剪枝——非结构化

  • 定义:任意权重被看作是单个参数并进行随机非结构化剪枝。
  • [1989,Lecun,NIPS]Optimal brain damage: 
    • 思想:将网络中任意参数都看做单个参数
    • 结果:有效提高预测准确率,不能减小运行时间,剪枝代价高,适用于小网络
  • [1993,Hassibi,NIPS]Second Order Derivatives for Network Pruning:Optimal Brain Sugeon: 
    • 思想:在Optimal brain damage基础上增加了基于手术恢复权重更新的步骤
    • 结果:在准确率、泛化能力上提升,但是计算量大
  • [2015,Srinivas,BMVC]Data-free parameter pruning for deep neural networks: 
    • 思想:与Optimal Brain Sugeon相似,将剪枝看作是将小权重置零的操作,手术恢复则相当于找到相似权重补偿被置零的权重造成的激活值损失。
    • 结果:在剪枝时完全不依赖任何训练数据,只依赖网络中的权重,因而通过手术恢复准确率时不需要任何训练数据调优,通过大量推导近似大大减少计算复杂度
  • [2015,Han,NIPS]Learning both Weights and Connections for Efficient Neural Network

    • 思想:根据神经元连接权值的大小确定修剪训练后网络中的不重要连接(connections),来减少网络所需要的参数。
  • [2016,Kadetotad,ICCAD]Efficient memory compression in deep neural networks using coarse-grain sparsification for speech applications

  • [2017,Molchanov,ICLR]Pruning Convolutional Neural Networks for Resource Efficient Transfer Learning Inference 
    • 思想:从众多的权重参数中选择一个最优的组合(组合优化问题),使得被裁剪的模型的代价函数的损失最小。结合贪婪剪枝和基于反向传播的微调来确保剪枝后的网络的泛化性。提出了一种基于泰勒展开来近似计算去除部分参数后网络的损失函数的变化。
  • [2017,Wang,ICLR]Training Compressed Fully-Connected Networks with a Density-Diversity Penalty

    • 思想:Density指的是模型参数的冗余度,就是零和极小值的多少;Diversity指的是参数的多样性,即如果参数能够聚类成为少数几个类别,那么就是多样性低,反之就是多样性丰富。实际上论文的目的不是通过加入惩罚项直接训练一个很小的模型,而是通过这么一个惩罚,使得模型在训练时能够尽可能冗余,尽可能多样性低,这样在后续就可以更大程度低剪枝和量化编码。
  • 缺点: 
    • 导致网络连接不规整,需要通过稀疏表达来减少内存占用,进而导致在前向传播时,需要大量条件判断和额外空间来标明0或非0参数位置,因此不适合并行计算。
    • 非结构化的稀疏性需要使用专门的软件计算库或者硬件。

2.2.2核内权重(Intra Kernel Weight)剪枝/核的稀疏化——结构化

  • 对权重的更新加以正则项进行限制,使其更加稀疏,使大部分的权值都为0。
  • [2016,Wen,]Learning Structured Sparsity in Deep Neural Networks 
    • 思想:使用Group Lasso(一种类似于L1的正则化方式,可以看成是把weights当成组来对待,以此将成组的weights规约到0附近,实现学习出来的参数的尽可能地结构化稀疏),依次实现网络预测的加速。
  • [2016,Guo,]Dynamic Network Surgery for Efficient DNNs
  • [2016,JIN]Training Skinny Deep Neural Networks with Iterative Hard Thresholding Methods 
    • 思想:通过在目标函数中增加参数的L0范数约束,实现模型的稀疏化,但L0范数求解较困难,因此提出一种阶段迭代算法,首先仅更新权值较大的参数,然后恢复所有网络连接,迭代更新所有参数,在训练中可实现模型裁剪
  • [2017,Anwar,JETC]Structured pruning of deep convolutional neural networks: 
    • 思想1:定义显著性变量并进行贪婪剪枝。核内定步长粒度,将细粒度剪枝转化为粗粒度剪枝。
    • 全连接或稠密连接:一般作用到同一输入特征图上的Kernel必须采用相同的步长和偏置
    • 卷积层不是稠密连接:作用在不同特征图上的kernel步长与偏置可以不同
    • 思想2:使用进化粒子滤波器决定网络连接重要性

2.2.3卷积核(Kernel)/特征图(Feature Map)/通道(Channel/ Filter)剪枝——结构化

  • 定义:减去第i层的filter,进而减去第i层产生的部分特征图和第i+1层的部分kernel。
  • kernel粒度的显著性度量可以采用kernel的权重和来判断 
    • 采用Filter的权重和来判断
    • 其他
  • FeatureMap粒度的显著性度量确定: 
    • 采用Filter权重和来判断
    • 其他
  • [2015,Polyak,IEEE Access]Channel-Level Acceleration of Deep Face Representations 
    • InboundPruning方法
  • [2017,Li,ICLR]Pruning Filters for Efficient ConvNets 
    • 全局贪婪剪枝方法
    • 思想:选取filter权重和作为显著性度量,对每一层中的filter从大到小排序,画出权重和关于排序后下标的曲线,若曲线陡峭,则在这一层减去更多filter。在全部剪枝完成后再通过一次训练恢复准确率。
  • [2017,Hu,ICLR]Network Trimming: A Data-Driven Neuron Pruning Approach towards Efficient Deep Architectures 
    • 思想:激活值为0的神经元是冗余的,基于统计的方法删除对大部分不同输入都输出零值的单元,并进行交替重新训练
  • An Entropy-based Pruning Method for CNN Compression 
    • 思想:作者认为通过weight值的大小很难判定filter的重要性,通过这个来裁剪的话有可能裁掉一些有用的filter。因此作者提出了一种基于熵值的裁剪方式,利用熵值来判定filter的重要性。
  • Designing Energy-Efficient Convolutional Neural Networks using Energy-Aware Pruning 
    • 作者指出一个模型中的能量消耗包含两个部分,一部分是计算的能耗,一部分是数据转移的能耗,在作者之前的一片论文中(与NVIDIA合作,Eyeriss),提出了一种估计硬件能耗的工具,能够对模型的每一层计算它们的能量消耗。然后将每一层的能量消耗从大到小排序,对能耗大的层优先进行裁剪,这样能够最大限度的降低模型的能耗,对于需要裁剪的层,根据weight的大小来选择不重要的进行裁剪,同样的作者也考虑到不正确的裁剪,因此将裁剪后模型损失最大的weight保留下来。
  • Coarse Pruning of Convolutional Neural Networks with Random Masks 
    • 思想:既然无法直观上的判定filter的重要性,那么就采取一种随机裁剪的方式,然后对于每一种随机方式统计模型的性能,来确定局部最优的裁剪方式。 这种随机裁剪方式类似于一个随机mask,假设有M个潜在的可裁剪weight,那么一共就有2^M个随机mask。假设裁剪比例为a,那么每层就会随机选取ML*a个filter,一共随机选取N组组合,然后对于这N组组合,统计裁剪掉它们之后模型的性能,然后选取性能最高的那组作为局部最优的裁剪方式。
    • 作者同样将这种裁剪方式运用在kernel上,对kernel进行裁剪,并将filter级和kernel级的裁剪进行组合,得到了较好的结果。
  • [2017,Tian,]Efficient Gender Classification Using a Deep LDA-Pruned Net 
    • 思想:作者发现,在最后一个卷积层中,经过LDA分析发现对于每一个类别,有很多filter之间的激活是高度不相关的,因此可以利用这点来剔除大量的只具有少量信息的filter而不影响模型的性能
  • [2015,]Sparsifying Neural Network Connections for Face Recognition 
    • 思想:本文应用场景为人脸识别的模型DeepID。作者认为,如果一层中的某个神经元的激活与上一层的某个神经元的激活有很强的相关性,那么这个神经元对于后面层的激活具有很强的判别性。也就是说,如果前后两层中的某对神经元的激活具有较高的相关性,那么它们之间的连接weight就是非常重要的,而弱的相关性则代表低的重要性。如果某个神经元可以视为某个特定视觉模式的探测器,那么与它正相关的神经元也提供了这个视觉模式的信息,而与它负相关的神经元则帮助减少误报。作者还认为,那些相关性很低的神经元对,它们之间的连接不一定是一点用也没有,它们可能是对于高相关性神经元对的补充。
  • [2017,Luo,]ThiNet: A Filter Level Pruning Method for Deep Neural Network Compression
  • [2017,He,]Channel Pruning for Accelerating Very Deep Neural Networks 
    • 思想:首先通过Lasso回归的方法对卷积通道进行选择性删除,然后对权重进行学习调 
      整,利用最小二乘法重构通道删除之前的网络响应,在保证模型性能的条件下减少模型参数和计算量。
  • 优点: 
    • 不依赖任何稀疏卷积计算库及专用软件
    • 能大大减少测试的计算时间。

2.2.4中间隐层(Layer)剪枝

  • 定义:删除一些层,即改变网络结构
  • [2017,Rueda,GCRP]Neron Pruning for Compressing Deep Networks using Maxout Architectures 
    • 思想:提出一种最大化输出单元将多个神经元合并为更复杂的凸函数表达,并根据各个神经元再训练集上的响应的局部相关性进行选择。
  • DeepRebirth: A General Approach for Accelerating Deep Neural Network Execution on Mobile Devices 
    • 思想:将网络层分为权重层(如卷积层和全连接层)和非权重层(如Pooling层、ReLU层等),非权重层的理论计算量较小,但由于内存数据访问速度等原因,其计算耗时较多,提出将非权重层与权重层进行合并的方法,去除独立的非权重层后,运行时间显著减少 。

2.3网络分解(张量分解)

  • 方法: 
    • 将三维张量铺展成二维张量,使用标准SVD方法
    • 使用多个一维张量外积求和逼近(用三个一维张量外积求和进行K次累加来逼近一个秩为K的三维张量)
  • 目的:降低模型的时间复杂度
  • 通常基于张量的低秩近似理论和方法,将原始的权重张量分解为两个或者多个张量,并对分解张量进行优化调整
  • 优缺点: 
    • 低秩方法很适合模型压缩和加速。
    • 低秩方法的实现并不容易,因为它涉及计算成本高昂的分解操作。
    • 目前的方法逐层执行低秩近似,无法执行非常重要的全局参数压缩,因为不同的层具备不同的信息。
    • 分解需要大量的重新训练来达到收敛。

2.3.1CP分解

  • [2014,JADERBER]Speeding up convolutional neural networks using fine-tuned CP-decomposition 
    • 思想:采用CP分解法将一层网络分解为五层低复杂度的网络层,但在基于随机梯度下降法的模型权重微调过程中难以获取张量分解的优化解.作者利用两个卷积神经网络模 型对该方法进行评估,结果表明该方法以较低的性能损失实现更高的计算速度
  • [2014,Denton,NIPS]Exploiting linear structure within convolutional netowrks for efficient evalution 
    • 思想:探索多种张量分解方法,例如二维张量分解可采用奇异值分解法,三维张量可转化为二维张量进行分解,以及单色卷积分解和聚类法低秩分解等.作者利用 卷 积 参 数 的冗余性获得 近似计算过程,较大的减少所需的计算量,在保持原始模型浮动1%精度的条件下,基于 CPU和GPU的计算过程均取得近2倍的加速。

2.3.2SVD分解

  • [2016,Zhang]Accelerating very deep convolutional networks for classification and detection 
    • 思想:对参数矩阵进行张量SVD分解进行非线性问题的求解,同时不需要通过随机梯度下降过程进行优化,并在非对称重构中考虑前一网络层的累计重构误差,在不需要随机梯度下降(SGD)的情况下,开发了一种有效的非线性优化问题求解方法
  • [2015,Jaderberg,BMVC]Speeding up convolutional neural networks with low rank expansions 
    • 思想:使用秩为1(可以分解为行向量与列向量乘积)的卷积核作用在输入图上产生相互独立的M个基本特征图,卷积神经网络大小为k×k 的卷积核分解为1×k 和k×1的卷积核, 然后通过学习到的字典权重利用线性组合重构出输出特征图。
  • [2017,Tai]Convolutional neural networks with low-rank regularization. (Princeton University, etc.) 
    • 思想:提出从零开始训练低秩约束卷积神经网络模型的方法,不仅速度得到提升,而且在一些情况下模型性能也有所提高.作者提出一种低阶张量分解的新算法,用于消除卷积核中的冗余.该算法找 到 矩阵分解 的精神的全局优化器,比迭代方法更有效。

2.3.3Tucker分解

  • [2015,Kim,Computer science]Compression of deep convolutional neural networks for fast and low power mobile applications 
    • 思想:首先进行变分贝叶斯矩阵分解的秩选择,然后再进行核张量Tucker分解,最后再次对模型进行调整。

2.3.4张量列分解(Tensor Train,TT)

  • [2015,NOVIKOV]Tensorizing Neural Networks.
  • Ultimate tensorization_compressing convolutional and FC layers alike. (Moscow State University, etc)

2.3.5未归类

  • [2013,Sainath,ieeeicassp]Low-rank matrix factorization for deep neural network training with high-dimensional output targets 
    • 思想:
  • [2015,Liu,CVPR]Sparse convolutional neural networks

    • 思想:利用通道间和通道内冗余,在通道上进行稀疏分解,然后将高计算代价的卷积操作转换成矩阵相乘。然后再将矩阵稀疏化,结合微调步骤,最小化含有稀疏性最大化正则项的损失函数
  • [2013,Denil,NIPS]Predicting Parameters in Deep Learning

    • 思想:
  • [2015,Nakkiran,ISCA]Compressing Deep Neural Networks Using a Rank-Constrained Topology
  • Learning compact recurrent neural networks. (University of Southern California + Google)
  • Efficient and Accurate Approximations of Nonlinear Convolutional Networks. (@CVPR2015)
  • Learning with Tensors: Why Now and How? (Tensor-Learn Workshop @ NIPS’16)
  • [2016,Wang,]Fixed-point Factorized Networks

2.4 权值共享

2.4.1结构化矩阵

  • 思想:如果一个 m x n 阶矩阵只需要少于 m×n 个参数来描述,就是一个结构化矩阵。通常这样的结构不仅能减少内存消耗,还能通过快速的矩阵-向量乘法和梯度计算显著加快推理和训练的速度。
  • Structured Convolution Matrices for Energy-efficient Deep learning. (IBM Research–Almaden)
  • Structured Transforms for Small-Footprint Deep Learning. (Google Inc)
  • An Exploration of Parameter Redundancy in Deep Networks with Circulant Projections.
  • Theoretical Properties for Neural Networks with Weight Matrices of Low Displacement Rank.

2.4.2哈希

  • Functional Hashing for Compressing Neural Networks. (Baidu Inc)
  • [2015,Chen,ICML]Compressing Neural Networks with the Hashing Trick 
    • 思想:将参数映射到相应的哈希桶内,在同一个哈希桶内的参数则共享同一值。

2.4.3其他

  • [2016,Han,ICLR]Deep compression:compressing deep neural networks with pruning,trained quantization and Huffman coding 
    • 思想:
    • 利用k均值聚类算法计算权重的多个聚类中心,将权重量化为距离最近的聚类中心,通过训练微调的方式对权重进行补偿。
    • 首先修剪不重要的连接,重新训练稀疏连接的网络。然后使用权重共享连接的权重,再对量化后的权重和码本(codebook)使用霍夫曼编码,以进一步降低压缩率。
  • [2014,Gong,]Compressing deep convolutional networks using vector quantization 
    • 思想:通过使用kmeans算法将全部参数进行聚类,每簇中参数共享中心值。
  • Learning compact recurrent neural networks. (University of Southern California + Google)

2.5权重量化(Quantization)

  • 思想:通过减少表示每个权重所需的比特数来压缩原始网络。

2.5.1定点运算

  • [2011,Vanhoucke,NIPS]Improving the speed of neural networks on CPUs
  • [2014,Hwang,Journal of Signal Processing Systems]Fixed-point feedforward deep neural network design using weights+1,0,and -1
  • [2016,DETTMERS]8-bit approximations for parallelism in deep learning 
    • 思想:开发并测试8bit近似算法,将32bit的梯度和激活值压缩到8bit,通过 GPU集群测试模型和数据的并行化性能,在保证模型预测精度的条件下,提出的方法取得两倍的数 据传输加速。

2.5.2二值化、三值化

  • [2015,Courbariaux,NIPS]Binarized Neural Networks:Training deep neural networks with weights and activations constrained to+1 or-1 
    • 思想:二值化的权重策略对网络的权重进行较为极端的量化,限制权重只能是-1或1。
  • [2016,Rastegari,ECCV]Xnornet: Imagenet classification using binary convolutional neural networkSpeeding s 
    • 思想:网络权重二值化、输入二值化,从头开始训练一个二值化网络,不是在已有的网络上二值化。
  • [2017,]Performance Guaranteed Network Acceleration via High-Order Residual Quantization 
    • 思想:本文是对 XNOR-Networks 的改进,将CNN网络层的输入 进行高精度二值量化,从而实现高精度的二值网络计算,XNOR-Networks 也是对每个CNN网络层的权值和输入进行二值化,这样整个CNN计算都是二值化的,这样计算速度快,占内存小。
  • [2017,Lin]Neural networks with few multiplications 
    • 思想:
  • [2017,Zhou,ICLR]Incremental network quantization:Towards lossless cnns with low-precision weights 
    • 思想:给定任意结构的全精度浮点神经网络模型,能将其转换成无损的低比特二进制模型。增量式网络量化方法,三种独立操作:权重划分、分组量化、再训练。
  • [2017,Guo,CVPR]Network Sketching: Exploiting Binary Structure in Deep CNNs
  • [2016,Fengfu,CVPR]Ternary weight networks 
    • 思想:三值化

2.5.3未分类

  • [2016,Soulie,ICANN]Compression of deep neural networks on the fly

    • 思想:在模型学习阶段进行压缩的方法。首先在全连接层损失函数上增加额外的归一项,使得权重趋向于二进制值,然后对输出层进行粗粒度的量化。
  • [2015,]Deep learning with limited numerical precision

    • 思想:基于随机修约(stochastic rounding)的 CNN 训练中使用 16 比特定点表示法(fixed-point representation),显著降低内存和浮点运算,同时分类准确率几乎没有受到损失。
  • [2016,ZHOU]DoReFa-Net:training low bitwidth convolutional neural networks with low bitwidth gradients

    • 思想:利用低比特的梯度参数训练低比特的模型权重,且激活值也为低比特数据,该技术可对训练和预测过程进行加速。
  • [2016,Wu,CVPR]Quantized convolutional neural networks for mobile devices

    • 思想:提 出 一 个 量 化 卷 积 神 经 网 络 框 架 (CNN),基于k 均值聚类算法加速和压缩模型的卷积层和全连接层,通过减小每层输出响应的估计误差可实现更好的量化结果,并提出一种有效的训练方案抑制量化后的多层累积误差。用一个小矩阵(codebook)去量化大矩阵(权重矩阵)
  • ShiftCNN: Generalized Low-Precision Architecture for Inference of Convolutional Neural Networks

    • 思想:一个利用低精度量化技术实现的神经网络压缩与加速方案。
    • 该量化方法具有码本小、量化简单、量化误差小的优点。
  • Soft weight-sharing for neural network compression

  • 效果:权重量化的方法比稀疏分解效果更好。

2.6迁移学习/网络精馏

  • 迁移学习:将一个模型的性能迁移到另一个模型上
  • 网络精馏:在同一个域上迁移学习的一种特例。
  • [2006,Bucila,SIGKDD]Model Compression 
    • 思想:通过集成强分类器标注的伪数据训练了一个压缩模型,并再现了原大型网络的输出结果。
    • 缺点:仅限于浅层网络。
  • [2014,Hinton,NIPS]Distilling the Knowledge in a Neural Network 
    • 思想:这个复杂的网络是提前训练好具有很好性能的网络,学生网络的训练含有两个目标:一个是hard target,即原始的目标函数,为小模型的类别概率输出与label真值的交叉熵;另一个为soft target,为小模型的类别概率输出与大模型的类别概率输出的交叉熵,在soft target中,概率输出的公式调整如下,这样当T值很大时,可以产生一个类别概率分布较缓和的输出。作者认为,由于soft target具有更高的熵,它能比hard target提供更加多的信息,因此可以使用较少的数据以及较大的学习率。将hard和soft的target通过加权平均来作为学生网络的目标函数,soft target所占的权重更大一些。 作者同时还指出,T值取一个中间值时,效果更好,而soft target所分配的权重应该为T^2,hard target的权重为1。 这样训练得到的小模型也就具有与复杂模型近似的性能效果,但是复杂度和计算量却要小很多。
  • [2014,Ba,NIPS]Do deep nets really need to be deep 
    • 思想:设计了更浅却更宽的学生模型,同时保证两者的网络参数相同。
  • [2017,Romero,ICLR]Hints for the deep nets 
    • 思想:设计了更深的更窄的学生模型,同时保证两者的网络参数相同,采用Hints方式。
  • [2016,Chen,ICLR]Net2net:Accelerating learning via knowledge transfer 
    • 思想:一种网络生长的方法来获得学生模型的网络结构
  • [2016,Li,ECCV]Learning without forgetting 
    • 思想:分别从宽度和深度上进行网络生长,然后利用网络蒸馏方法训练学生模型
  • Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer 
    • 思想:本文将attention map作为知识从teacher模型迁移到student模型。注意力机制很早就被用在NLP中,后来被证明将attention应用在CNN中也可以取得不错的效果。作者提出attention map的原因是feature map的做法太多生硬,表现不佳。定义attention map的做法是将feature map不同通道的feature plane取绝对值然后相加。损失函数也做了改变,即在原损失函数的基础上加上teacher和student模型的attention maps之间的欧氏距离。attention map的做法可以看作全激活feature map的summary,所以拟合attention map的效果略好于feature map也是容易理解的。虽然比feature map的做法有进步,但是仍然存在要人为选取中间层的问题。
  • [2016,Sau,]Deep model compression:distilling knowledge from noisy teachers
  • Sequence-Level Knowledge Distillation. (Harvard University)
  • [2016,Cohen,]Group equivariant convolutional networks 
    • 思想:等变群论(equivariant group theory)。使 x 作为输入,Φ(·) 作为网络或层,T (·) 作为变换矩阵。即使用变换矩阵 T (·) 转换输入 x,然后将其传送至网络或层Φ(·),其结果和先将 x 映射到网络再变换映射后的表征结果一致。
    • 缺陷:将迁移信息应用到卷积滤波器的方法需要解决几个问题。首先,这些方法的性能可与宽/平坦的架构(如 VGGNet)相媲美,但是无法与较窄/特殊的架构(如 GoogleNet、Residual Net)相比。其次,迁移假设有时过于强大以致于无法指导算法,使得在某些数据集上的结果不稳定。
  • [2015,Romero]Fitnets:hints for thin deep nets 
    • 思想:在模型的网络层较深时,让学生网络直接模拟教师网络的输出比较困难,文中提出Fitnets模型,在深度神经网络模型的中间添加监督学习的信号,要求学生模型和教师模型的中间层激活响应尽可能一致.训练过程分为两阶段,首先利用教师网络中间层信息训练学生模型前部参数,再利用教师模型的最终输出信息训练学生模型的全部参数。
  • Knowledge Projection for DNN 
    • 思想:这篇文章的做法和fitnet的做法几乎完全相同,两点改变:中间层的选取上采用了迭代选择的方案,选择标准是联合loss最小;teacher模型的中间输出不只监督student模型的底层,也被继续利用监督student模型的高层训练。
  • [2016,Huang]Like what you like:knowledge distill via neuron selectivity transfer 
    • 思想:认为Fitnets方法要求学生模型模仿教师模型的全部特征图,该设定过于严格,由于学生模型与教师模型的能力存在较大差异,Fitnets的限制条件可能不利于参数学习过程的收敛和模型性能,因此利用学生-教师模 型 网络激活 分 布 的 一 致 性 指导学生模型的训练过程,使用最大平均差异作为损失函数,优化该损失函数促使学生模型和教师模型的网络响应分布尽可能相似。
  • [2017,YIM]A gift from knowledge distillation:fast optimization,network minimization and transfer learning 
    • 思想:引 导 学 生 模 型 学 习 教 师模型网络层之间的数据流信息,该信息定义为层与 
      层之间的内积,两个多通道网络层的数据流关系可用FSP(Flow of Solution Procedure)矩阵表示,在教师-学生框架中,优化目标函数为教师-学生模型对应层之间FSP差异的L2范数.该方法促使学生模型学习教师模型层与层之间的抽象关系,取得较好效果,并可用于其他迁移学习任务。
  • [2017,,NIPS]Sobolev training for neural network 
    • 思想:在sobolev空间中近似两个函数,即不光match两个函数的输出,还match输出对于输入的梯度,即梯度也提供了非常丰富的信息。把teacher和student模型分别看作两个函数,采用sobolev训练的方式比只match输出要好很多。
  • DarkRank: Accelerating Deep Metric Learning via Cross Sample Similarities Transfer 
    • 思想:之前的工作都是考虑teacher模型和student模型的输出以及中间结果的匹配,insight来源于Hinton的soft target,即让student模型学习teacher模型的不同样本之间的排序关系。假设1个batch有7个样本进来,输出端得到7张feature map,但这7张feature map是有亲疏远近关系的,对于类别6, 样本0到它的距离小于5到它的距离。换句话说,在teacher模型中这7个样本在类别6上的排序关系也可以作为知识传递给student模型。
  • Learning loss for knowledge distillation with conditional adversarial networks 
    • 思想:这篇文章将GAN和KD做了一个结合,取得了不错的效果。作者认为student模型的容量远小于teacher模型,让student模型完全匹配teacher的做法有点困难,而且采用l2损失逼近的方式一定程度上限制了student模型的自主学习空间。学生网络是生成器,判别器是一个多层感知机网络,生成器和判别器迭代优化,生成器的目标是生成让判别器无法辨别的logits。某种程度上,这个工作也可以理解成对损失函数做了改进。
  • Rocket Launching: A Universal and Efficient Framework 
    • 思想:在定义知识上没有大的创新,使用的仍然是logits,但是在学习框架上和之前有所不同。它不用预训练teacher模型,而是student和teacher模型同时训练;另外一点是共享网络参数,共享一部分参数相当于火箭发射点火助推器的作用。所以student模型不是向一个已经完全学好的teacher模型学习,每次都去学习一个相对正确的输出,而是和teacher模型一起学习成长,连同teacher模型犯错后纠错的过程也一并学习了。
  • Mimicking Very Efficient Network for Object Detection 
    • 思想:在检测任务中,直接拟合logits或者feature map都是不可行的。所以作者采用匹配proposal的做法。
  • Cross Modal Distillation for Supervision Transfer 
    • 思想:作者提出跨模态迁移知识的做法,即在RGB数据集学习到的知识也能迁移到深度场景中来。
  • Face Model Compression by Distilling Knowledge from Neurons 
    • 思想:人脸识别中,迁移的知识更具针对性,选择特定的特征去拟合,尽量做到特征选择的均匀性。
  • Data-free knowledge distillation for deep neural networks 
    • 思想:这篇文章的应用场景是当训练数据由于隐私等问题对于student模型不可用的时候,如何通过extra metadata的方式解决。
  • Using Knowledge Distillation To Improve Low-Precision Network Accuracy 
    • 思想:本文将KD和网络量化做了一个结合,用高精度teacher模型指导低精度student模型的训练。网络参数精度下降后准确率势必会受到影响,在获得teacher模型的知识之后或许可以从一个坏的局部最优点爬上来。作者提出了3种思路:teacher模型和量化后的student模型联合训练;预训练的teacher模型指导量化的student模型从头开始训练;teacher模型和student模型均进行了预训练,不过student模型在全精度权重基础上做了量化,然后student在teacher模型的指导下进行finetuning。
  • Moonshine: Distilling with Cheap Convolutions 
    • 思想:这篇工作将KD和设计轻便的网络结构方法做了结合。当复杂网络结构被简化的卷积模块替换的时候,计算更加高效,精度势必受到影响。此时,将原网络作为teacher模型,简化之后的网络作为student模型,然后通过teacher模型指导student模型的训练。

2.7计算加速

  • Faster CNNs with direct sparse convolutions and guided pruning 
    • 思想:提出一种基于向量形式的乘法,实现密集矩阵与稀疏矩阵之间的高效乘法运算。
  • [2017,Gysel]Hardware-oriented approximation of convolutional neural networks 
    • 思想:提出一种模型近似框架 Ristretto,用于分析模型卷积层和全连接层的权重和输出的数值分辨率,进而将浮点型参数转化为定点型数值,并通过训练过程对定点型模型进行微调。
  • [2017,,ICML]MEC: Memory-efficient Convolution for Deep Neural Network 
    • 思想:内存利用率高且速度较快的卷积计算方法
  • More is Less: A More Complicated Network with Less Inference Complexitv 
    • 思想:提前锁定哪些值将会为0,从而在矩阵乘法时直接避免相应运算。
  • Speeding up Convolutional Neural Networks By Exploiting the Sparsity of Rectifier Units 
    • 思想:由于使用ReLU作为激活函数的网络,其网络输出通常都非常稀疏。本文不计算完整的矩阵乘法,而是只计算非0值导致的输出。并且,充分利用AVX或者SSE指令完成 (1×1)×(1×4)(1×1)×(1×4)的乘法。

2.8对数据进行变换

  • WAE-Learning a Wavelet-like Auto-Encoder to Accelerate Deep Neural Networks 
    • 思想:WAE借助小波分解得思想,将原图分解成两个低分辨率图像,以达到网络加速的目。

参考资料

  • https://blog.csdn.net/wspba/article/details/75671573
  • https://www.ctolib.com/ZhishengWang-Embedded-Neural-Network.html
  • https://blog.csdn.net/touch_dream/article/details/78441332
  • https://zhuanlan.zhihu.com/p/28439056
  • https://blog.csdn.net/QcloudCommunity/article/details/77719498
  • https://www.cnblogs.com/zhonghuasong/p/7493475.html
  • https://blog.csdn.net/jackytintin/article/details/53445280
  • https://zhuanlan.zhihu.com/p/27747628
  • https://blog.csdn.net/shuzfan/article/category/6271575
  • https://blog.csdn.net/cookie_234
  • https://www.jianshu.com/u/f5c90c3856bb

你可能感兴趣的:(模型压缩)