ReActNet: Towards Precise Binary Neural Network with Generalized Activation Functions

2020 Cornell University - arXiv

代码地址:https://github.com/liuzechun/ReActNet

0. 摘要翻译

本文中,作者提出一些方法在没有增加任何运算代价的同时来提升二值网络,使其逼近实值网络的准确度。

  • 作者首先构建了一个基准网络,通过修改和二值化一个带有无参数 shortcuts 的实值网络,绕过了所有中间卷积层包括下采样层。这个基准网络在准确性和效率之间得到了很好的权衡,在只需大约一半计算成本的情况下超过了大多数现有二值网络的表现。
  • 通过大量实验和分析,作者观察到二值网络对于激活分布的变化是敏感的。基于这个重要的观察,作者提出了扩展传统的 Sign 和 PReLU 函数,使其能够在接近零额外成本的情况下可以显式的学习对分布的重塑和平移。
  • 最后,作者采用分布损失来强制二值网络学习与是指网络相似的输出分布。

作者展示了,在融合了上述方法之后,提出的 ReActNet 相比所有 SotA 方法有了大幅提升。具体而言,它比 Real-to-Binary Net 和 MeliusNet29 分别在 top-1 上提升了 4.0% 和 3.6%。并且与对应的实值网络在 ImageNet 的 top-1 上的准确度差距缩小到 3.0% 以内。

1. INTRODUTION

作者极大程度的缩小了在 ImageNet 这样的大数据集上,二值网络和实值网络之间的性能差异。

作者使用 MobileNetV1 作为二值化的 backbone,作者认为这种紧凑的实值模型要比非紧凑实值模型更有应用价值。如图2(a)使用两个block 连接的方法来解决下采样层通道数不匹配的问题。这种 baseline 的设计,不仅避免了 shortcuts 中的实值卷积(相比之前的 BNN 减少了近一半的计算需求),还在 ImageNet 上实现了 61.1% 的高 top-1 精度。

为了大幅提升精度,作者调研了之前二值化或者量化工作没有研究过的工作:基于非线性函数设计的激活分布的重塑和平移。作者观察到总体激活值分布将会影响特征表示,并且该影响会由于激活的二值化被扩大。接近于 0 的小分布值偏移将导致二值特征映射的不同形态,将影响到最终的精度。ReAct-Sign(RSign) 和 ReAct-PReLU(RPReLU) 这两个激活函数自适应的学习分布重塑的参数,这种方式在几乎没有引入额外计算的情况下将 baseline 网络的精度提升了 7%。

作者还提出了一个分布 loss 来提升二值网络和实值网络之间的相似性,这提升了约 1% 的精度。融合上述方法,ReActNet 在 ImageNet 上 69.4% 的 top-1 准确度,仅需 87M OPs的操作数。超过了此前所有的 BNN。

OPs is a sum of binary OPs and floating-point OPs, i.e., OPs = BOPs/64 + FLOPs.

作者的贡献总结如下:

  • 通过修改 MobileNetV1 设计了一个二值网络的 baseline。超过了大多数 BNN 的效果,只需要其一半的计算量。
  • 提出了在激活分布上进行简单的通道重塑和平移。利用调整激活分布的方法学习更具有代表性的特征,从而减少二值卷积的计算量。
  • 作者进一步提出了一个在二值网络和实值网络输出之间的分布 loss 替代以往的 loss 函数,促进了二值网络模仿实值网络的分布。
  • 通过融合上述方法,第一在 ImageNet 上超过了 ResNet 级的精度(69.3%)。

从图1可以看出,本文方法相比其他方法具有更少的计算量和更好的准确性。

3. Revisit: 1-bit Convolution

浮点矩阵乘积可以由 XNOR 和 popconut 操作替代:

权重和激活的二值化函数如下:

权重二值方法可以看出是取自 XNOR-Net ,Wrl1n\frac{\|\mathcal{W}_r\|_{l1}}{n} 表示权重绝对值的均值,被用作缩放因子来最小化二值和实值权重之间的差异。下面作者会介绍,使用了 ReAct 操作,激活的尺度缩放因子将变得不必要。

4. Methodology

4.1 Baseline Network

