深度学习学习率(lr)调参

这篇具有很好参考价值的文章主要介绍了深度学习学习率(lr)调参。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、learning rate 简述

lr全称learning rate(一下简称lr),是机器学习和深度学习中最为重要的超参数之一,会影响模型训练结果的好坏,有时候甚至会直接导致整个模型无法使用。

lr最直接的可观测的影响就是loss值的变化,较大的学习率会更容易收敛也更容易出现陷入局部最优解的情况,而过大的学习率会导致loss无法收敛甚至出现nan的情况;较小的学习率更容易找到全局最优解但是loss下降和收敛的速度也更慢,过小的学习率甚至会出现在可接收的训练epoch内无法收敛到“最优值”的情况。具体见图一。所以找到一个合适的学习率对于在较少的epoch内训练到一个较好模型中至关重要。

深度学习学习率(lr)调参

图一 不同学习率下loss的变化(图片来源于网络,侵删)

二、learining rate 调参技巧

可用的方法主要有经验调参、网格搜索自动调参、智能优化算法调参、贝叶斯优化、lr range test调参等等。

  1. 经验调参

调过lr的都知道lr目前主要是靠经验来选择,一般有效的学习率是 深度学习学习率(lr)调参 ,通常设置多个不同量级的lr来初步筛选较为合适的lr,当loss收敛较慢时则适当调高lr、当loss不收敛或者收敛到的loss较大时则适当调低lr等等。但是当训练数据量较大或者模型较大时将是一个比较耗费计算机资源的过程。

  1. 网格搜索自动调参

网格搜索算是一个遍历的过程,通过设置一系列的各种超参数的值,然后组合出所有的超参数对进行训练,同时选出最优的参数组合,属于是一种暴力遍历方法,在训练数据量较大或者模型较大时一般就没办法使用,毕竟太耗费资源了,就是一个暴力搜索算法。不是本博客的重点,如有需要自己去了解。

  1. 智能优化算法调参

智能优化算法调参可以是一个网格搜索的改进,通常有遗传算法、粒子群算法等,在一个超参数区间内以一种优化策略找到最合适的学习率等超参数。这种方式在开销上较为合适但是实现起来相对麻烦并且我似乎没有找到很好的博客介绍。此方法不是本博客的重点,如果有兴趣可以去自己去了解,还是有比较多的论文研究应用这种方法。

  1. LR range test调参

LR range test在论文《Cyclical Learning Rates for Training Neural Networks》中首次提出,当然这篇论文重点不在于LR range test,而是提出了一个新的设置lr变化的方式,很有意思,有兴趣的小伙伴可以看看。我觉得LR range test是个权衡了效率和准确性的方法,但是这种方法仅限于lr超参数的调整,没法像上面几种方式具有普适性。本博客参考了多篇博客和论文,具体见参考资料。

三、LR range test

简介

这种方法可以通过网络的一个训练运行几个epoch或者多个iteration来估计合理的lr最小和最大边界值。它是一种" LR范围检验"方法;在让学习率在低LR值和高LR值之间增长的同时,运行模型几个合适的epoch。当面对一个新的架构或数据集时,这个测试是非常有价值的,可以说效率很高,针对大的数据集和大模型非常合适。但是有一点要注意!这是一个估计最大和最小界的方法,某种程度上也可以选出理想的lr(但可以不会最优的)。换句话说这是一种估计的方法而不是精确定量的方法!

这种方法的核心思想其实是经验调参自动化,即根据loss的变化来选择合适的lr,具体方法是在训练和更新权重的同时将lr从较小值增长到较大值,在这个过程中记录下loss随lr变换的图,同时如有必要可以再考虑loss随epoch变化和lr随epoch变化的图(具体见图二),可以更加清晰地认识到变化情况。

深度学习学习率(lr)调参

图二 LR range test辅助可视化曲线

通常在loss随lr变化的过程中会有三个区间(具体见图三),一个是lr过小导致loss无法下降的过程,一个是lr合适loss下降的过程,另外一个是loss过大导致loss开始上升的过程。这个过程也可以用来判断我们的模型和选用的优化器是否合适,如果有明显的三个区间则可以验证其正确性,如果没有三个区间或者不连续等情况则需要重新检查模型(具体见仁见智)。

