模型调优(Tuning)(一)

正则化

什么是正则化

Regularization,中文翻译过来可以称为正则化,或者是规范化。什么是规则?闭卷考试中不能查书,这就是规则,一个限制。在这里,正则化就是说给损失函数加上一些限制,通过这种规则去规范它们在接下来的循环迭代中,要约束自己的行为。

为什么需要正则化

在这里插入图片描述
当我们向右移时,我们的模型试图从训练数据中很好地学习细节和噪声,这最终导致在看不见的数据上表现不佳。 也就是说,当模型向右移动时,模型的复杂度增加,使得训练误差减小,而测试误差没有减小。如下图所示。

在这里插入图片描述
正则化是一种对学习算法稍加修改以使模型具有更好的泛化能力的技术。这反过来也提高了模型在看不见的数据上的性能。

正则化如何帮助减少过度拟合

让我们考虑一个神经网络,它对训练数据进行了过度拟合,如下图所示。

在这里插入图片描述
如果你研究过机器学习中正则化的概念,你会有一个公平的想法,正则化惩罚系数。在深度学习中,它实际上惩罚节点的权重矩阵。假设我们的正则化系数非常高,以至于一些权重矩阵几乎等于零。

在这里插入图片描述
这将导致更简单的线性网络和训练数据的轻微欠拟合。如此大的正则化系数值并不是很有用。我们需要优化正则化系数的值,以获得如下图所示的良好拟合模型。

在这里插入图片描述

正则化可以避免算法过拟合,过拟合通常发生在算法学习的输入数据无法反应真实的分布且存在一些噪声的情况。过去数年,研究者提出和开发了多种适合机器学习算法的正则化方法,如数据增强、L2 正则化(权重衰减)、L1 正则化、Dropout、Drop Connect、随机池化和早停等。

除了泛化原因,奥卡姆剃刀原理和贝叶斯估计也都支持着正则化。根据奥卡姆剃刀原理,在所有可能选择的模型中,能很好解释已知数据,并且十分简单的模型才是最好的模型。而从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。

常见的正则化方法

L1 和 L2

L1 和 L2 正则化是最常用的正则化方法。L1 正则化向目标函数添加正则化项,以减少参数的绝对值总和;而 L2 正则化中,添加正则化项的目的在于减少参数平方的总和。根据之前的研究,L1 正则化中的很多参数向量是稀疏向量,因为很多模型导致参数趋近于 0,因此它常用于特征选择设置中。机器学习中最常用的正则化方法是对权重施加 L2 范数约束。

标准正则化代价函数如下: θ = a r g m i n θ 1 N ∑ i = 1 N ( L ( y ^ i , y ) + λ R ( w ) ) \theta= arg min_{\theta} \frac{1}{N}\sum_{i=1}^{N}(L(\hat y_{i},y)+\lambda R(w)) θ=argminθN1i=1N(L(y^i,y)+λR(w))其中正则化项 R(w) 是: R L 2 ( w ) = ∣ ∣ W ∣ ∣ 2 2 R_{L_{2}}(w)=||W||_{2}^2 RL2(w)=∣∣W22另一种惩罚权重的绝对值总和的方法是 L1 正则化: R L 1 ( w ) = ∣ ∣ W ∣ ∣ 1 R_{L_{1}}(w)=||W||_{1} RL1(w)=∣∣W1L1 正则化在零点不可微,因此权重以趋近于零的常数因子增长。很多神经网络在权重衰减公式中使用一阶步骤来解决非凸 L1 正则化问题。L1 范数的近似变体是: ∣ ∣ W ∣ ∣ 1 = ∑ k = 1 Q w k 2 + ϵ ||W||{1}=\sum_{k=1}^{Q}\sqrt{w_{k}^2+\epsilon} ∣∣W∣∣1=k=1Qwk2+ϵ 另一个正则化方法是混合 L1 和 L2 正则化,即弹性网络罚项。

整个最优化问题从贝叶斯观点来看是一种贝叶斯最大后验估计,其中正则化项对应后验估计中的先验信息,损失函数对应后验估计中的似然函数,两者的乘积即对应贝叶斯最大后验估计的形式

贝叶斯推断分析法

针对L1范数和L2范数还有结论:

  • L1范数相当于给模型参数 θ θ θ 设置一个参数为 1 α \frac 1 α α1 的零均值拉普拉斯先验分布

  • L2范数相当于给模型参数 θ θ θ 设置一个协方差 1 α \frac 1 α α1 的零均值高斯先验分布