以往的研究都是二值化 ResNet 结构,但是作者认为进一步压缩 MobileNetV1 这样更紧凑的网络,更具有逻辑性和实际意义。

作者受 Bi-Real Net 启发,引入了 shortcuts 来绕过每一个具有相同输入输出 channels 的 1-bit 卷积层。使用普通的 3x3 和 1x1 卷积替代深度 3x3 卷积和 1x1 点卷积。

在深度卷积块和点卷积块中,与普通卷积相比,主要区别在于卷积操作的方式和所涉及的通道数。

  1. 深度卷积块(Depth-wise Convolution Block):
    • 在深度卷积块中,卷积操作是逐通道(channel-wise)进行的,即对输入的每个通道应用一个卷积核。这意味着每个输入通道都有自己的卷积核,用于处理该通道的信息。
    • 通常,深度卷积块包含一个3×3的深度卷积(Depth-wise Convolution),其目标是对每个输入通道进行独立的卷积操作。
  2. 点卷积块(Point-wise Convolution Block):
    • 点卷积块主要包含一个1×1的卷积操作,通常称为点卷积或逐点卷积。这个卷积核是在通道维度上操作的,不涉及空间维度。
    • 1×1卷积的作用是在通道维度上进行线性组合,将不同通道的信息进行混合。这有助于增加网络的表达能力,同时减少计算成本。
  3. 普通卷积:
    • 普通卷积是在输入的所有空间位置和所有通道上应用卷积核的操作。每个输出通道都与输入的所有通道相关,并且在整个空间上进行操作。
    • 与深度卷积和点卷积不同,普通卷积在两个维度(空间和通道)上同时操作。

MobileNetV1中使用了深度卷积块(3×3深度卷积)和点卷积块(1×1点卷积)的组合,这种结构的设计可以在保持一定性能的同时减少计算成本。

作者通过保持所有卷积的输入输出的维度相同来简化网络结构,以避免增加计算成本。这样可以确保激活在传播时不会出现通道数不匹配从而不会引入额外的实值计算,提高了网络的效率。

如图2(a)所示,作者复制了输入通道,并且连接了两个相同的输入来解决通道数不同的问题,在 shortcut 中使用了均值池化来匹配空间下采样。该网络除了第一层输入卷积和最后一层全连接层外全部二值化,非常硬件友好。

4.2 ReActNet

“Output logits” 可以翻译为"输出 Logits"。在机器学习和深度学习领域,logits 通常是指模型的未经过 softmax 或其他激活函数的输出值。Logits 可以被看作是模型对各个类别的原始预测分数,这些分数将经过 softmax 函数转换为概率分布,用于最终的分类决策。

作者观察到,小的激活分布的变化会很大程度影响到 1-bit CNNs 的语义特征表示,这反过来又会影响最终性能。1-bit CNNs 限制了对合适的激活分布的学习,作者引入了带有可学习参数的泛化激活函数来提升 1-bit CNNs 的灵活性。

Distribution Matters in 1-bit CNNs

下图3(b)是原始输入二值激活后的分布,(a)是正迁移,©是负迁移。(不知道这里的正负是怎么理解的。)可以看出二值特征映射对于分布平移是敏感的。

Explicit Distribution Reshape and Shift via Generalized Activation Functions

作者提出显示的分布重塑和平移方法,称位 ReAct,将传统的 Sign 和 PReLU 函数分别称为 ReAct-Sign (RSign)和 ReAct-PReLU (RPReLU)函数。

Definition

RSign 的函数定义如下:

xirx_i^r 表示第 i 个通道的实值输入,αi\alpha_i 表示第 i 个通道上的可学习阈值。函数的形状如下图4(a)右侧子图所示。

RPReLU 的定义如下:

γi\gamma_iζi\zeta_i 是移动分布的可学习平移参数,βi\beta_i 是控制负值部分斜率的可学习系数。函数形状如图4(b)右侧子图所示。

如下图,γ\gamma 平移输入的分布,β\beta 缩放分布,ζ\zeta 平移输出的分布。

这种方式引入的额外参数有 4 倍通道的数量这么多,相比很大的权重矩阵这些参数量微不足道。而且计算开销接近典型的非线性层,相比密集型卷积操作是微不足道的。