深度学习学习率(lr)调参

图三 loss随lr变化的曲线(图片来源于网络,侵删)

其方法的有效性是在lr变化过程中较大的lr相对于较小的lr占主导,此时在一定范围内的lr的训练可以视为是某个特定lr的训练过程,所以在这段合理区间内相当于是设置了该lr进行训练,这段区间内的loss变化也可以视为在该lr下的变化过程。所以我觉得要使得这个方法更加有效,一个是设置合适的lr随epoch(iteration)变化的情况使得在某个更加关注的区间内变化较慢(有足够的时间/足够长的区间来对loss进行反应),另一个是要设置足够多的epoch(iteration)数来使得变化更加充分。具体见具体实现部分。

具体关键步骤

(1)最小最大lr的确定

根据lr的理论有效区间深度学习学习率(lr)调参,我们最大可以设置最小为深度学习学习率(lr)调参,最大为1。当然不同的模型会有不同的区间,一般情况下NLP的有效区间值会更小一些,可以适当调低最大lr;CV的可以适当调高最小lr,具体模型根据具体情况来设置。

(2)lr随epoch(iteration)变化函数的设置

通常可以有线性增加、指数增加等方式,论文中使用的是线性增加,我更加推荐指数增加,因为在较小的lr时通常收敛速度会更慢,也就是需要更多的epoch(iteration)来训练才会在loss上有所体现,所以需要lr增长慢一点来提供更多的训练机会。其具体函数如下:

# 下面时线性增加的lambda表达式,其中d是公差,决定变化快慢(以这种方式是方便后续pytorh代码的实现)
lambda iterations: (1 + d * iterations / min_lr) * min_lr
# 下面是指数增加,2和1000可以根据具体所需快慢来设置
lambda iterations:(2**(iterations / 1000)) * min_lr

具体变化情况如下

import numpy as np
import matplotlib.pyplot as plt
if __name__=='__main__':
    min_lr = 1e-5
    d = 5e-5
    iterations = np.linspace(0, 17000)
    # 线性
    lrs_linear = (1 + d * iterations / min_lr) * min_lr
    # 非线性
    lrs_exp = (2**(iterations / 1000)) * min_lr
    plt.plot(iterations, lrs_linear, label='linear')
    plt.plot(iterations, lrs_exp, label='exp')
    plt.show()
深度学习学习率(lr)调参

图四 lr随iteration线性变化曲线

深度学习学习率(lr)调参

图五 lr随iteration指数变化曲线

(3)epoch(iteration)的设置

一般需要设置多个epoch(至于设置多少个epoch我觉得是需要根据数据量来确定,论文中所用的为8个epoch),我认为大致17000个左右的iteration(batch)就可以。

(4)lr区间和最佳lr的选择的选择

应该选择loss下降速度接近0且稍微往左一些的点。比如分析下面的图,有效区间为深度学习学习率(lr)调参,可以发现0.01是最合适的点。当然要是有条件可以选择几个合适的lr然后再分别进行训练筛选即可。

深度学习学习率(lr)调参

图六 loss随lr变化曲线(来源于网络、侵删)

三、完整案例代码

在调参过程中可以选择合适优化器和加入warm-up策略等,可以使用pytorch中提供的优化器中lr修改接口,本部分会演示一个完整的lr range test调参过程,感兴趣的可以自己先去实现,不是很难,给自己挖个坑,等有机会我再补充此部分。

四、参考资料

[1506.01186] Cyclical Learning Rates for Training Neural Networks (arxiv.org)

Estimating an Optimal Learning Rate For a Deep Neural Network | by Pavel Surmenok | Towards Data Science

自 Adam 出现以来,深度学习优化器发生了什么变化? - 知乎 (zhihu.com)文章来源地址https://www.toymoban.com/news/detail-445136.html