L2范数相当于给模型参数θ设置一个零均值高斯先验分布。以线性模型为例,结论可以推广到任意模型,线性模型方程可以表示为: Y = θ T X + ϵ Y=\theta^TX+\epsilon Y=θTX+ϵ其中 ϵ \epsilon ϵ表示误差, ϵ ∼ N ( 0 , σ 2 ) \epsilon \sim N(0,\sigma^2) ϵN(0,σ2), θ i ∼ N ( 0 , τ 2 ) \theta_{i} \sim N(0,\tau^2) θiN(0,τ2),则有: p ( y i ∣ x i ; θ ) = 1 2 π σ 2 e x p ( − ( y i − θ T x i ) 2 2 σ 2 ) p(y_{i}|x_{i};\theta)=\frac{1}{\sqrt{2 \pi \sigma^2}}exp(-\frac{(y_{i}-\theta^Tx_{i})^2}{2\sigma^2}) p(yixi;θ)=2πσ2 1exp(2σ2(yiθTxi)2)计算最大后验估计: a r g m a x θ l n L ( θ ) = a r g m a x θ ( l n ∏ i = 1 n p ( y i ∣ x i ; θ ) + l n p ( θ ) ) = − 1 2 σ 2 ∑ i = 1 n ( y i − θ T x i ) 2 − 1 2 τ 2 ∑ j = 1 d θ j 2 + n l n σ 2 π − d l n τ 2 π arg max_{\theta}lnL(\theta)=argmax_{\theta}(ln \prod_{i=1}^np(y_{i}|x_{i};\theta)+lnp(\theta))\\ =-\frac{1}{2\sigma^2}\sum_{i=1}^n(y_{i}-\theta^Tx_{i})^2-\frac{1}{2\tau^2}\sum_{j=1}^d\theta_{j}^2+nln\sigma\sqrt{2\pi}-dln\tau \sqrt{2 \pi} argmaxθlnL(θ)=argmaxθ(lni=1np(yixi;θ)+lnp(θ))=2σ21i=1n(yiθTxi)22τ21j=1dθj2+nl2π dlnτ2π 最大化上式,去掉负号,统一参数可以转化为: a r g m i n θ l n L ( θ ) = ∑ i = 1 n ( y i − θ T x i ) 2 + λ ∑ j = 1 d θ j 2 arg min_{\theta}ln L(\theta)=\sum_{i=1}^n(y_{i}-\theta^Tx_{i})^2+\lambda \sum_{j=1}^d\theta_{j}^2 argminθlnL(θ)=i=1n(yiθTxi)2+λj=1dθj2上式正好是线性回归问题在L2范数的代价函数,故验证了结论。

L1范数相当于给模型参数 θ \theta θ设置一个拉普拉斯先验分布。以线性模型为例,结论可以推广到任意模型,同样假设 ϵ ∼ N ( 0 , σ 2 ) \epsilon \sim N(0,\sigma^2) ϵN(0,σ2), θ i ∼ L a p l a c e ( 0 , b ) \theta_{i} \sim Laplace(0,b) θiLaplace(0,b),则有: a r g m a x θ l n L ( θ ) = l n ∏ i = 1 n p ( y i ∣ x i ; θ ) + l n p ( θ ) = l n ∏ 1 2 π σ 2 e x p ( − ( y i − θ T x i ) 2 2 σ 2 ) + l n ∏ j = 1 d 1 2 b e x p ( − ∣ θ j ∣ b ) = 1 2 σ 2 ∑ i = 1 n ( y i − θ T x i ) 2 − 1 b ∑ i = 1 n ∣ θ j ∣ − n l n σ 2 π − d l n 2 b arg max_{\theta}ln L(\theta)=ln\prod_{i=1}^n p(y_{i}|x_{i};\theta)+lnp(\theta)\\ =ln\prod \frac{1}{\sqrt{2\pi \sigma^2}}exp(-\frac{(y_{i}-\theta^Tx_{i})^2}{2\sigma^2})+ln\prod_{j=1}^d \frac{1}{2b}exp(-\frac{|\theta_{j}|}{b})\\=\frac{1}{2\sigma^2}\sum_{i=1}^n (y_{i}-\theta^Tx_{i})^2-\frac{1}{b}\sum_{i=1}^n|\theta_{j}|-nln\sigma\sqrt{2\pi}-dln2b argmaxθlnL(θ)=lni=1np(yixi;θ)+lnp(θ)=ln2πσ2 1exp(2σ2(yiθTxi)2)+lnj=1d2b1exp(bθj)=2σ21i=1n(yiθTxi)2b1i=1nθjnl2π dln2b最大化上式,去掉负号和统一参数,就变成了最小化: a r g m i n θ l n L ( θ ) = ∑ i = 1 n ( y i − θ T x i ) + λ ∑ j = 1 d ∣ θ j ∣ arg min_{\theta} lnL(\theta)=\sum_{i=1}^n (y_i-\theta^T x_{i})+\lambda \sum_{j=1}^d|\theta_{j}| argminθlnL(θ)=i=1n(yiθTxi)+λj=1dθj如果误差符合0均值的高斯分布,那么最大似然估计法的结果就是最小二乘法,这也是为何误差定义经常使用 ∑ i = 1 n ( y i − θ T x i ) 2 \sum_{i=1}^n (y_{i}-\theta^Tx_{i})^2 i=1n(yiθTxi)2的原因,因为这个公式是基于概率推导出来的。

