常见学习率衰减方式

zz/2024/4/20 15:56:04

学习率

学习率的作用

​ 在机器学习中,监督式学习通过定义一个模型,并根据训练集上的数据估计最优参数。梯度下降法是一个广泛被用来最小化模型误差的参数优化算法。梯度下降法通过多次迭代,并在每一步中最小化成本函数(cost 来估计模型的参数。学习率 (learning rate),在迭代过程中会控制模型的学习进度。

​ 在梯度下降法中,都是给定的统一的学习率,整个优化过程中都以确定的步长进行更新, 在迭代优化的前期中,学习率较大,则前进的步长就会较长,这时便能以较快的速度进行梯度下降,而在迭代优化的后期,逐步减小学习率的值,减小步长,这样将有助于算法的收敛,更容易接近最优解。故而如何对学习率的更新成为了研究者的关注点。
​ 在模型优化中,常用到的几种学习率衰减方法有:分段常数衰减、多项式衰减、指数衰减、自然指数衰减、余弦衰减、线性余弦衰减、噪声线性余弦衰减

学习率衰减常用参数有哪些

参数名称参数说明
learning_rate初始学习率
global_step用于衰减计算的全局步数,非负,用于逐步计算衰减指数
decay_steps衰减步数,必须是正值,决定衰减周期
decay_rate衰减率
end_learning_rate最低的最终学习率
cycle学习率下降后是否重新上升
alpha最小学习率
num_periods衰减余弦部分的周期数
initial_variance噪声的初始方差
variance_decay衰减噪声的方差

分段常数衰减

​ 分段常数衰减需要事先定义好的训练次数区间,在对应区间置不同的学习率的常数值,一般情况刚开始的学习率要大一些,之后要越来越小,要根据样本量的大小设置区间的间隔大小,样本量越大,区间间隔要小一点。下图即为分段常数衰减的学习率变化图,横坐标代表训练次数,纵坐标代表学习率。

[外链图片转存失败(img-kw3S7wkH-1563178407618)(./img/ch3/learnrate1.png)]

指数衰减

​ 以指数衰减方式进行学习率的更新,学习率的大小和训练次数指数相关,其更新规则为:
decayed_learning_rate=learning_rate∗decay_rateglobal_stepdecay_stepsdecayed{\_}learning{\_}rate =learning{\_}rate*decay{\_}rate^{\frac{global{\_step}}{decay{\_}steps}} decayed_learning_rate=learning_ratedecay_ratedecay_stepsglobal_step
​ 这种衰减方式简单直接,收敛速度快,是最常用的学习率衰减方式,如下图所示,绿色的为学习率随
训练次数的指数衰减方式,红色的即为分段常数衰减,它在一定的训练区间内保持学习率不变。

[外链图片转存失败(img-RRMXfiVj-1563178407618)(./img/ch3/learnrate2.png)]

自然指数衰减

​ 它与指数衰减方式相似,不同的在于它的衰减底数是eee,故而其收敛的速度更快,一般用于相对比较
容易训练的网络,便于较快的收敛,其更新规则如下
decayed_learning_rate=learning_rate∗e−decay_rateglobal_stepdecayed{\_}learning{\_}rate =learning{\_}rate*e^{\frac{-decay{\_rate}}{global{\_}step}} decayed_learning_rate=learning_rateeglobal_stepdecay_rate
​ 下图为为分段常数衰减、指数衰减、自然指数衰减三种方式的对比图,红色的即为分段常数衰减图,阶梯型曲线。蓝色线为指数衰减图,绿色即为自然指数衰减图,很明可以看到自然指数衰减方式下的学习率衰减程度要大于一般指数衰减方式,有助于更快的收敛。

[外链图片转存失败(img-FE9J8UEg-1563178407618)(./img/ch3/learnrate3.png)]

多项式衰减

​ 应用多项式衰减的方式进行更新学习率,这里会给定初始学习率和最低学习率取值,然后将会按照
给定的衰减方式将学习率从初始值衰减到最低值,其更新规则如下式所示。
global_step=min(global_step,decay_steps)global{\_}step=min(global{\_}step,decay{\_}steps) global_step=min(global_step,decay_steps)

decayed_learning_rate=(learning_rate−end_learning_rate)∗(1−global_stepdecay_steps)power+end_learning_ratedecayed{\_}learning{\_}rate =(learning{\_}rate-end{\_}learning{\_}rate)* \left( 1-\frac{global{\_step}}{decay{\_}steps}\right)^{power} \\ +end{\_}learning{\_}rate decayed_learning_rate=(learning_rateend_learning_rate)(1decay_stepsglobal_step)power+end_learning_rate

​ 需要注意的是,有两个机制,降到最低学习率后,到训练结束可以一直使用最低学习率进行更新,另一个是再次将学习率调高,使用 decay_steps 的倍数,取第一个大于 global_steps 的结果,如下式所示.它是用来防止神经网络在训练的后期由于学习率过小而导致的网络一直在某个局部最小值附近震荡,这样可以通过在后期增大学习率跳出局部极小值。
decay_steps=decay_steps∗ceil(global_stepdecay_steps)decay{\_}steps = decay{\_}steps*ceil \left( \frac{global{\_}step}{decay{\_}steps}\right) decay_steps=decay_stepsceil(decay_stepsglobal_step)
​ 如下图所示,红色线代表学习率降低至最低后,一直保持学习率不变进行更新,绿色线代表学习率衰减到最低后,又会再次循环往复的升高降低。

[外链图片转存失败(img-3s21wgMu-1563178407619)(./img/ch3/learnrate4.png)]

余弦衰减

​ 余弦衰减就是采用余弦的相关方式进行学习率的衰减,衰减图和余弦函数相似。其更新机制如下式所示:
global_step=min(global_step,decay_steps)global{\_}step=min(global{\_}step,decay{\_}steps) global_step=min(global_step,decay_steps)

cosine_decay=0.5∗(1+cos(π∗global_stepdecay_steps))cosine{\_}decay=0.5*\left( 1+cos\left( \pi* \frac{global{\_}step}{decay{\_}steps}\right)\right) cosine_decay=0.5(1+cos(πdecay_stepsglobal_step))

decayed=(1−α)∗cosine_decay+αdecayed=(1-\alpha)*cosine{\_}decay+\alpha decayed=(1α)cosine_decay+α

decayed_learning_rate=learning_rate∗decayeddecayed{\_}learning{\_}rate=learning{\_}rate*decayed decayed_learning_rate=learning_ratedecayed

​ 如下图所示,红色即为标准的余弦衰减曲线,学习率从初始值下降到最低学习率后保持不变。蓝色的线是线性余弦衰减方式曲线,它是学习率从初始学习率以线性的方式下降到最低学习率值。绿色噪声线性余弦衰减方式。

[外链图片转存失败(img-uEcVuiCy-1563178407619)(./img/ch3/learnrate5.png)]


http://www.ngui.cc/zz/2390171.html

相关文章

i=i++深入解释

以下内容是在JAVA虚拟机中探究,学习C语言的小伙伴请自行绕开 一道基础的题目: int i0; ii; i?? 执行结果:0; why??不应该是1吗?大脑中快速飞过计算步骤: i初始化位0,题目中是…

超简单!一部手机就能提取视频中的语音转换成文字

当我们工作中去整理一些视频资料时,有时候需要对视频中所讲的内容进行整理,这时候很多办公小白会采用传统的方法,就是需要一遍又一遍地看,并记录其中的内容。实际上我们可以提取视频中的语言,将相应的语音内容转换成文…

教你如何将语音转换成文字

语音识别是一种将人的语音转换为文本的的技术。语音识别可以直接把你说的话直接转换成文字, 使用起来也比较方便,不用动手,就可以输入你想要的文字。下面小编就来教大家如何将语音转换成文字。 工具:迅捷PDF阅读器 操作方法&#…

想把语音转成文字,就这样做

将语音转成文字的方法很多,如果你不怕麻烦你可以边听语音边敲文字,就是比较费时间。当我们想转化的语音时间比较长的时候往往是行不通的,那比较快速、省力的方法就是使用软件进行转写。给你推荐2个比较好用的转写软件。 一:滴答转…

语音识别技术,将语音转换成文字

现在越来越多的同学都不想打字,而是用语音来代替文字的输入,现在随着语音识别 技术的越来越成熟,完全可以应用到我们的日常生活里了。其实这项技术也可以应用 到工作上,比如利用语音来写文档,方便快捷。那么我们怎么实…

实用系列1 —— 视频中的语音转换成文字

实用系列1 —— 视频中的语音转换成文字python版本 背景说明 疫情原因,家里的老师亲戚需要对着电脑上网课,晋升为十八线小主播~ 备课的内容来源都是当地教育局的公开课,为了学习公开课的上课方法,只能自己慢速播放视…

某优job

目标url : aHR0cHM6Ly93d3cuNTFqb2IuY29tLw 抓取相关数据 通过对源代码的查看,可以很明确的知道,这些数据是同步加载的。 抓包分析: payload不变,由此可以确定url和发送的params 确定headers需要的字段 凭经验和实际测试可得…

手写代码(笔试面试真题)

★★★ 手写代码:实现forEach map filter reduce ★★★ 手写实现一个简易的 Vue Reactive ★★★ 手写代码,监测数组变化,并返回数组长度 ★★★ 手写原生继承,并说出局限性? ★★★★ 手写一个柯里化函数 ★★★…

2021-最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)---手写代码篇

★★★ 手写代码:实现forEach map filter reduce ★★★ 手写实现一个简易的 Vue Reactive ★★★ 手写代码,监测数组变化,并返回数组长度 ★★★ 手写原生继承,并说出局限性? ★★★★ 手写一个柯里化函数 ★★★…

可以设置过期时间的Java缓存Map

前言 最近项目需求需要一个类似于redis可以设置过期时间的K,V存储方式。项目前期暂时不引进redis,暂时用java内存代替。 解决方案 1. ExpiringMap 功能简介 : 1.可设置Map中的Entry在一段时间后自动过期。 2.可设置Map最大容纳值,当到达Maxim…