训练技巧拾遗:重参数化、标签平滑与 Dropout

这篇收一些零散但好用的训练技巧:重参数化、权重 EMA、Shake-Shake、标签平滑和 Dropout。

重参数化(Reparameterization)

重参数化指的是:训练时给网络加一些额外的层或路径来辅助优化(让训练更顺、或防过拟合),测试时再把这些部分融合回原有结构。这样额外开销只在训练时产生,推理时融合完和原始结构没有任何区别,却能白赚一点精度。(BN 层的参数在测试时也能融进前面的卷积层,属于同一类思路。)三个代表作是 ACNet、RepVGG 和 RepMLP。

ACNet 在训练时把一个卷积层拆成三条路径(额外加 1×31\times33×13\times1 卷积,以及每条路径各自的 BN):

ACNet 中的重参数化
ACNet:训练时把一个卷积拆成 3×3、1×3、3×1 三条带 BN 的路径。

训练时每条路径各有参数,正常反向传播即可;测试时再把三条路径融合回原本的 3×33\times3 卷积及其 BN——先把每条路径的 BN 融进它的卷积,再把三条路径的卷积参数加在一起,此时三条路径的前向传播就等价于一个卷积层。

ACNet 训练完成后的参数融合
ACNet 的融合:先融 BN 进卷积,再把三条路径的卷积相加成一个。

RepVGG 用重参数化把 VGG 式的简洁结构训练到很高的精度——训练时用残差连接,比原始 VGG 更好训,精度能超过同算量的 ResNet;而推理时不需要残差连接,因此能用上 VGG 这种简洁结构带来的高推理效率。

RepVGG 将三条支路融合进一个 3×3 卷积
RepVGG:训练时多支路 + 残差,推理时融合成单个 3×3 卷积。

RepMLP 则把结构进一步从 VGG 简化到 MLP。

再往深里想:ACNet 和 RepVGG 训练时把一条支路拆成多条,而这些支路上都只有线性变换(只有卷积和 BN、没有激活函数),所以能直接融合在一起。理论上,任意多条只含线性变换的支路都能融合成一条——只是性能不一定因此变好。对全是卷积的支路,只要卷积核都不超过 k×kk\times k,就都能融进一个 k×kk\times k 卷积。再推广,卷积可以用 img2col + 矩阵乘实现,于是所有支路上的任意线性变换,都能融合成一条支路上的一次矩阵乘加——因此重参数化在 Transformer 这类结构里也可能有不错的应用空间。

权重 EMA

权重 EMA(Exponential Moving Average)在训练过程中额外维护一份权重的指数滑动平均,测试时用这份平滑后的权重而非最新权重。它几乎不增加训练成本,却常常带来更稳、更好的泛化。

Shake-Shake

Shake-Shake 在训练时把一个分支随机拆成两部分来计算(每次前向都重新生成随机数 αi\alpha_i)。下图是它在残差连接上的应用:左为前向、中为反向、右为测试(此时 α=0.5\alpha=0.5)。可以看出 Shake-Shake 会带来不小的额外计算开销。

Shake-shake 在残差连接上的应用
Shake-Shake:前向/反向用不同随机权重,测试时取 α=0.5。

标签平滑(Label Smoothing)

标签平滑顾名思义就是把标签”抹平”一点,实验表明这能提高泛化能力。分类常用的交叉熵损失为:

H(p,q)=i=1Kqilog(pi)\mathcal{H}(p,q)=-\sum_{i=1}^{K}q_i\log(p_i)

普通的 one-hot 标签是:

qi={1,i=y0,otherwiseq_i=\begin{cases}1,& i=y\\ 0,& \text{otherwise}\end{cases}

标签平滑把它改成(其中 KK 是类别数,ϵ\epsilon 是一个较小的平滑系数):

qi={1ϵ,i=yϵ/(K1),otherwiseq_i=\begin{cases}1-\epsilon,& i=y\\ \epsilon/(K-1),& \text{otherwise}\end{cases}

Dropout

Dropout 是常用的防过拟合手段,做法很简单:训练时,对输入 dropout 层的每个元素,按概率 1p1-p 把它丢弃(置零)。

Dropout 的效果
Dropout:训练时按概率随机丢弃(置零)一部分元素。

测试时则保留所有元素,这样训练相当于把单个网络近似成多个子网络的集成(ensemble)。另外测试时 dropout 层会把输入从 ww 缩放为 pwpw,目的是让每个元素在训练和测试时经过 dropout 层的输出有相同的期望值。

训练与推理时 dropout 的不同
训练时丢弃、测试时全保留并按 p 缩放,以保持输出期望一致。

参考资料

  • Ding, Xiaohan, et al. ACNet: Strengthening the Kernel Skeletons for Powerful CNN via Asymmetric Convolution Blocks. ICCV, 2019.
  • Ding, Xiaohan, et al. RepVGG: Making VGG-style ConvNets Great Again. arXiv:2101.03697, 2021.
  • Ding, Xiaohan, et al. RepMLP: Re-parameterizing Convolutions into Fully-connected Layers. arXiv:2105.01883, 2021.
  • Gastaldi, Xavier. Shake-Shake Regularization. arXiv:1705.07485, 2017.
  • Szegedy, Christian, et al. Rethinking the Inception Architecture for Computer Vision. CVPR, 2016.
  • Srivastava, Nitish, et al. Dropout: A Simple Way to Prevent Neural Networks from Overfitting. JMLR, 2014.