Optimization

RSign 和 RPReLU 中的参数可以和网络中的其他参数一起被端到端的优化。

RSign 中的导数:

L\mathcal{L} 表示 loss 函数。Lh(xir)\frac{\partial \mathcal{L}}{\partial h(x_i^r)} 表示来自深层的梯度。xir\sum_{x_i^r} 求和应用在 i 通道的所有项上。 h(xir)αi\frac{\partial h\left(x_i^r\right)}{\partial \alpha_i} 可以计算为

h(xir)αi=1(6)\frac{\partial h\left(x_i^r\right)}{\partial \alpha_i}=-1 \tag{6}

RPReLU 中的梯度的计算公式如下:

其中 I\mathbf{I} 表示函数,如果满足 {} 中的条件,则 I{.}=1\mathbf{I}_{\{.\}} = 1 。否则 I{.}=0\mathbf{I}_{\{.\}} = 0

4.3 Distributional Loss

使用分布损失来提升二值网络与实值网络分布的相似性:

LDistribution\mathcal{L}_{Distribution} 的定义是实值网络 Rθ\mathcal{R_{\theta}} 和二值网络 Bθ\mathcal{B}_\theta 的 softmax 输出 pcp_c 之间的 KL 散度。下标 c 表示类别,n 表示 batch size。

先前的工作需要匹配每个中间块的输出,或者使用多步骤渐进式结构方法。本文的方法更简单,而且获得了很好的结果。

此外,本文的方法没有块约束,不要求二值网络和实值网络的结构相似,就能学习实值网络的分布。

5. Experiments

5.1 Experimental Settings

  • Datasets:ILSVRC12 ImageNet classification dataset

  • Training Stategy:沿用 Training Binary Neural Networks with Real-to-Binary Convolutions 一文中的两阶段训练。

    step1:用二值激活和实值权重从头训练;

    step2:用 step1 中训练的权重作为初始值,然后微调激活和权重均是二值的网络。

5.2 Comparison with State-of-the-art

如下表1所示,ReActNet-A 比左侧的 SotA 量化方法效果更好,且只需要其一半的 OPs。

相比 Real-to-Binary 方法中对于每个 block 的通道利用实值全连接层计算 re-scaling ,ReActNet-A 除了第一层和最后一层外全部使用 1-bit 卷积,这更加硬件友好。

为了与其他方法做比较,ReActNet-B 和 ReActNet-C 在下采样层将 1-bit 1x1 卷积替换为实值的 1x1 卷积,如下图6©。

ReActNet-B将实值卷积定义为具有4个组的组卷积,ReActNet-C使用全实值卷积。

ReActNet-B 和 ReActNet-C 的表现效果如下:

5.3 Ablation Study

下表显示了消融实验的结果。

下面这幅图中值得一提的是:仅使用 PReLU 会导致曲线剧烈震荡,这可能是 β\beta 触发的,由于 β\beta 改变了符号,导致后面的运算发生雪崩式的影响。这证实了作者一开始的猜想,1-bit CNNs 容易受到分布改变的影响。

5.4 Visualization

为了进一步分析,作者将得到的可学习系数和中间激活分布可视化。

如图8(a),使用传统的 PReLU 学到的斜率 β\beta 只有正值。而8©中使用 RPReLU 学到的斜率正负值都有,与实值网络学到的相似(图8(b))。

如图8©1~3行所示,学习到的分布平移系数也有大的绝对值(相比 1 和 -1 已经算大了),表面显示的分布平移对 1-bit CNNs 是重要的。

如下图9,相比只使用了 RSign 和 RPReLU 的 Baseline 网络,ReActNet 的中间激活分布更丰富、更微妙。而且通过从左往右数第二张子图可以看出,ReActNet 二值分布更均匀。这表明二值特征更好的应用了黑白像素。

6. Conclusions

作者一共提出了三点优化:

  1. 使用 MoblieNetV1 作为 backbone,并使用了 shortcuts;
  2. 提出了 RSign 和 RPReLU;
  3. 提出了一个分布 loss 让二值网络学习实值网络的分布。