到了这里,关于深度学习学习率(lr)调参的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习调参经验:优化神经网络性能的关键八大步骤

    欢迎大家来到安静到无声的《模式识别与人工智能(程序与算法)》,如果对所写内容感兴趣请看模式识别与人工智能(程序与算法)系列讲解 - 总目录,同时这也可以作为大家学习的参考。欢迎订阅,请多多支持! 在深度学习中,

    2024年02月13日
    浏览(30)
  • 深度学习目标跟踪简述

          深度学习目标跟踪是一个活跃的研究领域,它涉及使用深度学习技术来跟踪视频或实时摄像头中的对象。这个领域通常包括以下几个关键方面: 目标检测 :在开始跟踪前,首先需要在视频的初始帧中检测到目标。这通常是通过卷积神经网络(CNN)来实现的。 特征提取

    2024年02月02日
    浏览(27)
  • 分布式深度学习库BigDL简述

            BigDL是一个在Apache Spark上构建的分布式深度学习库,由英特尔开发并开源。它允许用户使用Scala或Python语言在大规模数据集上进行深度学习模型的训练和推理。BigDL提供了许多常见的深度学习模型和算法的实现,包括卷积神经网络(CNN)、循环神经网络(RNN)等。由

    2024年04月10日
    浏览(29)
  • 【深度学习基础】专业术语汇总(欠拟合和过拟合、泛化能力与迁移学习、调参和超参数、训练集、测试集和验证集)

    📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉 📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处 欠拟合的概念 :

    2024年02月06日
    浏览(36)
  • 深度学习|9.7迁移学习transfer learning

    迁移学习是指将针对某项任务学习到的知识应用到其他任务的问题解决中去。 可以下载别人训练好的网络,保留网络中训练好的参数(参数分两种,一种是人为设置好的超参数,另外一种是在训练过程中学习/调整到的参数) 注意的是,原先训练好的网络可能会有多个输出结

    2024年01月20日
    浏览(30)
  • 深度学习3. 强化学习-Reinforcement learning | RL

    强化学习是机器学习的一种学习方式,它跟监督学习、无监督学习是对应的。本文将详细介绍强化学习的基本概念、应用场景和主流的强化学习算法及分类。 目录 什么是强化学习? 强化学习的应用场景 强化学习的主流算法 强化学习(reinforcement learning) 强化学习并不是某一种

    2024年02月11日
    浏览(27)
  • 机器学习 深度学习资料 资源machine learning

    Kaggle入门,看这一篇就够了 - 知乎 (zhihu.com) https://zhuanlan.zhihu.com/p/25686876 day1-1.什么是机器学习_哔哩哔哩_bilibili day1-1.什么是机器学习是10天学会机器学习从入门到深度学习的第1集视频,该合集共计62集,视频收藏或关注UP主,及时了解更多相关视频内容。 https://www.bilibili.com

    2024年02月21日
    浏览(39)
  • 深度学习_Learning Rate Scheduling

    我们在训练模型时学习率的设置非常重要。 学习率的大小很重要。如果它太大,优化就会发散,如果它太小,训练时间太长,否则我们最终会得到次优的结果。 其次,衰变率同样重要。如果学习率仍然很大,我们可能会简单地在最小值附近反弹,从而无法达到最优 我们可以

    2023年04月08日
    浏览(51)
  • 【深度学习】自监督学习详解(self-supervised learning)

    深度学习被分为:监督学习,无监督学习和自监督学习。 监督学习近些年获得了巨大的成功,但是有如下的缺点: 1.人工标签相对数据来说本身是稀疏的,蕴含的信息不如数据内容丰富; 2.监督学习只能学到特定任务的知识,不是通用知识,一般难以直接迁移到其他任务中。

    2024年02月07日
    浏览(38)
  • Scikit-Learn 和深度学习怎么选择

    大家好,今天我们要聊聊一个机器学习的话题:Scikit-Learn 和深度学习,到底哪一个更适合解决你的问题?我们先来看看这两种技术的异同点,然后再讲讲如何在实际问题中做出选择。 1.1 Scikit-Learn:传统机器学习的优秀代表 Scikit-Learn 是一个使用 Python 语言编写的开源机器学习

    2024年02月10日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包