当前位置: 首页 > news >正文

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

学习率

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

相关文章:

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

学习率 1. 什么是学习率 学习率是训练神经网络的重要超参数之一&#xff0c;它代表在每一次迭代中梯度向损失函数最优解移动的步长&#xff0c;通常用 η \eta η 表示。它的大小决定网络学习速度的快慢。在网络训练过程中&#xff0c;模型通过样本数据给出预测值&#xff0…...

导游现场面试需要注意的问题

今天给大家带来一些导游现场面试需要注意的问题&#xff0c;大部分的城市导游考试已经考完了&#xff0c;但是还有一些城市的十二月份才考&#xff0c;有需要的朋友们赶紧来看&#xff0c;有备无患。 01、做好充足准备 认真准备做好每个景点的讲解介绍&#xff0c;不要抱有侥幸…...

Burp suite 3 (泷羽sec)

声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章。 笔记只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 这节课旨在扩大自己在网络安全方面的知识面&#xff0c;了解网络安全领域的见闻&#xff0c;了…...

LabVIEW前面板无法显示的常见原因

当 LabVIEW 前面板显示为白色或黑色时&#xff0c;可能由于控件可视性设置、显卡驱动问题、程序错误或 LabVIEW 设置不当引起。通过检查面板设置、更新驱动、重启程序等方式可有效解决此问题。 遇到前面板无法显示或显示为白色/黑色的情况&#xff0c;可能有以下几种原因。可以…...

【Syncfusion系列】Diagram 杂谈 第三篇 序列化和反序列化

目录 序列化保存C# 代码示例&#xff0c; 方式1 &#xff1a;C# 代码示例&#xff0c; 方式2 &#xff1a; 反序列化加载C# 代码示例, 方式1&#xff1a;C# 代码示例, 方式2&#xff1a; **如何序列化自定义属性**序列化和反序列化都存在的一个问题解决方式 图表是否已修改&…...

Apache APISIX快速入门

本文将介绍Apache APISIX&#xff0c;这是一个开源API网关&#xff0c;可以处理速率限制选项&#xff0c;并且可以轻松地完全控制外部流量对内部后端API服务的访问。我们将看看是什么使它从其他网关服务中脱颖而出。我们还将详细讨论如何开始使用Apache APISIX网关。 在深入讨…...

【经典】制造供应链四类策略(MTS、MTO、ATO、ETO)细说

关注作者 制造供应链的牛鞭问题与复杂问题主要是从两个方面解决&#xff0c;一是同步化供应链消减从需求到供应的放大效应&#xff0c;二是供应链细分&#xff0c;针对不同的客户、不同的需求供应的匹配策略来应对复杂性&#xff0c;更好的满足客户并以最低的总成本来实现。 对…...

基于stm32的红外测温系统设计(论文+源码)

1总体方案设计 本课题为基于STM32的红外测温系统设计&#xff0c;在此将系统架构设计如图3.1所示&#xff0c; 整个系统包括STM32F103单片机&#xff0c;红外测温模块MLX90614&#xff0c;显示模块OLED12864&#xff0c;蜂鸣器以及按键等构成&#xff0c;在功能上&#xff0c;…...

前端WebSocket应用——聊天实时通信的基本配置

使用 WebSocket 实现实时通信的 Vue 应用 前言1. WebSocketService 类 1.1 类属性1.2 构造函数和连接初始化1.3 WebSocket 连接1.4 事件处理方法1.5 发送和关闭 WebSocket 消息1.6 状态查询与回调注册1.7 完整代码 2. 在 Vue 组件中使用 WebSocketService 2.1 定义 WebSocket …...

博弈论1:拿走游戏(take-away game)

假设你和小红打赌&#xff0c;玩“拿走游戏”&#xff0c;输的人请对方吃饭.... 你们面前有21个筹码&#xff0c;放成一堆&#xff1b;每轮你或者小红可以从筹码堆中拿走1个/2个/3个&#xff1b;第一轮你先拿&#xff0c;第二轮小红拿&#xff0c;你们两个人交替进行;拿走筹码堆…...

Debezium OracleValueConverters 分析

