深度学习训练参数之学习率介绍

news2024/12/16 2:47:35

学习率

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_rate=last_learning_rategamma
    其中, 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_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 为训练轮数。

  • 多项式衰减(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{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_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{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_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 为多项式的幂。

  • 间隔衰减 (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_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 为训练轮数。

  • 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 (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{align} η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训练过程中的当前训练轮数。

  • 诺姆衰减(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_rate=learning_ratedmode0.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 为初始学习率。

  • 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} 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 为训练轮数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2260258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;编写一个程序实现单链表的基本运算。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;初始化线性表、销毁线性表、判定是否为空表、求线性…

利用ROS的Camera Calibration工具进行D435相机标定

一、安装ROS Camera Calibration sudo apt-get install ros-melodic-camera-calibration 二、安装realsense-ros 安装ROS Wrapper for Intel RealSense&#xff08;realsense-ros&#xff09; 三、启动数据读取节点 ctrlaltt打开终端 cd catkin_ws_ur source devel/setu…

让文案生成更具灵活性/chatGPT新功能canvas画布编辑

​ ​ OpenAI最近在2024年12月发布了canvas画布编辑功能&#xff0c;这是一项用途广泛的创新工具&#xff0c;专为需要高效创作文案的用户设计。 无论是职场人士、学生还是创作者&#xff0c;这项功能都能帮助快速生成、优化和编辑文案&#xff0c;提升效率的同时提高内容质量…

C# 网络编程--关于UDP 通信(二)

UDP (User Datagram Protocol) 是一种无连接的传输层协议&#xff0c;主要用于支持数据报文的传输。它的主要特点包括简单、高效、不保证可靠性和顺序。 1.UDP协议基本概念 1.udp基于IP的简单的协议&#xff0c;不可靠的协议 2.优点&#xff1a;简单、 轻量化、 传输速度高、…

Spring Boot 集成 MyBatis 全面讲解

Spring Boot 集成 MyBatis 全面讲解 MyBatis 是一款优秀的持久层框架&#xff0c;与 Spring Boot 集成后可以大大简化开发流程。本文将全面讲解如何在 Spring Boot 中集成 MyBatis&#xff0c;包括环境配置、基础操作、高级功能和最佳实践。 一、MyBatis 简介 1. SqlSession …

解决Jmeter HTTP Cookie管理器cookie不生效

解决Jmeter HTTP Cookie管理器cookie不生效问题 解决Jmeter HTTP Cookie管理器cookie不生效问题1、设置Jmeter HTTP Cookie管理器cookie后&#xff0c;发起的请求显示[no cookies]jmeter问题复现&#xff1a;这里同样使用postman进行重试&#xff0c;发现是可以正常获取数据的&…

freeswitch(开启支持MCU视频会议,使用mod_av模块)

亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景说明: 有些场景想使用视频会议MCU融合画面进行开会使用方法: 第一步:下载插件 yum install -y epel-release yum install

IntelliJ IDEA 使用技巧与插件推荐

目录 常用使用技巧 1. 使用快捷键提升开发效率 2. 多光标编辑 3. 代码自动补全 4. 使用 Find Action 快速执行操作 5. 集成版本控制系统&#xff08;VCS&#xff09; 6. 快速查看代码文档 推荐插件 1. Lombok Plugin 2. Rainbow Brackets 3. Key Promoter X 4. Chec…

Centos7环境下安装Flink1.20

目录 介绍1、涉及安装包2、节点3、修改hostname4、将flink安装包上传并解压5、修改配置文件6、修改masters和workers&#xff08;所有节点&#xff09;7、集群启停 介绍 Flink 是一个分布式系统&#xff0c;需要有效分配和管理计算资源才能执行流应用程序。它集成了所有常见的…

CTFHub 技能树 Web RCE eval执行(学习记录)

eval执行 源代码 <?php if (isset($_REQUEST[cmd])) {eval($_REQUEST["cmd"]); } else {highlight_file(__FILE__); } ?> PHP代码显示&#xff0c;要求将命令赋值给cmd然后执行 先查看一下根目录文件 /?cmdsystem("ls"); 查看上一级目录找flag文…

人员离岗监测摄像机智能人员睡岗、逃岗监测 Python 语言结合 OpenCV

在安全生产领域&#xff0c;人员的在岗状态直接关系到生产流程的顺利进行和工作环境的安全稳定。人员离岗监测摄像机的出现&#xff0c;为智能人员睡岗、逃岗监测提供了高效精准的解决方案&#xff0c;而其中的核心技术如AI识别睡岗脱岗以及相关的算法盒子和常见的安全生产AI算…

Web day11 SpringBoot原理

目录 1.配置优先级&#xff1a; 2.Bean的管理&#xff1a; bean的作用域&#xff1a; 第三方bean&#xff1a; 方案一&#xff1a; 方案二&#xff1a; SpringBoot原理&#xff1a; 扫描第三方包&#xff1a; 方案1&#xff1a;ComponentScan 组件扫描 方案2&#xff1…

ECharts柱状图-柱图2,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个柱状图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供…

VMware安装ubuntu22教程

文章目录 软件环境1、打开vmware&#xff0c;选择创建新的虚拟机2、选典型安装&#xff0c;然后点击下一步3、选择稍后安装操作系统&#xff0c;点击下一步4、版本选择Ubuntu 64位&#xff0c;点击下一步5、输入虚拟机名称和规划的安装盘符路径6、最大磁盘大小选择20G&#xff…

利用usb-cam包标定RealSense D435相机(未解决版)

一、 安装usb-cam包和标定数据包 usb_cam 包的主要作用是将 USB 摄像头的视频流转换为 ROS 可用的消息格式。 sudo apt-get install ros-melodic-usb-cam camera_calibration 包是 ROS 中用于相机标定的工具包&#xff0c;主要用于校准相机的内参和外参。 sudo apt-get ins…

Kafka系列教程 - Kafka 生产者 -2

1. 生产者简介 不管是把 Kafka 作为消息队列系统、还是数据存储平台&#xff0c;总是需要一个可以向 Kafka 写入数据的生产者和一个可以从 Kafka 读取数据的消费者&#xff0c;或者是一个兼具两种角色的应用程序。 使用 Kafka 的场景很多&#xff0c;诉求也各有不同&#xff…

基于卷积神经网络的图像二分类检测模型训练与推理实现教程 | 幽络源

前言 对于本教程&#xff0c;说白了&#xff0c;就是期望能通过一个程序判断一张图片是否为某个物体&#xff0c;或者说判断一张图片是否为某个缺陷。因为本教程是针对二分类问题&#xff0c;因此主要处理 是 与 不是 的问题&#xff0c;比如我的模型是判断一张图片是否为苹果…

SpringBoot集成JWT和Redis实现鉴权登录功能

目前市面上有许多鉴权框架&#xff0c;鉴权原理大同小异&#xff0c;本文简单介绍下利用JWT和Redis实现鉴权功能&#xff0c;算是抛砖引玉吧。 主要原理就是“令牌主动失效机制”&#xff0c;主要包括以下4个步骤&#xff1a; (1)利用拦截器LoginInterceptor实现所有接口登录拦…

初识Robot Framework测试框架

Robot Framework 是一款用 Python 编写的通用型测试框架&#xff0c;具备良好的可扩展性&#xff0c;支持关键字驱动&#xff0c;可以同时测试多种类型的客户端&#xff08;Web、PC、移动端&#xff09;或者接口&#xff0c;也可以进行分布式测试执行。常用于验收测试和验收测试…

Windows安装elasticsearch、Kibana以及IK分词器

一、下载 1.下载elasticsearch 访问官网Download Elasticsearch | Elastic&#xff0c;下载elasticsearch 2.下载 Kibana 访问Download Kibana Free | Get Started Now | Elastic &#xff0c;下载 Kibana 3. IK分词器下载 访问Gitee 极速下载/elasticsearch-analysis-ik选…