百科问答小站 logo
百科问答小站 font logo



神经网络中 warmup 策略为什么有效;有什么理论解释么? 第1页

  

user avatar   xiang-nong-hui-yu-ke-ji 网友的相关建议: 
      

这个问题目前还没有被充分证明,我们只能从直觉上和已有的一些论文[1,2,3]得到推测:

  • 有助于减缓模型在初始阶段对mini-batch的提前过拟合现象,保持分布的平稳
  • 有助于保持模型深层的稳定性

下面来看一下为什么warmup会有这样的效果。


首先,[1]告诉我们,当我们的mini-batch增大的时候,learning rate也可以成倍增长,即,mini-batch大小乘以k,lr也可以乘以k。这是为什么呢?比如现在模型已经train到第t步,权重为 ,我们有k个mini-batch,每个大小为n,记为 。下面我们来看,以学习率 训k次 和以学习率 一次训 时学习率的关系。

假设我们用的是SGD,那么训k次后我们可以得到:

如果我们一次训就可以得到:

显然,这两个是不一样的。但如果我们假设 ,那么令 就可以保证 。那么,在什么时候 可能不成立呢?[1]告诉我们有两种情况:

  • 在训练的开始阶段,模型权重迅速改变
  • mini-batch size较小,样本方差较大

第一种情况很好理解,可以认为,刚开始模型对数据的“分布”理解为零,或者是说“均匀分布”(当然这取决于你的初始化);在第一轮训练的时候,每个数据点对模型来说都是新的,模型会很快地进行数据分布修正,如果这时候学习率就很大,极有可能导致开始的时候就对该数据“过拟合”,后面要通过多轮训练才能拉回来,浪费时间。当训练了一段时间(比如两轮、三轮)后,模型已经对每个数据点看过几遍了,或者说对当前的batch而言有了一些正确的先验,较大的学习率就不那么容易会使模型学偏,所以可以适当调大学习率。这个过程就可以看做是warmup。那么为什么之后还要decay呢?当模型训到一定阶段后(比如十个epoch),模型的分布就已经比较固定了,或者说能学到的新东西就比较少了。如果还沿用较大的学习率,就会破坏这种稳定性,用我们通常的话说,就是已经接近loss的local optimal了,为了靠近这个point,我们就要慢慢来。

第二种情况其实和第一种情况是紧密联系的。在训练的过程中,如果有mini-batch内的数据分布方差特别大,这就会导致模型学习剧烈波动,使其学得的权重很不稳定,这在训练初期最为明显,最后期较为缓解(所以我们要对数据进行scale也是这个道理)。

这说明,在上面两种情况下,我们并不能单纯地成倍增长lr 。要么改变学习率增长方法,要么设法解决上面两个问题。

有趣的是,warmup在ResNet[4]中就已经提到了,原文说的是:

We further explore n = 18 that leads to a 110-layer ResNet. In this case, we find that the initial learning rate of 0.1 is slightly too large to start converging . So we use 0.01 to warm up the training until the training error is below 80% (about 400 iterations), and then go back to 0.1 and continue training.

在注释中说的是:

With an initial learning rate of 0.1, it starts converging (<90% error) after several epochs, but still reaches similar accuracy.

这两句话是说,如果一开始就用0.1,虽然最终会收敛,但之后acc还是不会提高(使用了pateaus schedule);如果用了warmup,在收敛后还能有所提高。也就是说,用warmup和不用warmup达到的收敛点,对之后模型能够达到的suboptimal有影响。这说明什么?这说明不用warmup收敛到的点比用warmup收敛到的点更差。这可以从侧面说明,一开始学偏了的权重后面拉都拉不回来……

同时,[2]中也提到:

The main obstacle for scaling up batch is the instability of training with high LR. Hoffer et al. (2017) tried to use less aggressive "square root scaling" of LR with special form of Batch Normalization ("Ghost Batch Normalization") to train Alexnet with B=8K, but still the accuracy (53.93%) was much worse than baseline 58%.

这说明一开始的高lr对深度模型的影响是很显著的。它的不稳定性(instability)也就是上面我们提到的两个点。

[3]通过一些实验告诉我们:

We show that learning rate warmup primarily limits weight changes in the deeper layers and that freezing them achieves similar outcomes as warmup.


从图二(b,c)可以看到,加了warmup增加了模型最后几层的相似性,这表明warmup可以避免FC层的不稳定的剧烈改变。从图一中可以看到,在有了warmup之后,模型能够学得更稳定。

综上所述,如果来总结一下现在大batch size和大learning rate下的学习率变化和规律的话,可以认为,学习率是呈现“上升——平稳——下降”的规律,这尤其在深层模型和具有多层MLP层的模型中比较显著。如果从模型学习的角度来说,学习率的这种变化对应了模型“平稳——探索——平稳”的学习阶段。

那么你也许会问,为什么早期的神经网络没有warmup?这就回到了之前我们说的两点,与它们对应,早期神经网络的环境是:

  • 网络不够大、不够深
  • 数据集普遍较小,batch size普遍较小

这两点和之前[1]中提到的两点是对应的。网络不够大不够深就意味着模型能够比较容易地把分布拉回来,数据集比较小意味着mini-batch之间的方差可能没有那么大。从而学习率不进行warmup可能不会出现很严重的学习问题。


更新:最新的研究可以看“On Layer Normalization in the Transformer Architecture”这篇文章

之前写过一篇介绍,参考:zhuanlan.zhihu.com/p/84

在这里就不具体展开了。


[1] Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour

[2] LARGE BATCH TRAINING OF CONVOLUTIONAL NETWORKS

[3] A CLOSER LOOK AT DEEP LEARNING HEURISTICS: LEARNING RATE RESTARTS, WARMUP AND DISTILLATION

[4] Deep Residual Learning for Image Recognition

[5] On Layer Normalization in the Transformer Architecture




  

相关话题

  为什么现在不看好 CV 方向了呢? 
  如何评价微软机器翻译在 WMT2017 中英翻译达到「人类水平」? 
  请问人工神经网络中的activation function的作用具体是什么?为什么ReLu要好过于tanh和sigmoid function? 
  刚进算法团队,大牛们讨论高深的cv术语和算法,如何才能听懂? 
  深度学习中,模型大了好还是小了好呢? 
  什么是无监督学习? 
  pytorch ddp训练中一个node fail,导致整个训练失败,有可能解决吗? 
  如何可以通过自学来深入学习机器学习? 
  实体提取任务中使用BERT-CRF时,CRF根据数据统计可以得到转移概率,为啥还要训练呢? 
  新手如何入门pytorch? 

前一个讨论
你希望死后别人在你的葬礼上说什么?
下一个讨论
anchor-free存在什么缺点?





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利