Dropout

Dropout指在训练神经网络过程中随机丢掉一部分神经元来减少神经网络复杂度,从而防止过拟合。Dropout实现方法很简单:在每次迭代训练中,以一定概率随机屏蔽每一层中若干神经元,用余下神经元所构成网络来继续训练。

在这里插入图片描述

左边是完整的神经网络,右边是应用了Dropout之后的网络结构。应用Dropout之后,会将标了×的神经元从网络中删除,让它们不向后面的层传递信号。在学习过程中,丢弃哪些神经元是随机决定,因此模型不会过度依赖某些神经元,能一定程度上抑制过拟合。

DropConnect

DropConnect也是在ICML2013上发表的另一种减少算法过拟合的正则化策略,是 Dropout 的一般化。在 Drop Connect 的过程中需要将网络架构权重的一个随机选择子集设置为零,取代了在 Dropout 中对每个层随机选择激活函数的子集设置为零的做法。由于每个单元接收来自过去层单元的随机子集的输入,Drop Connect 和 Dropout 都可以获得有限的泛化性能。Drop Connect 和 Dropout 相似的地方在于它涉及在模型中引入稀疏性,不同之处在于它引入的是权重的稀疏性而不是层的输出向量的稀疏性。 对于一个DropConnect层,输出可以写为: r = a ( ( M ∗ W ) v ) r=a((M*W)v) r=a((MW)v)其中 r r r 是一个层的输出, v v v 是一个层的输入, W W W 是权重参数, M M M 是编码连接信息的二进制矩阵,其中 M i j ∼ B e r n o u l l i ( p ) M_{ij}\thicksim Bernoulli(p) MijBernoulli(p)。 在训练期间,M中的每个元素都是独立的对样本进行。基本上为每个示例实例化不同的连接。另外,这些偏见在训练中也被掩盖了。

在这里插入图片描述
Dropout 与 DropConnect 的区别是:Dropout 是随机将隐含层节点的输出清0,针对的是输出。DropConnect 是将节点中的每个与其相连的输入权值以 1-p 的概率清0,针对的是输入

使用 DropConnect 时,需要对每个 example, 每个 echo 都随机 sample 一个 M 矩阵(元素值都是0或1, 俗称 mask 矩阵)。training 部分的算法流程如下:

在这里插入图片描述
DropConnect 只能用于全连接的网络层(和dropout一样),如果网络中用到了卷积,则用 patch卷积时的隐层节点是不使用 DropConnect 的,因此上面的流程里有一个 Extract feature步骤,该步骤就是网络前面那些非全连接层的传播过程,比如卷积+pooling。

在Dropout网络中进行 inference 时,是将所有的权重 W 都 scale 一个系数 p(作者证明这种近似在某些场合是有问题的)。而在对 DropConnect 进行推理时,采用的是对每个输入(每个隐含层节点连接有多个输入)的权重进行高斯分布的采样。该高斯分布的均值与方差当然与前面的概率值p有关,满足的高斯分布为: u ∼ N ( p W v , p ( 1 − p ) ( W ∗ W ) ( v ∗ v ) ) u\thicksim N(pWv,p(1-p)(W*W)(v*v)) uN(pWv,p(1p)(WW)(vv))推理过程如下:
在这里插入图片描述
由上面的过程可知,在进行inference时,需要对每个权重都进行sample,所以DropConnect速度会慢些。

