A-卷积网络压缩方法总结

卷积网络的压缩方法

  • 一,低秩近似
  • 二,剪枝与稀疏约束
  • 三,参数量化
  • 四,二值化网络
  • 五,知识蒸馏
  • 六,浅层网络
我们知道,在一定程度上,网络越深 , 参数越多 , 模型越复杂,其最终效果越好 。神经网络的压缩算法是,旨在将一个庞大而复杂的预训练模型(pre-trained model)转化为一个精简的小模型 。按照压缩过程对网络结构的破坏程度 , 我们将模型压缩技术分为“前端压缩”和“后端压缩”两部分 。
  • 前端压缩,是指在不改变原网络结构的压缩技术 , 主要包括知识蒸馏、轻量级网络(紧凑的模型结构设计)以及滤波器(filter)层面的剪枝(结构化剪枝)等;
  • 后端压缩,是指包括低秩近似、未加限制的剪枝(非结构化剪枝/稀疏)、参数量化以及二值网络等 , 目标在于尽可能减少模型大小,会对原始网络结构造成极大程度的改造 。
总结:前端压缩几乎不改变原有网络结构(仅仅只是在原模型基础上减少了网络的层数或者滤波器个数),后端压缩对网络结构有不可逆的大幅度改变,造成原有深度学习库、甚至硬件设备不兼容改变之后的网络 。其维护成本很高 。
一,低秩近似简单理解就是 , 卷积神经网络的权重矩阵往往稠密且巨大 , 从而计算开销大,有一种办法是采用低秩近似的技术将该稠密矩阵由若干个小规模矩阵近似重构出来,这种方法归类为低秩近似算法 。
一般地,行阶梯型矩阵的秩等于其“台阶数”-非零行的行数 。
低秩近似算法能减小计算开销的原理如下:
给定权重矩阵 \(W\in \mathbb{R}^{m\times n}\) , 若能将其表示为若干个低秩矩阵的组合 , 即 \(W=\sum_{i=1}^{n}\alpha_{i}M_{i}\) , 其中 \(M_{i}\in \mathbb{R}^{m\times n}\) 为低秩矩阵,其秩为 \(r_{i}\) , 并满足 \(r_{i}\ll min(m,n)\) ,则其每一个低秩矩阵都可分解为小规模矩阵的乘积,\(M_{i}=G_{i}H_{i}^{T}\) ,其中 \(G_{i}\in \mathbb{R}^{m\times r_{i}}\),\(H_{i}\in \mathbb{R}^{m \times r_{i}}\) 。当 \(r_{i}\) 取值很小时,便能大幅降低总体的存储和计算开销 。
基于以上想法 , Sindhwani 等人提出使用结构化矩阵来进行低秩分解的算法,具体原理可自行参考论文 。另一种比较简便的方法是使用矩阵分解来降低权重矩阵的参数,如 Denton 等人提出使用奇异值分解(Singular Value Decomposition,简称 SVD)分解来重构全连接层的权重 。
1.1 , 总结低秩近似算法在中小型网络模型上,取得了很不错的效果,但其超参数量与网络层数呈线性变化趋势,随着网络层数的增加与模型复杂度的提升,其搜索空间会急剧增大,目前主要是学术界在研究,工业界应用不多 。
二,剪枝与稀疏约束给定一个预训练好的网络模型,常用的剪枝算法一般都遵从如下操作:
  1. 衡量神经元的重要程度
  2. 移除掉一部分不重要的神经元,这步比前 1 步更加简便,灵活性更高
  3. 对网络进行微调,剪枝操作不可避免地影响网络的精度,为防止对分类性能造成过大的破坏,需要对剪枝后的模型进行微调 。对于大规模行图像数据集(如ImageNet)而言,微调会占用大量的计算资源,因此对网络微调到什么程度,是需要斟酌的
  4. 返回第一步,循环进行下一轮剪枝
基于以上循环剪枝框架,不同学者提出了不同的方法,Han等人提出首先将低于某个阈值的权重连接全部剪除 , 之后对剪枝后的网络进行微调以完成参数更新的方法,这种方法的不足之处在于,剪枝后的网络是非结构化的,即被剪除的网络连接在分布上,没有任何连续性 , 这种稀疏的结构,导致CPU高速缓冲与内存频繁切换,从而限制了实际的加速效果 。
基于此方法,有学者尝试将剪枝的粒度提升到整个滤波器级别,即丢弃整个滤波器,但是如何衡量滤波器的重要程度是一个问题,其中一种策略是基于滤波器权重本身的统计量,如分别计算每个滤波器的 L1 或 L2 值,将相应数值大小作为衡量重要程度标准 。
利用稀疏约束来对网络进行剪枝也是一个研究方向,其思路是在网络的优化目标中加入权重的稀疏正则项,使得训练时网络的部分权重趋向于 0,而这些 0 值就是剪枝的对象 。
2.1,总结总体而言,剪枝是一项有效减小模型复杂度的通用压缩技术,其关键之处在于如何衡量个别权重对于整体模型的重要程度

推荐阅读