我在一些论文中发现了“训练热身步骤”一词。这个词到底是什么意思?它与“学习率”有关吗?如果是这样,它如何影响它?
在深度学习的背景下,什么是训练热身步骤
正如其他答案已经说明的那样:预热步骤只是在训练开始之前/开始时以低学习率进行的一些更新。在此预热之后,您使用常规学习率(计划)来训练您的模型以使其收敛。
这有助于您的网络直观地慢慢适应数据的想法是有道理的。然而,理论上,预热步骤的主要原因是允许自适应优化器(例如 Adam、RMSProp、...)计算正确的梯度统计数据。因此,在使用普通 SGD 进行训练时,热身期几乎没有意义。
例如,RMSProp 计算平方梯度的移动平均值,以获得每个参数的梯度方差的估计。对于第一次更新,估计的方差只是第一批梯度平方和的平方根。因为,一般来说,这不是一个好的估计,您的第一次更新可能会将您的网络推向错误的方向。为了避免这个问题,你给优化器几个步骤来估计方差,同时做尽可能少的改变(低学习率),只有当估计合理时,你才使用实际的(高)学习率。
添加在
正如迈克尔指出的那样,我的回答可能表明以零学习率运行一个时期应该可以完成这项工作。但是,有几个原因可能无法正常工作:
- 一个时代
lr=0
最终只是一个迷失的时代。如果你正在遍历数据,你也可以有一个非常小的学习率来至少做一些事情。 - 在第一个“无用”时期之后,您将获得准确的统计数据。但是,如果您直接以高学习率加入,您的网络(以及梯度)可能会发生很大变化。因此,您希望慢慢提高学习率,以便统计数据有机会随着更新而移动。
免责声明:这些论点是直觉/推测,而不是简单的事实。如果这在实践中有效,请随时告诉我!
这通常意味着您在一定数量的训练步骤(热身步骤)中使用非常低的学习率。在你的热身步骤之后,你使用你的“常规”学习率或学习率调度程序。您还可以在热身步骤的数量上逐渐增加学习率。
据我所知,这有利于慢慢开始调整网络中的注意力机制之类的东西。
如果您的数据集高度分化,您可能会遭受一种“早期过度拟合”的困扰。如果您的打乱数据恰好包含一组相关的、特征强烈的观察结果,那么您的模型的初始训练可能会严重偏向这些特征——或者更糟的是,偏向与该主题完全不相关的附带特征。
热身是一种减少早期训练示例的首要效应的方法。没有它,您可能需要运行一些额外的 epoch 才能获得所需的收敛性,因为该模型不会训练那些早期的迷信。
许多模型将此作为命令行选项提供。学习率在热身期间线性增加。如果目标学习率为p,预热期为n,那么第一批迭代使用1p/n作为它的学习率;第二个使用 2 p/n,依此类推:迭代 i 使用 i*p/n,直到我们在迭代 n 处达到标称速率。
这意味着第一次迭代仅获得 1/n 的首要效应。这在平衡这种影响方面做得很合理。
请注意,斜坡上升通常是一个时期的数量级 - 但对于特别偏斜的数据偶尔会更长,或者对于更均匀的分布更短。您可能需要进行调整,具体取决于将改组算法应用于训练集时批次的功能极端程度。
预热步骤只是大多数学习算法中的一个参数,用于降低学习率,以减少模型偏离学习对突然暴露新数据集的影响。
例如:- 如果您在 10,000 次迭代中将预热步骤设置为 500,则对于前 500 次迭代,模型将以比您在模型中指定的速率最小的学习率学习语料库。从第 501 次迭代模型将使用给定的学习率。