根据作者的观点,Dropout和DropConnect都类似模型平均,Dropout是 2 ∣ m ∣ 2^{|m|} 2m个模型的平均,而DropConnect是 2 ∣ M ∣ 2^{|M|} 2M个模型的平均。(m是向量,M是矩阵,取模表示矩阵或向量中对应元素的个数),从这点上来说,DropConnect模型平均能力更强,因为 ∣ M ∣ > ∣ m ∣ |M|>|m| M>m

早停法

早停法可以限制模型最小化代价函数所需的训练迭代次数。早停法通常用于防止训练中过度表达的模型泛化性能差。如果迭代次数太少,算法容易欠拟合(方差较小,偏差较大),而迭代次数太多,算法容易过拟合(方差较大,偏差较小)。早停法通过确定迭代次数解决这个问题,不需要对特定值进行手动设置。

提前停止是一种交叉验证的策略,即把一部分训练集保留作为验证集当看到验证集上的性能变差时,就立即停止模型的训练
在这里插入图片描述
在上图中,我们在虚线处停止模型的训练,因为在此处之后模型会开始在训练数据上过拟合。

学习率

什么是学习率

学习率是训练神经网络的重要超参数之一,它代表在每一次迭代中梯度向损失函数最优解移动的步长,通常用 η 表示。它的大小决定网络学习速度的快慢。在网络训练过程中,模型通过样本数据给出预测值,计算代价函数并通过反向传播来调整参数。重复上述过程,使得模型参数逐步趋于最优解从而获得最优模型。在这个过程中,学习率负责控制每一步参数更新的步长。合适的学习率可以使代价函数以合适的速度收敛到最小值。

学习率对网络的影响

根据梯度更新公式: θ = θ − η ∂ ∂ θ J ( θ ) \theta = \theta - \eta\displaystyle\frac{\partial}{\partial \theta}J(\theta) θ=θηθJ(θ),可以看到,如图(a)所示,如果学习率 η η η 较大,那么参数的更新速度就会很快,可以加快网络的收敛速度,但如果学习率过大,可能会导致参数在最优解附近震荡,代价函数难以收敛,甚至可能会错过最优解,导致参数向错误的方向更新,代价函数不仅不收敛反而可能爆炸。如图(b)所示,如果学习率 η η η 较小,网络可能不会错过最优点,但是网络学习速度会变慢。同时,如果学习率过小,则很可能会陷入局部最优点。

在这里插入图片描述

因此,只有找到合适的学习率,才能保证代价函数以较快的速度逼近全局最优解。

学习率的设置

我们了解了只有合适的学习率才能保证网络稳定学习的同时,又以合理的高速收敛来减少训练时间。那么,如何设置学习率呢?

通常的,在训练网络的前期过程中,会选取一个相对较大的学习率以加快网络的收敛速度。而随着迭代优化的次数增多,逐步减小学习率,以保证最终收敛至全局最优解,而不是在其附近震荡或爆炸。下面将介绍几种常用的学习率衰减方法,包括:分段常数衰减、指数衰减、自然指数衰减、多项式衰减、间隔衰减、多间隔衰减、逆时间衰减、Lambda衰减、余弦衰减、诺姆衰减、loss自适应衰减、线性学习率热身等。

1、分段常数衰减(Piecewise Decay)

在不同的学习阶段指定不同的学习率,在每段内学习率相同。该过程可以举例说明为:

boundaries = [100, 200]  # 指定学习率改变的边界点为100和200
values = [1.0, 0.5, 0.1] # 指定不同区间下的学习率大小

learning_rate = 1.0  if epoch < 100 
learning_rate = 0.5  if 100 <= epoch < 200
learning_rate = 0.1  if epoch >= 200

2、指数衰减(Exponential Decay)

学习率随训练轮数成指数衰减,每次将当前学习率乘以给定的衰减率得到下一个学习率。指数衰减的公式可表示为: n e w _ l e a r n i n g _ r a t e = l a s t _ l e a r n i n g _ r a t e ∗ g a m m a new\_learning\_rate = last\_learning\_rate * gamma new_learning_rate=last_learning_rategamma 其中, g a m m a gamma gamma 为衰减率。

3、自然指数衰减 (Natural Exponential Decay)

