织梦模板修改网站颜色,福州在线,跳转中,微信运营公司学习率
1. 什么是学习率
学习率是训练神经网络的重要超参数之一#xff0c;它代表在每一次迭代中梯度向损失函数最优解移动的步长#xff0c;通常用 η \eta η 表示。它的大小决定网络学习速度的快慢。在网络训练过程中#xff0c;模型通过样本数据给出预测值#xff0…学习率
1. 什么是学习率
学习率是训练神经网络的重要超参数之一它代表在每一次迭代中梯度向损失函数最优解移动的步长通常用 η \eta η 表示。它的大小决定网络学习速度的快慢。在网络训练过程中模型通过样本数据给出预测值计算代价函数并通过反向传播来调整参数。重复上述过程使得模型参数逐步趋于最优解从而获得最优模型。在这个过程中学习率负责控制每一步参数更新的步长。合适的学习率可以使代价函数以合适的速度收敛到最小值。
2. 学习率对网络的影响
梯度更新公式 θ θ − η ∂ ∂ θ J ( θ ) \theta \theta - \eta\frac{\partial}{\partial \theta}J(\theta) θθ−η∂θ∂J(θ)
根据上述公式我们可以看到如果学习率 η \eta η 较大那么参数的更新速度就会很快可以加快网络的收敛速度但如果学习率过大可能会导致参数在最优解附近震荡代价函数难以收敛甚至可能会错过最优解导致参数向错误的方向更新代价函数不仅不收敛反而可能爆炸如图1a所示。
如果学习率 η \eta η 较小网络可能不会错过最优点但是网络学习速度会变慢。同时如果学习率过小则很可能会陷入局部最优点如图1b所示。
因此只有找到合适的学习率才能保证代价函数以较快的速度逼近全局最优解。 图1: 不同学习率下的梯度更新 3. 学习率的设置
我们了解了只有合适的学习率才能保证网络稳定学习的同时又以合理的高速收敛来减少训练时间。那么如何设置学习率呢
通常的在训练网络的前期过程中会选取一个相对较大的学习率以加快网络的收敛速度。而随着迭代优化的次数增多逐步减小学习率以保证最终收敛至全局最优解而不是在其附近震荡或爆炸。下面将介绍几种常用的学习率衰减方法包括分段常数衰减、指数衰减、自然指数衰减、多项式衰减、间隔衰减、多间隔衰减、逆时间衰减、Lambda衰减、余弦衰减、诺姆衰减、loss自适应衰减、线性学习率热身等。 分段常数衰减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 指数衰减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_ratelast_learning_rate∗gamma 其中 g a m m a gamma gamma 为衰减率。 自然指数衰减 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_ratelearning_rate∗e−gamma∗epoch 其中 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 为训练轮数。 多项式衰减Polynomial Decay 通过多项式衰减函数学习率从初始值逐渐衰减至最低学习率。其中参数 c y c l e cycle cycle 代表学习率下降后是否重新上升。若 c y c l e T r u e cycleTrue cycleTrue则学习率衰减至最低后会重新上升到一定值再降低至最低学习率并进行循环。若 c y c l e F a l s e cycle False cycleFalse则学习率从初始值单调递减至最低值。 若 c y c l e T r u e cycleTrue cycleTrue其计算公式为 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{align} 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{align} decay_stepsnew_learning_ratedecay_steps∗math.ceil(decay_stepsepoch)(learning_rate−end_lr)∗(1−decay_stepsepoch)powerend_lr 若 c y c l e F a l s e cycleFalse cycleFalse其计算公式为 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{align} epoch min(epoch, decay\_steps) \\ new\_learning\_rate (learning\_rate - end\_lr) * (1 - \frac{epoch}{decay\_steps})^{power} end\_lr \end{align} epochnew_learning_ratemin(epoch,decay_steps)(learning_rate−end_lr)∗(1−decay_stepsepoch)powerend_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 为多项式的幂。 间隔衰减 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
...多间隔衰减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
...逆时间衰减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_rate1gamma∗epochlearning_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 为训练轮数。 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
...余弦衰减Cosine Annealing Decay 使用 cosine annealing 的策略来动态调整学习率学习率随step数变化成余弦函数周期变化。该方法中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{align} \eta_t \eta_{min} \frac{1}{2}(\eta_{max} - \eta_{min})(1 cos(\frac{T_{cur}}{T_{max}}\pi)), \quad T_{cur} \neq (2k1)T_{max} \\ \eta_{t1} \eta_{t} \frac{1}{2}(\eta_{max} - \eta_{min})(1 - cos(\frac{1}{T_{max}}\pi)), \quad T_{cur} (2k 1)T_{max} \end{align} ηtηmin21(ηmax−ηmin)(1cos(TmaxTcurπ)),Tcur(2k1)Tmaxηt1ηt21(ηmax−ηmin)(1−cos(Tmax1π)),Tcur(2k1)Tmax 其中 η m a x \eta_{max} ηmax的初始值为学习率的初始值 T c u r T_{cur} Tcur是SGDR训练过程中的当前训练轮数。 诺姆衰减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}, epoch*warmup\_steps^{-1.5}) new_learning_ratelearning_rate∗dmode−0.5∗min(epoch−0.5,epoch∗warmup_steps−1.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 为初始学习率。 loss自适应衰减Reduce On Plateau 当loss停止下降时降低学习率。其思想是一旦模型表现不再提升将学习率降低 2-10 倍对模型的训练往往有益。此外每降低一次学习率后将会进入一个冷静期。在冷静期内不会监控loss变化也不会进行衰减。当冷静期结束后会继续监控loss的上升或下降。 线性学习率热身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} lrstart_lr(end_lr−start_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 lrlearning_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 为训练轮数。