之前在做基于深度神经网络的自动调制识别,然而设计的网络模型参数大,这阻碍了将模型部署到边缘设备,实现调制识别的真正落地。由此是否能够将网络模型进行优化,缩小其存储呢?博主接下来的一段时间要调研一下这个问题。
先是看了一篇综述,希望对现有或以往的模型优化有个大概了解。
[1]赖叶静,郝珊锋,黄定江.深度神经网络模型压缩方法与进展[J].华东师范大学学报(自然科学版),2020(05):68-82.
背景:
DNN的高内存消耗与高计算量限制了其在有限资源的硬件平台上的部署,也不能满足实时处理需求,不适用于移动设备,因而可以通过模型压缩来降低内存成本和加速运算。
四种方法:网络剪枝,量化,知识蒸馏,紧凑神经网络设计。
(1)网络剪枝:主要通过设计一个标准去判断参数的重要程度, 再根据重要性去除冗余参数.
(2)量化:减少表示每个权值和激活值所需的比特数, 如二值化 (1-bit)、int8 量化 (8-bit) 等.
(3)知识蒸馏:主要利用大型网络的知识, 并将其知识转化到紧凑小型的学生模型中.
(4)紧凑神经网络:通过设计一个特殊结构的卷积核或紧凑卷积的计算单元, 来降低模型的存储和计算复杂度 。
接下来详细介绍了每种方法:
基本思想:去除网络荣誉参数,减小模型体积
方法:四种剪枝粒度:层,特征图/滤波器,核,权重。前三种属于结构化剪枝,第四种是非结构化剪枝。
早期的非结构化剪枝:
(1)使用损失函数相对于权重的Hessian矩阵度量网络权重的重要性。
(2)基于交替方向乘子法的权重剪枝系统:首先将深度神经网络的权值剪枝问题转化为具有指定稀疏性要求的组合约束的非凸优化问题; 然后利用 ADMM 将非凸优化问题分解为两个迭代求解的子问题, 一个用随机梯度下降法求解, 另一个用解析法求解 。
上述缺点:首先将深度神经网络的权值剪枝问题转化为具有指定稀疏性要求的组合约束的非凸优化问题; 然后利用 ADMM 将非凸优化问题分解为两个迭代求解的子问题, 一个用随机梯度下降法求解, 另一个用解析法求解 。
后来提出一种粗粒度结构中的细粒度剪枝模式, 包含模式化剪枝和连通性剪枝. 模式化剪枝可以获得 filter 不同的稀疏性, 连通性剪枝进一步对filter 做核剪枝, 获得filter 之间的稀疏性. 实现高压缩和较高的推理速度。
早期的结构化剪枝:
(1)学习卷积网络不同层 filter 的全局排序
(2)使用一阶和二阶泰勒展开式来近似 filter 的贡献, 并逐层去除贡献低的 filter,
(3)ThiNet 框架, filter 是否被剪去取决于下一层, 而不是当前层; 但忽略了信道的鉴别能力
(4)基于3提出鉴别力感知通道修剪策略,将信道剪枝问题作为稀疏性优化问题, 同时考虑重构误差和信道鉴别能力
结构化剪枝中如何评价filter的重要性:
(1)范数,要求范数方差大,最小范数接近0.这种要求很难
(2)几何中值:判断两个filetr的相似性,靠近该中心点的 filter 可以用远离该中心点的 filter 来近似表示, 即可以剪去接近几何中值的filter
(3) 秩:高秩特征图含更多信息,删除低秩特征图的filter
一点总结:剪枝就是去除冗余权重,被剪枝后的网络结构是原网络的一个子结构,因而,可看作神经网络搜索NAS的一个特例。
基本思想:减少权值的比特数,有利于面向神经网络芯片硬件的加速。
方法:
(1)权值共享
传统标量量化:K-menas聚类算法、使用散列函数进行量化
向量量化:基于乘积量化的比特下降,注重激活值的重要性
(2)低比特
二值化,将繁重的矩阵乘法替换为轻量级的异或运算和位计数运算
但权重值和激活值限制在两个值,会大大降低模型的多样性。
提出一种 信息保留网络IR-Net,保留前向激活和后向梯度的信息。首先通过均衡和标准化正向传播的权重; 同时最小化参数的量化误差和最大化量化参数的信息熵 。为了保留反向传播中损失函数的信息, IR-Net 通过逐步逼近反向传播中的符号函数来最小化梯度的信息损失.
除此之外的有,两步量化法:使用稀疏法对激活值进行量化,假设由此获得的编码是最优的,再将最优化问题表述为具有低位约束的非线性最小二乘回归问题,并用迭代求解量化权
还有利用动态范围内的局部相关性来最小化量化对整体精度的影响的细粒度三元化方法
一点总结:低比特量化的精度下降很多,这是由于量化引入噪声使得梯度下降难以收敛。量化一般与其他方法结合使用。
基本思想:将大型教师模型的软知识提炼到较小的学生模型中 。
方法:教师网络的软输出被用作一个标签来训练和压缩学生网络。目标是将原网络中具有代表性的知识转移到另一个更小的神经网络中 。通常是以最小化概率输出之间的 KL(Kullback-Leibler) 散度为目标建立教师网络和学生网络 。
但这一 KL 目标忽略了教师网络的重要知识结构. 由此提出了对比学习方法
学生模型超越老师模型,学习教师网络以外的知识:重生神经网络,不是压缩模型,而是将知识从教师模型转移到具有相同能力的学生模型
除此之外,还有残差知识蒸馏,引进助理,学习教师和学生之间的残差。
一点总结:知识蒸馏多用于具有softmax损失的分类任务,如目标检测,语义分割(首先是自编码器压缩知识,然后提出亲和蒸馏模型,学习教师与学生的不匹配,从而建立长期依赖关系。)还可用于自然语言处理,半监督学习。
基本思想:针对卷积网络设计更小卷积核,覆盖更多信息,减少冗余,在不损失网络性能的情况下减少每秒浮点运算次数。
方法:滤波器,分组卷积,深度分离卷积,反卷积。
除此之外的一些网络压缩算法:
矩阵、张量分解,SVD,Tucker,CP进行低秩分解
低秩扩展,利用不同通道和滤波器之间的冗余进行加速
方法的融合:剪枝和量化,量化与知识蒸馏。面向边缘应用的压缩。
如何评价压缩和加速质量:
压缩率,加速率,浮点运算数
模型压缩方法用在分类、目标检测和语义分割任务上时, 根据数据集的不同会定义不同的评价准则
一般来说, 压缩后的方法与原模型的分类错误率相似, 但参数减少、加速率增加、浮点运算操作数降低
未来探索:
(1)高效评估方法和剪枝率的选择
如何定义更高效的方法来确定卷积核或其他参数的重要性
每一层的卷积参数分布是不同的,对每层的剪枝率的选择也是未来可探索的方向.
(2)设计新的网络结构:
模型量化后会改变数据的原始分布 ,如何针对量化设计特定的网络结构也是值得研究的方向.
(3)多场景压缩
目前是CNN,主要针对图像分类,
还有RNN,LSTM,强化学习,目标检测,GAN等
(4)端设备部署
分类任务的发展较大,但目标检测,语义分割依旧研究很少
如何在资源受限的边缘设备部署各种大型网络,使应用真正落地。
(5)自动机器学习AutoML
如自动化选择修剪率,根据参数重要性动态选择量化的比特数。