每次将当前学习率乘以给定的衰减率的自然指数得到下一个学习率。其公式表达为: n e w _ l e a r n i n g _ r a t e = l e a r n i n g _ r a t e ∗ e − g a m m a ∗ e p o c h new\_learning\_rate = learning\_rate * e^{-gamma*epoch} new_learning_rate=learning_rateegammaepoch 其中, l e a r n i n g _ r a t e learning\_rate learning_rate 为初始学习率, g a m m a gamma gamma 为衰减率, e p o c h epoch epoch 为训练轮数。

4、多项式衰减(Polynomial Decay)

通过多项式衰减函数,学习率从初始值逐渐衰减至最低学习率。其中,参数 c y c l e cycle cycle 代表学习率下降后是否重新上升。若 c y c l e = T r u e cycle=True cycle=True,则学习率衰减至最低后会重新上升到一定值,再降低至最低学习率并进行循环。若 c y c l e = F a l s e cycle=False cycle=False,则学习率从初始值单调递减至最低值。

c y c l e = T r u e cycle=True cycle=True,其计算公式为: d e c a y _ s t e p s = d e c a y _ s t e p s ∗ m a t h . c e i l ( e p o c h d e c a y _ s t e p s ) n e w _ l e a r n i n g _ r a t e = ( l e a r n i n g _ r a t e − e n d _ l r ) ∗ ( 1 − e p o c h d e c a y _ s t e p s ) p o w e r + e n d _ l r \begin{aligned} decay\_steps &= decay\_steps * math.ceil(\frac{epoch}{decay\_steps}) \\ new\_learning\_rate &= (learning\_rate - end\_lr) * (1 - \frac{epoch}{decay\_steps})^{power} + end\_lr \end{aligned} decay_stepsnew_learning_rate=decay_stepsmath.ceil(decay_stepsepoch)=(learning_rateend_lr)(1decay_stepsepoch)power+end_lr c y c l e = F a l s e cycle=False cycle=False,其计算公式为: e p o c h = m i n ( e p o c h , d e c a y _ s t e p s ) n e w _ l e a r n i n g _ r a t e = ( l e a r n i n g _ r a t e − e n d _ l r ) ∗ ( 1 − e p o c h d e c a y _ s t e p s ) p o w e r + e n d _ l r \begin{aligned} epoch &= min(epoch, decay\_steps) \\ new\_learning\_rate &= (learning\_rate - end\_lr) * (1 - \frac{epoch}{decay\_steps})^{power} + end\_lr \end{aligned} epochnew_learning_rate=min(epoch,decay_steps)=(learning_rateend_lr)(1decay_stepsepoch)power+end_lr 其中, l e a r n i n g _ r a t e learning\_rate learning_rate 为初始学习率, d e c a y _ s t e p decay\_step decay_step 为进行衰减的步长, e n d _ l r end\_lr end_lr 为最低学习率, p o w e r power power 为多项式的幂。

5、间隔衰减 (Step Decay)

学习率按照指定的轮数间隔进行衰减,该过程可举例说明为:

learning_rate = 0.5 # 学习率初始值
step_size = 30      # 每训练30个epoch进行一次衰减
gamma = 0.1         # 衰减率

learning_rate = 0.5    if epoch < 30 
learning_rate = 0.05   if 30 <= epoch < 60
learning_rate = 0.005  if 60 <= epoch < 90
...

6、多间隔衰减(Multi Step Decay)

学习率按特定间隔进行衰减,与间隔衰减的区别在于:间隔衰减的epoch间隔是单一且固定的,而多间隔衰减中的epoch间隔是预先指定的多间隔。该过程可举例说明为:

learning_rate = 0.5    # 学习率初始值
milestones = [30, 50]  # 指定轮数间隔
gamma = 0.1            # 衰减率

learning_rate = 0.5    if epoch < 30
learning_rate = 0.05   if 30 <= epoch < 50
learning_rate = 0.005  if 50 <= epoch
...

7、逆时间衰减(Inverse Time Decay)

学习率大小与当前衰减次数成反比。其计算公式如下: n e w _ l e a r n i n g _ r a t e = l e a r n i n g _ r a t e 1 + g a m m a ∗ e p o c h new\_learning\_rate = \frac{learning\_rate}{1 + gamma * epoch} new_learning_rate=1+gammaepochlearning_rate 其中, l e a r n i n g _ r a t e learning\_rate learning_rate 为初始学习率, g a m m a gamma gamma 为衰减率, e p o c h epoch epoch 为训练轮数。

8、Lambda衰减(Lambda Decay)

使用lambda函数来设置学习率,其中lambda函数通过epoch计算出一个因子,使用该因子乘以初始学习率。该衰减过程可参考如下例子:

