Page 485 - 《软件学报》2025年第10期
P. 485

4882                                                      软件学报  2025  年第  36  卷第  10  期


                 络. 结构化剪枝方法     [8,24,25] 针对卷积核或整个层进行剪枝, 因此剪枝后的网络可以很容易地应用到实际场景. 例如,
                 Liu  等人  [26] 利用尺度因子上的  L 1 正则化来选择通道. He 等人    [27] 利用基于几何中值的准则来剔除不重要的卷积核.
                 在本文中, 我们借鉴网络剪枝的思想来精简加宽后的二值神经网络, 以实现更低的内存和计算成本.
                    二值神经网络的结构和全精度网络有所不同, 因此针对二值网络设计更优的结构是一个重要方向. UBNAS                                [28]
                 提出减少梯度误差并加速二值网络结构搜索的策略, 同时还探索了新的二值搜索空间. BATS                           [29] 提出二值导向搜索
                 空间和加速搜索过程的方法. 不过通过搜索获取二值网络结构的搜索过程需要大量的计算资源, 这在现实应用中
                 不够实用.
                  1.3   知识蒸馏
                    知识蒸馏通过将大模型         (教师模型) 提供的知识迁移到小模型来提高小模型               (学生模型) 的性能. Hinton 等人   [12]
                 最早提出了知识蒸馏方法, 将较大模型的知识通过                KL  散度损失函数来指导小型神经网络. 从那时起, 知识蒸馏开
                 始被广泛采用, 并涌现出许多新方法. 例如, Romero           等人  [30] 提出了  FitNet, 它提取了中间层的特征图以及最终输
                 出, 以指导学生网络学习. 之后, Zagoruyko      等人  [31] 基于注意力图定义了注意力转移方法, 以提高学生网络的性能.
                 在本文中, 我们将剪枝、蒸馏与量化网络相结合. 使用网络剪枝方法来找到有效的量化网络. 然后, 我们使用知识
                 蒸馏来提高紧致量化网络的精度.

                  2   基础知识

                    本文所提方法主要进行神经网络二值量化, 下面就量化基本知识予以介绍.
                  2.1   模型量化
                    二值神经网络作为一种极度极致的量化方式, 将神经网络内部的权值和激活值均量化至单比特的数值范畴,
                 由此促使神经网络的计算转化为逻辑运算形态, 大幅度削减了存储量, 并显著增强了计算效率. 这里我们以神经网
                 络中的一个卷积层为例, 对权重和激活值均进行二值量化. 在不失一般性的前提下, 我们假设                            W  为实数权重, A  为
                 实数激活值, 原始全精度卷积的计算为            W ∗ A. 除了二值化权值用      B W  表示外,  Q W  为量化后的权值, 量化后的激活
                                             Q W ∗ Q A . 对于权值二值化, 采用  XNOR-Net  [20] 中常用的二值方法, 量化过程为
                 值用   Q A  表示, 量化后卷积的计算为
                 B W = Sign(W) 其中   Sign(·) 是符号函数, 反量化过程为  W ≈ αB W  其中  α = ∥W∥ 1  是权重的绝对值均值. 该实现使用直
                 通估计器   (STE) [32] 反向传播梯度.
                    对于更高比特      (n-bit,  n > 1) 的量化, 权重量化的过程包含  3  个步骤.
                              tanh(W)
                    1)  W =             +0.5, 权重被映射到   0  至  1  之间.
                          2·max(|tanh(W)|)
                                                                       {               }
                          round(W · scale)                                 1    2
                                                  n
                    2)  W =           , 其中   scale = 2 −1, 量化后的值取自范围    0,    ,    ,...,1 ; 在该步骤中, 我们也
                                                                               n
                              scale                                      2 −1 2 −1
                                                                          n
                 使用  STE  进行梯度反向传播.
                    3)  Q W = 2·W −1, 量化值被映射到−1  至  1  之间.
                                                                                 round(X · scale)
                    对于激活值     X  的  n-bit 量化, 我们首先将  X  中的值截断到  0  至  1  之间, 然后使用             来获得量化的
                                                                                     scale
                       scale = 2 −1. 这里反向传播时也使用了      STE  算法.
                              n
                 值, 其中
                    量化神经网络中典型的模块           (block) 结构如后文图   1  所示. 一般情况下, 第    1  层和最后一层不进行量化处理,
                 因为如果对输入图像或输出进行量化处理, 会造成过多的信息损失. 在训练过程中, 分别对批归一化层后的特征和
                 卷积核权重进行量化. 然后它们被输入到卷积层. 训练后只有二值权值会被保存. 在进行推理时, 只需要对特征进
                 行重新量化即可计算结果.
                  2.2   加宽和加深的优劣
                    为了验证加宽或加深二值神经网络的优劣性, 我们在                  CIFAR-10  上对不同宽度和深度的二值化网络进行了实
                 验. 我们选择全精度      ResNet-20  作为基线. 我们对二值化的     ResNet-20  进行  1、2、3、4、8  倍的加宽, 并选择二值
   480   481   482   483   484   485   486   487   488   489   490