Page 13 - 《软件学报》2020年第9期
P. 13

2634                                 Journal of Software  软件学报 Vol.31, No.9,  September 2020

         2    卷积神经网络的压缩算法

         2.1   基于规则的神经网络模型压缩
             除人工设计轻量化神经网络模型外,学者们也在探究如何将已有的网络进行压缩,从而实现在便携式设备
         上运行.根据神经网络在不同方面的冗余,分别使用网络的分支裁剪、减少网络权重占用的比特数、对卷积核
         进行低秩分解、知识蒸馏等方法,对已有的网络模型进行压缩,降低对空间和计算能力的需求,实现在便携设备
         上的实时运行.
             •   权重裁剪
             权重裁剪是指对网络结构中的权重进行删减,从而达到压缩网络的目的.权重裁剪基于一个假设:在网络中
         很多参数都是不需要的或者不重要的,通过裁剪的方法可以将这些参数移除.通过权重裁剪的方法能够带来两
         点好处:首先,参数量的减少,所需要的存储空间也会相应的减少;其次,由于参数的减少导致网络运行时计算量
         的减少,能够减少对计算能力的需求,同时增加运行速度.
             Li 等人提出了基于权重 L1 范数的逐层裁剪策略,该策略为:对每层滤波器的 L1 范数进行排序,然后删除范
         数最小的滤波器,再对裁剪后的网络进行重新训练以恢复精度                      [24] .LIU 等人提出了一种针对卷积神经网络中的
         批量归一化(batchnorm)层进行 L1 稀疏化的压缩算法,该算法通过迫使批量归一化层中一些 scale 参数接近于
         0,从而可以安全地删除这些节点而不会对网络的精度造成巨大的影响;并通过多次使用该策略,使得网络达到
         很高的压缩比     [25] .Hu 等人发现,卷积神经网络中有大量的神经元的输出结果接近于 0,于是提出一种 Apoz 的通
         道重要性衡量方法,以单个神经元通道的输出结果中值接近为 0 的占比来衡量该神经元的重要性                                 [26] . Tian 等人
         通过 LDA 方法来获取与分类最相关的权重,而裁减掉与分类相关度不大的权重,在人脸检测网络中得到了很高
         的压缩比    [27] .Molchanov 等人提出一种通过衡量裁剪前后权重误差的泰勒展开式来衡量通道重要性的策略,来
         逐步裁剪卷积神经网络         [28] .Luo 等人提出一种方法,通过最小化裁剪后通道数在下一层的误差的方法来去掉不
         重要的神经元     [29] ,得到了非常鲁棒的裁剪效果.He 等人为每个通道增加一个掩膜,然后利用稀疏优化策略来迭
         代优化掩膜和权重,从而最小化裁剪后的网络与原始网络之间的误差                         [30] .Wen 等人提出一种在滤波器级别、通
         道级别以及层级别通过组 Lasso 稀疏化进行网络裁剪的方法,可在不同层面上对卷积神经进行裁剪                               [31] . Yu 等人
         提出一种将权重的重要性从后往前逐层反传的方法,可以快速有效地得到整体网络的权重重要性                                   [32] .
             •   权重量化
             在权重量化层面,Gupta 发现:使用 16 位的定点数作为权重,足够在 MNIST 上训练一个神经网络                         [33] .此外,
         Dettmers 研究了 8 位定点量化,加快并行训练中深度网络的收敛速度                 [34] .Han 等人提出了结合权重剪枝、量化和
         霍夫编码的策略,可以得到非常高的压缩比,但是这种方法需要专门的运算策略来实现.
             Courbariaux 等人提出了二值权重网络(binary weight network,简称 BWN)     [35] ,即:对于网络的权重而言,只有
         1 或−1 两个值.BWN 采用了一种混合策略(binary connect):对于网络的中间层特征,保留其原始精度,只将网络权
         重进行二值化,将网络前向传播与反向传播时的乘法操作变为加法操作.在网络的训练过程中,二值化的权重应
         用于前向传播与反向传播的梯度计算;而在更新权重时,采用全精度的权重;当全精度的权重越过阈值时,其对
         应的二值化后的权重就会发生改变.在测试时,只保留和使用二值化之后的权重,每个权重只占用一个 bit 的空
         间,对于 32 位或者 64 位 bit 的浮点数,有 32~64 倍的压缩倍率;并且由于用累加代替了乘法运算,使得网络的运
         行效率也大幅提升.
             二值权重网络的成功表明,对权重进行量化是可行的.随后,Courbariaux 等人再次提出了二值神经网络
         (binary neural network,简称 BNN) [36] ,进一步增加了二值神经网络的量化程度,将需要的计算量压缩至极低的水
         平.二值神经网络与二值权重网络相比,不仅在权重上是二值化的,并且在每一层的激活值上也进行了二值
         化.BNN 将每一层的激活值和权重的 1 和−1 分别用 1 和 0 代替,原来用 32bit 存储的权重和激活值只需 1bit 就
         能存储.同时,由于激活值和权重都为 1 或−1,在计算的过程中产生的数值仍然是 1 或−1,将两个浮点数的乘法计
         算变成了 1bit 的位运算.从而从参数的占用空间和计算量两个方面减少了对承载设备能力的需求,使得模型能
   8   9   10   11   12   13   14   15   16   17   18