Debezium OracleValueConverters 分析 目录 1. 概述2. 核心功能3. 数据类型映射4. 特殊场景处理5. 最佳实践6. 使用示例7. 常见问题8. 扩展建议9. 总结1. 概述 OracleValueConverters 是 Debezium Oracle 连接器中负责数据类型转换的核心类,它继承自 JdbcValueConverters。主…...

WPF 消息循环(二)

们已经知道&#xff0c;win32/MFC/WinForm/WPF 都依靠消息循环驱动&#xff0c;让程序跑起来。 这里就介绍 WPF 中是如何使用消息循环来驱动程序的。 1. 背景 只听说过 Dispatcher &#xff0c;哪里来的消息循环&#xff1f; WPF 启动运行堆栈&#xff1a; > WpfApp1.…...

ubuntu上更改ext4格式的硬盘为 windows的 NTFS 格式参考

1. ubuntu上安装 sudo apt-get install gparted 2. 参考如下&#xff0c;下面是转换后的样例。 3.windows上添加识别新硬盘参考 先在设备管理器中 找到下面 磁盘管理 如下&#xff1a;找到类似下面的磁盘2 查看相关信息 右键可以新建卷和格式化&#xff0c;下面是已经新建…...

Fastapi教程:使用 aioredis 连接池执行Redis 的高效异步操作

在构建高性能的 Web 应用时&#xff0c;缓存系统是一个至关重要的组成部分。Redis 是最常见的缓存系统之一&#xff0c;它提供了高效的存储与读取机制。然而&#xff0c;在与 Redis 进行频繁交互时&#xff0c;创建和销毁连接可能会成为瓶颈。为了优化这一问题&#xff0c;我们…...

配置mysqld(读取选项内容,基本配置),数据目录(配置的必要性,目录下的内容,具体文件介绍,修改配置)

目录 配置mysqld 读取选项内容 介绍 启动脚本 基本配置 内容 端口号 数据目录的路径 配置的必要性 配置路径 mysql数据目录 具体文件 修改配置时 权限问题 配置mysqld 读取选项内容 介绍 会从[mysqld] / [server] 节点中读取选项内容 优先读取[server] 虽然服务…...

docker 容器相互访问

目前采用 network 方式 1. 创建自定义网络 docker network create network-group 如下 2. 相互访问的容器更改&#xff08;目前演示redis 以及netcore api 访问redis &#xff09; //redis 原有容器删除 跟之前区别就是加入 --network network-group docker run \ -p 6379:…...

算法1(蓝桥杯18)-删除链表的倒数第 N 个节点

问题&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个节点&#xff0c;并且返回链表的头节点。 输入&#xff1a;head 1 -> 2 -> 3 -> 4 -> 5 -> null, n 2 输出&#xff1a;1 -> 2 -> 3 -> 5 -> null输入&#xff1a;head 1 ->…...

【PyTorch】动态调整学习率 torch.optim.lr_scheduler.StepLR 调度器

文章目录 1. torch.optim.lr_scheduler.StepLR 官方文档详解2. 使用示例2.1 官方提供使用示例2.2 自己写代码测试方法2.2.1 get_last_lr() 方法2.2.2 state_dict() 方法2.2.3 load_state_dict() 保存和加载调度器 3. 思考3.1 为什么需要state_dict()3.2 get_lr() 与 get_last_l…...

AIGC drug design 人工智能生成式药物设计:基于 GPT 的 SMILES 生成与应用

人工智能生成式药物设计&#xff1a;基于 GPT 的 SMILES 生成与应用 1. 人工智能生成模型&#xff1a;解密 GPT 的工作原理 目录 引言 1.1 背景介绍 1.2 人工智能生成模型的兴起 1.3 GPT 系列模型的地位与影响 GPT 模型概述 2.1 什么是 GPT 2.2 GPT 的发展历程 2.3 GPT 与其…...

Python面试常见问题及答案4

一、内存管理相关 问题&#xff1a;Python中的垃圾回收机制是如何工作的&#xff1f; 答案&#xff1a;Python主要使用引用计数来进行垃圾回收&#xff0c;当对象的引用计数为0时&#xff0c;该对象就会被垃圾回收器回收。此外&#xff0c;Python还有一个循环垃圾收集器来处理循…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...