临沂建设局网站质量三监督,outline免费服务器,赣州91人才网赣州招聘,wordpress添加投稿功能神经网络压缩调研 背景现有的深度模型压缩方法NetWork Prunning 网络剪枝设计结构化矩阵知识蒸馏权值共享Parameter Quantization#xff08;参数量化#xff09;量化和二进制化伪量化Architecture Design#xff08;Depth Separable Convolution#xff09;分解卷积 背景 … 神经网络压缩调研 背景现有的深度模型压缩方法NetWork Prunning 网络剪枝设计结构化矩阵知识蒸馏权值共享Parameter Quantization参数量化量化和二进制化伪量化Architecture DesignDepth Separable Convolution分解卷积 背景 小模型参数少容易将ML模型部署在资源有限的设备上但是直接训练一个好的小网络比较困难
现有的深度模型压缩方法
基于参数修建和共享的方法针对模型参数的冗余性 试图取出冗余和不重要的项基于低秩因子分解的技术使用矩阵/张量分解来估计深度学习模型的信息参数基于传输/紧凑卷积滤波器的方法设计页数的卷积滤波器来降低存储和计算复杂度知识蒸馏方法通过学习一个蒸馏模型训练一个更紧凑的神经网络来重现一个更大的网络输出
综述论文 :A Survey of Model Compression and Acceleration for Deep Neural Networks 转移层和参数修剪和共享可以一起使用模型量化和二值化可以与低秩近似一起使用以实现进一步的加速
NetWork Prunning 网络剪枝 删减神经网络没有用的参数
过程如下PPT叙述一遍训练一个网络针对网络的每一个参数评估一下重要性 每一个神经元的重要性移除不重要的参数或者神经元微调 重新训练一下 Fine-tune反复进行多次 修剪的单位 参数或者神经元
移除若干个权重参数但是实际操作不好定义 因为结构不对称,而且当Network不规则不方便使用GPU进行加速评价weight重要性我们可以用绝对值衡量即绝对值越大weight越重要或者采用之前介绍的life long learning的想法评价neuron重要性我们可以用其输出的结果为0的次数衡量即输出0越多越不重要。 neuron pruning 一神经元为单位进行剪枝通过去除冗余的神经元简化网络结构。这样得到的网络结构是规则的相比于Weight pruning这种方式更好实现也更容易通过GPU加速。
训练一个大的模型保留比较有用的模型参数 然后得到一个小的模型这样得到的小模型效果和原始的大模型效果差不多而不是直接训练一个小的模型 设计结构化矩阵 如果一个Mxn矩阵可以使用一个少于mxn的参数来描述就是一个结构化的矩阵通常这样的结构不仅能减少内存消耗还可以通过快速的矩阵-向量乘法和梯度计算显著加快推理和训练的速度 但是问题是结构的约束会导致精确度的损失因为约束可能给模型带来偏差另外一个方面如何找到一个合适的矩阵结构是很困难的没有理论来支持推导。
知识蒸馏 首先定义一个比较大的网络Teacher Net,然后训练那么训练后的网络比如手写数字识别任务预测1的结果概率是 10.7 70.2 90.1在定义一个小的网络Student Net 然后让他学习Teacher Net如果让比较小的网络得到和比较大的网络一样的效果比较难train,所以直接按照大的network的训练结果训练小的网络跟容易train。
这个Teacher Net不一定是一个巨大的network也有可能是将多个network组合ensemble得到的。但是多个network组合的模型往往比较复杂在实际应用中我们可以训练一个Student Net让结果逼近N Networks的结果使得模型准确度差不多的情况下复杂度大大减少。
关于只是蒸馏的一个小技巧就算是在softmax函数的基础上对每一个输出的结果加上一个temperature这样会对最后最后的预测结果进行一个平滑的处理使得Student Net更好训练 基于知识蒸馏方法可以令更深的模型降低计算成本但是只能用于具有Softmax损失函数分类任务这阻碍应用但是另一个缺点是太严格性能比不上其他方法老师和学生可以是不同的网络结构比如BERT蒸馏到BiLSTM网络但是一般相似网络结构蒸馏的效果会更好。
权值共享 ALBert,十二层共用一套参数从而使得参数量降低到原来的1/12.这个方案对于模型压缩得作用很大但是对于推理加速则收效甚微因为共享权值并没有带来计算量得减少
Parameter Quantization参数量化 参数量化称之为参数压缩这种方法主要是对weigth在存储量上减少的一类方法 对于weight的精度可能不需要太高就可以获得一个比较好的效果比如从64-32 其实就是减少减少数据的存储位数 权重聚类将神经网络所有的weight按照值得大小进行划分数值差不多的聚集在一起然后对每一个类取一个值替换里面所有的权值相当于每一个堆只用一个值就可以存储这样存储得数据量大大减少 采用哈夫曼编码比较常见得东西使用比较少的bit描述不常见得东西使用比较多得bit描述但是平均起来存储得数据量大大减少。 量化和二进制化 网络量化通过减少表示每一个权重所需要的比特数目来压缩原始网络
Vanhoucke使用8比特参数量化可以在准确率损失极小的同时实现大幅加速Han S提出了一整套完整的深度网络的压缩流程首先修建不重要的连接重新训练稀疏连接的网络然后使用权重共享量化连接的权重再对量化之后的权重和码本进行霍夫曼编码以进一步降低压缩率修剪、量化、和霍夫曼编码
修建减少了需要编码的权重数量量化和霍夫曼编码减少了用于对每个权重编码的比特数。对于大部分元素为0的矩阵可以使用稀疏表示进一步降低空间冗余且这种压缩机制不会带来任何准确率
伪量化 保存模型每一层的时候使用低精度来保存每一个网络参数同时保存拉伸比例scale和对应的浮点数zeroPoint,然后在推理阶段使用如下公式来还原网络参数32bit 存储的时候使用低精度进行量化但是推理的时候还原为正常的高精度为量化只能实现模型压缩但是不能加速模型
Architecture DesignDepth Separable Convolution CNN减少参数量得结构化设计,深度可分离卷积 PPT 介绍这部分 逐层卷积 逐点卷积
对于CNN假设输入有两个channel,对应的filter也就是两个channel假设有四个filter,每一个filter都是3 *3 的,那么输出也有四个channel,卷积层一共包含3 * 3 * 2 * 4 72个参数 深度可分离卷积Depthwise Convolution
有几个channel 就有几个filter每一个filter只管一个channel每一个filter在一个channel上进行convolution 卷积操作 生成一个channelchannel和channel之间的关系没法体现出来
Depthwise Convolution首先经过第一次卷积运算DW完全是在二维平面内进行。卷积核的数量与上一层的通道数相同通道和卷积核一一对应。所以一个三通道的图像经过运算后生成了3个Feature map(如果有same padding则尺寸与输入层相同为5×5) PointWise Convolution 每一个filter扫描所有的channel 得到一个新的channel
Pointwise Convolution的运算与常规卷积运算非常相似它的卷积核的尺寸为 1×1×MM为上一层的通道数。所以这里的卷积运算会将上一步的map在深度方向上进行加权组合生成新的Feature map
对于深度可分离卷积DepthWise Separable Convolution 使用DepthWise Convolution和 PointWise Convlution 进行结合 用来提取特征feature map
相比常规的卷积操作它的参数数量和运算成本比较低
神经网络压缩的几种方法并不是互斥的可以先使用一个方法再接着使用剩余的一个或者几个方法直到满足压缩条件
分解卷积
使用两个串联得小卷积核来代替一个大的卷积核。inceptionV2中创造性的提出了两个3x3的卷积核代替一个5x5的卷积核在效果相同的情况下参数量仅为原先的3x3x2/5x5 18/25使用两个并联的非对称卷积核来代替一个正常卷积核inceptionV3中将一个7x7的卷积拆分成一个1x7和一个7x1的卷积卷积效果相同的情况下大大减少了参数量同时还提高了卷积的多样性