ModelCompression

Dissertation Progress

Preface

  • 有五种常用的模型压缩方法,剪枝,量化,低秩分解,知识蒸馏,紧凑卷积核

    Compression Thread

  • 模型压缩主要考察两个指标,ParamsFlops(Params和Flops分别度量了模型的大小以及其算数->小)

    • 其中Params指的是模型的参数,因为我们训练模型一般都是以float32为精度的,?所以模型大小一般是参数的4倍
    • Flops全称为floating point operations per second。意指每秒浮点运算速度

学术界 + 工业界

卷积结构的类型

CNN 两大核心思想:(减少参数数量 运算变的简洁高效,可以在超大规模数据集上运算)

  1. 网络局部连接(Local Connectivity) 局部感受野(通过一个局部的感受野去感受外界图像一样,每一个神经元都不需要对全局图像做感受,每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来就可以得到全局的信息了。这样,我们就可以减少连接的数目,也就是减少神经网络需要训练的权值参数的个数)
  2. 卷积核参数共享(Parameter Sharing)

正常卷积(Convolution)

$$
PARAM: \mathrm{Ci} \times \mathrm{K} \times \mathrm{K} \times \mathrm{Co}+\mathrm{bias}
$$

[ torch.Nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True) ]

Pointwise Convolution

  • kernel_size = 1
  • $PARAM: \mathrm{Ci} \times \mathrm{Co}+\mathrm{bias}$
  • 通道维度上的全连接
  • 没有空间信息(综合所有feature_map 的信息 )

[ torch.Nn.Conv2d(in_channels, out_channels,kernel_size = 1, stride=1, padding=0, dilation=1, groups=1, bias=True) ]

分组卷积(Group Convolution)

Group Convolution vs. Simple One

  • 从 channel 上分组,两组分别进行卷积
  • 输出的两个feature_map拼到一起
  • $PARAM:2(\mathrm{Ci} / 2 \times \mathrm{K} \times \mathrm{K} \times \mathrm{Co} / 2)+\mathrm{bias} $

[ torch.Nn.Conv2d(in_channels, out_channels,kernel_size, stride=1, padding=0, dilation=1, groups=2, bias=True) ]

Depthwise / Channel-wise Convolution

  • extreme circumstance of Group Convolution
  • $PARAM:\mathrm{Ci} \times \mathrm{K} \times \mathrm{K}+\mathrm{bias}$
  • ↑ 参数量少
  • 通道之间没有打通,通常后接 1 x 1 的卷积打通通道信息

[ torch.Nn.Conv2d(in_channels, out_channels,kernel_size, stride=1, padding=0, dilation=1, groups=Ci, bias=True) ]

空洞卷积(Dilated Convolution)

[或者叫: 扩张卷积 GIF Source:vdumoulin/conv_arithmetic]

image-20191120105445119

$$
\begin{array}{l}{H_{\text {out}}=\left\lfloor\frac{H_{\text {in}}+2 \times \text { padding }[0]-\text { dilation }[0] \times(\text { kernel size }[0]-1)-1}{\text { stride [0] }}+1\right\rfloor} \\ W_{o u t}=\left\lfloor\frac{W_{i n}+2 \times \text { padding }[1]-\text { dilation }[1] \times(\text { kernel size }[1]-1)-1}{\text { stride }[1]}+1\right\rfloor\end{array}
$$

  • $PARM:\mathrm{Ci} \times \mathrm{K} \times \mathrm{K} \times \mathrm{Co}+\mathrm{bias}$
  • 参数量不变(不希望扩大参数量)
  • 扩大感受野,在分割任务常见(希望有一个全局的区域)
  • 提取多尺度的特征

[ torch.Nn.Conv2d(in_channels, out_channels,kernel_size, stride=1, padding=0, dilation=1, groups=Ci, bias=True) ]

转置卷积/反卷积(Transpose Convolution)

Transpose Convolution
  • 卷积的逆操作(会将尺寸变大)
  • 一般用来做图像的上采样(小特征图–> 大特征图)
  • $PARAM: \mathrm{Ci} \times \mathrm{K} \times \mathrm{K} \times \mathrm{Co}+\mathrm{bias}$

[ torch.nn.ConvTranspose2d(in_channels, out_channels,kernel_size, stride=1, padding=0, output_padding = 0, groups=1, bias=True, dilation = 1) ]

常用CNN

LeNet-5(1990’s)

LeNet-5

AlexNet

AlexNet

ZF-Net

VGG-Nets

GoogLeNet

ResNet

DenseNet

Summary

模型压缩与加速

理论基础

  • 必要性:VGG-16: 309亿次浮点运算/一次识别任务
  • 可行性:Predict parameters in deep learning提出,NN存在显著冗余,仅使用5%权值就可以预测剩余权值(训练一小部分的原来的param就有可能达到和原来网络差不多甚至更好的性能)–> 正则化?

方法概述

方法名称 描述 应用场景 方法细节
convolutional kernel 低秩分解 - Conv & FC 低秩的矩阵近似高维的矩阵(c &fc 都是Tensor的运算)& 支持零训练 + 预训练
filter-level pruning 滤波器层面的剪枝 删除对accuracy影响不大的参数 Conv & FC 鲁棒性 & 支持零训练 + 预训练
quantization 参数量化 & 二值化 减少表示每个权重所需的bit 来压缩原始网络 Conv & FC 依赖二进制编码方式,适合FPGA & 单片机部署
knowledge distillation 知识蒸馏 训练一个更紧凑的网络从大的模型蒸馏知识 Conv & FC 模型表现对应用程序和网络结构敏感 & 只支持零训练
structured simplification 轻量化/紧凑的模型结构设计 设计特别的卷积核来保存参数 Conv 只支持零训练

模型压缩与加速方法

知识蒸馏


   Reprint policy


《ModelCompression》 by David Qiao is licensed under a Creative Commons Attribution 4.0 International License
  TOC