神经网络压缩(Neural Network Compression)

0. 前言

神经网络的压缩,既能够保证模型的精度不会显著性地受到损失,又能够大大减少模型的参数,除了直接设计更精细的模型外,目前主要分为近似、量化和剪枝三类方法。

主要参考:知乎:神经网络压缩综述

1. 更精细的模型

  • MobileNets
    借鉴factorized convolution的思想,将普通卷积操作分成两部分
  • ShuffleNet
    基于MobileNet的group思想,将卷积操作限制到特定的输入通道。

2. 近似/网络分解/张量分解

近似类方法是利用张量分解的思想,通过少量参数重构原始网络参数张量。

  • CP分解
  • SVD分解
  • Tucker分解

3. 权重共享和量化

权重共享顾名思义,量化方法是将网络参数用更少的比特数来表示,以达到减少网络存储开销的目的。

  • 权重共享: 结构化矩阵、哈希

  • 量化: 定点运算、二值化/三值化

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

剪枝会直接改变网络的结构,在降低网络模型复杂度的同时还能解决过度拟合问题,早期的修剪方法是通过权重衰减来实现剪枝,之后是基于损失函数去减少网络中的连接数。

  • 非结构化剪枝
    非结构化剪枝就是把单个权重/神经元剪掉,会导致连接不规整,需要稀疏表达,很不友好。

  • 核的稀疏化 - 结构化稀疏
    对权重的更新加以正则项进行限制,使其更加稀疏,使大部分的权值都为0。

    • Regularization(正则化)

      范数(norm)定义
      0-范数:向量中非零元素的个数。
      1-范数:为绝对值之和。
      2-范数:绝对值的平方和再开方,Euclid范数(欧几里得范数,常用计算向量长度),就是通常意义上的模。
      p-范数:元素绝对值的p次方和的1/p次幂

      参数约束
      L0范数和L1范数对非零参数进行惩罚,使更多非零参数等于零,实现稀疏。
      L2范数是指向量各元素的平方和然后求平方根,让L2范数的正则项||W||2最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0。

      在实际应用中,数据的维度中是存在噪音和冗余的,所以需要稀疏约束,稀疏约束最直观的形式是0-范数,不过0范式不连续且非凸,在求解过程中就变成了组合优化问题。不过1-范数也可以达到稀疏的效果,是0范数的最优凸近似,更重要的是1范式容易求解。

    • The Least Absolute Shrinkage and Selection Operator(Lasso) 稀疏约束
      LASSO是另一种缩减方法,将系数收缩在一定的区域内。LASSO的主要思想是构造一个一阶惩罚函数获得一个精炼的模型, 通过最终确定一些变量的系数为0进行特征筛选。

    • Group Lasso 分组最小角回归算法
      lasso方法推广到group上面,诞生了group lasso。将所有变量分组,然后在目标函数中惩罚每一组的L2范数,这样达到的效果就是可以将一整组的系数同时消成零,即抹掉一整组的变量,这种手法叫做Group Lasso 分组最小角回归算法。如果每个组的特征个数都是1,则group lasso就回归到原始的lasso。

  • 结构化剪枝
    减去第i层的filter,进而减去第i层产生的部分特征图和第i+1层的部分kernel。

5. 其他

除上述的方法外还有迁移学习、网络精馏、计算加速等方法。

6. …

受限于边缘设备的硬件,神经网络压缩是必然的研究趋势,可谓花样百出,各有千秋啊。

在神经网络的压缩方法中,结构化稀疏剪枝通过分析神经网络的权重分布,修改损失函数引导稀疏,在神经网络未得到更多理论支撑的情况下显得更有意义。

你可能感兴趣的:(学习笔记,神经网络,剪枝)