learning_rate = 0.5                      # 学习率初始值
lr_lambda = lambda epoch: 0.95 ** epoch  # 定义lambda函数

learning_rate = 0.5                      # 当epoch = 0时,0.5 * 0.95 ** 0 = 0.5
learning_rate = 0.475                    # 当epoch = 1时,0.5 * 0.95 ** 1 = 0.475
learning_rate = 0.45125                  # 当epoch = 2时,0.5 * 0.95 ** 2 = 0.45125
...

9、余弦衰减(Cosine Annealing Decay)

使用 cosine annealing 的策略来动态调整学习率,学习率随step数变化成余弦函数周期变化。该方法为论文 SGDR:Stochastic Gradient Descent with Warm Restarts 中cosine annealing动态学习率。学习率调整公式为: η t = η m i n + 1 2 ( η m a x − η m i n ) ( 1 + c o s ( T c u r T m a x π ) ) , T c u r ≠ ( 2 k + 1 ) T m a x η t + 1 = η t + 1 2 ( η m a x − η m i n ) ( 1 − c o s ( 1 T m a x π ) ) , T c u r = ( 2 k + 1 ) T m a x \begin{aligned} \eta_t = \eta_{min} + \frac{1}{2}(\eta_{max} - \eta_{min})(1 + cos(\frac{T_{cur}}{T_{max}}\pi)), \quad T_{cur} \neq (2k+1)T_{max} \\ \eta_{t+1} = \eta_{t} + \frac{1}{2}(\eta_{max} - \eta_{min})(1 - cos(\frac{1}{T_{max}}\pi)), \quad T_{cur} = (2k + 1)T_{max} \end{aligned} ηt=ηmin+21(ηmaxηmin)(1+cos(TmaxTcurπ)),Tcur=(2k+1)Tmaxηt+1=ηt+21(ηmaxηmin)(1cos(Tmax1π)),Tcur=(2k+1)Tmax 其中, η m a x \eta_{max} ηmax的初始值为学习率的初始值, T c u r T_{cur} Tcur是SGDR训练过程中的当前训练轮数。

10、诺姆衰减(Noam Decay)

诺姆衰减的计算方式如下: n e w l e a r n i n g r a t e = l e a r n i n g r a t e ∗ d m o d e − 0.5 m i n ( e p o c h − 0.5 , e p o c h w a r m u p _ s t e p s − 1.5 ) new_learning_rate = learning_rate * d_{mode}^{-0.5}min(epoch^{-0.5}, epochwarmup\_steps^{-1.5}) newlearningrate=learningratedmode0.5min(epoch0.5,epochwarmup_steps1.5) 其中, d m o d e l d_{model} dmodel 代表模型的输入、输出向量特征维度, w a r m u p _ s t e p s warmup\_steps warmup_steps 为预热步数, l e a r n i n g _ r a t e learning\_rate learning_rate 为初始学习率。更多细节请参考 Attention Is All You Need

11、Loss自适应衰减(Reduce On Plateau)

当loss停止下降时,降低学习率。其思想是:一旦模型表现不再提升,将学习率降低 2-10 倍对模型的训练往往有益。此外,每降低一次学习率后,将会进入一个冷静期。在冷静期内不会监控loss变化也不会进行衰减。当冷静期结束后,会继续监控loss的上升或下降。

12、线性学习率热身(Linear Warm Up)

线性学习率热身是一种学习率优化策略,在正常调整学习率前,先逐步增大学习率。当训练步数小于热身步数(warmup_steps)时,学习率 l r lr lr 按如下方式更新: l r = s t a r t _ l r + ( e n d _ l r − s t a r t _ l r ) ∗ e p o c h w a r m u p _ s t e p s lr = start\_lr + (end\_lr - start\_lr) * \frac{epoch}{warmup\_steps} lr=start_lr+(end_lrstart_lr)warmup_stepsepoch 当训练步数大于等于热身步数(warmup_steps)时,学习率 l r lr lr 为:

l r = l e a r n i n g _ r a t e lr = learning\_rate lr=learning_rate 其中, l r lr lr 为热身之后的学习率, s t a r t _ l r start\_lr start_lr 为学习率初始值, e n d _ l r end\_lr end_lr 为最终学习率, e p o c h epoch epoch 为训练轮数。

猜你喜欢

转载自blog.csdn.net/weixin_49346755/article/details/127357520