常见学习率衰减方式

常见学习率衰减方式学习率学习率的作用​ 在机器学习中,监督式学习通过定义一个模型,并根据训练集上的数据估计最优参数。梯度下降法是一个广泛被用来最小化模型误差的参数优化算法。梯度下降法通过多次迭代,并在每一步中最小化成本函数(cost来估计模型的参数。学习率(learningrate),在迭代过程中会控制模型的学习进度。​ 在梯度下降法中,都是给定的统一的学习率,整个优化过程中都以确定的步长进行更新,在…

大家好,又见面了,我是你们的朋友全栈君。

学习

学习率的作用

​ 在机器学习中,监督式学习通过定义一个模型,并根据训练集上的数据估计最优参数。梯度下降法是一个广泛被用来最小化模型误差的参数优化算法。梯度下降法通过多次迭代,并在每一步中最小化成本函数(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)]

指数衰减

​ 以指数衰减方式进行学习率的更新,学习率的大小和训练次数指数相关,其更新规则为:
d e c a y e d _ 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 e c a y _ r a t e g l o b a l _ s t e p d e c a y _ s t e p s decayed{\_}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)]

自然指数衰减

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

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

多项式衰减

​ 应用多项式衰减的方式进行更新学习率,这里会给定初始学习率和最低学习率取值,然后将会按照
给定的衰减方式将学习率从初始值衰减到最低值,其更新规则如下式所示。
g l o b a l _ s t e p = m i n ( g l o b a l _ s t e p , d e c a y _ s t e p s ) global{\_}step=min(global{\_}step,decay{\_}steps) global_step=min(global_step,decay_steps)

d e c a y e d _ 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 e a r n i n g _ r a t e ) ∗ ( 1 − g l o b a l _ s t e p d e c a y _ s t e p s ) p o w e r + e n d _ l e a r n i n g _ r a t e decayed{\_}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 的结果,如下式所示.它是用来防止神经网络在训练的后期由于学习率过小而导致的网络一直在某个局部最小值附近震荡,这样可以通过在后期增大学习率跳出局部极小值。
d e c a y _ s t e p s = d e c a y _ s t e p s ∗ c e i l ( g l o b a l _ s t e p d e c a y _ s t e p s ) 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)]

余弦衰减

​ 余弦衰减就是采用余弦的相关方式进行学习率的衰减,衰减图和余弦函数相似。其更新机制如下式所示:
g l o b a l _ s t e p = m i n ( g l o b a l _ s t e p , d e c a y _ s t e p s ) global{\_}step=min(global{\_}step,decay{\_}steps) global_step=min(global_step,decay_steps)

c o s i n e _ d e c a y = 0.5 ∗ ( 1 + c o s ( π ∗ g l o b a l _ s t e p d e c a y _ s t e p s ) ) 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))

d e c a y e d = ( 1 − α ) ∗ c o s i n e _ d e c a y + α decayed=(1-\alpha)*cosine{\_}decay+\alpha decayed=(1α)cosine_decay+α

d e c a y e d _ 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 e c a y e d decayed{\_}learning{\_}rate=learning{\_}rate*decayed decayed_learning_rate=learning_ratedecayed

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134221.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • docker容器和主机同网段_docker桥接模式下外网访问

    docker容器和主机同网段_docker桥接模式下外网访问首先我们需要了解的是:每个docker容器都是隔离的,所以它们之间是相互不同的!那么我们开始操作起来,让他们之间可以相互ping通网络。。。一、拉取镜像创建容器1.在这之前首先关闭防火墙;如果显示runinng则执行:sudosystemctlstopfirewalld2.在https://hub.docker.com里拉取镜像busybox(注:busybox相当于小型的c…

  • pycharm安装python3.6_python安装教程

    pycharm安装python3.6_python安装教程Pycharm安装+python3.9+配置过程一、安装Pycharm+python3.9Pycharm官网下载:https://www.jetbrains.com/pycharm/download/#section=windows点击Community下的Download进行下载。Python3.9官网下载:https://www.python.org/点击Download下的python3.9.2进入:下拉至最下面,点击windowsem

  • css属性margin是什么意思_css中position的属性

    css属性margin是什么意思_css中position的属性深入理解css中的margin属性之前我一直认为margin属性是一个非常简单的属性,但是最近做项目时遇到了一些问题,才发现margin属性还是有一些“坑”的,下面我会介绍margin的基本知识以及

  • linux文件重命名命令rename_修改文件名linux

    linux文件重命名命令rename_修改文件名linuxlinux下重命名文件有两种方式:1.较简单的处理命令:mvmv原文件名新文件名如:mvmyFilenewName将MyFile重命名为newName.2.linux提供了一个重命名文件命令:renamerenamefromtofile1file2。。。如:renamemyFilenewNamemyFile.text将myFile.text重命名为newName.text这个命令在批量重命名是更好用如:renamemyFilenewNamemy

  • 互联网金融风控模型「建议收藏」

    互联网金融风控模型「建议收藏」一、市场调研目前市面主流的风控模型1、互联网金融前10名排行榜(数据截止日期2017-09-12)互联网金融公司排名分别是蚂蚁金服、陆金所、京东金融、苏宁金融、百度金融、腾讯理财通、宜信、钱大掌柜、万达金融和网易理财。1.1蚂蚁金服1.1.1大数据技术对接第三方征信公司芝麻信用分,通过用户信用历史、行为偏好、履约能力、身份特质、人脉关系五个维度对…

  • 惊艳的时间轮定时器「建议收藏」

    惊艳的时间轮定时器「建议收藏」http://www.cnblogs.com/zhongwencool/p/timing_wheel.html问题引入:游戏里面每个Player身上有很多buffs,在每一个tick(最小时间段)都要去检查buff里面的每一个buff是不是过期,产生的效果如何,造成在每个tick里面都去遍历一个长list,明显很不好。怎么优化?1.原始模型:

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号