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

学习率

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.rhkb.cn/news/490051.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lc46全排列——回溯

46. 全排列 - 力扣&#xff08;LeetCode&#xff09; 法1&#xff1a;暴力枚举 总共n!种全排列&#xff0c;一一列举出来放入list就行&#xff0c;关键是怎么去枚举呢&#xff1f;那就每次随机取一个&#xff0c;然后删去这个&#xff0c;再从剩下的数组中继续去随机选一个&a…

Docker 安装 Seata2.0.0 (快速配置)

说明&#xff1a;已安装Docker、MySql等&#xff0c;案例使用Mysql数据库模式、Nacos配置信息 1、准备工作 1.1 拉取镜像 [rootTseng ~]# docker pull seataio/seata-server:2.0.0 2.0.0: Pulling from seataio/seata-server 001c52e26ad5: Already exists d9d4b9b6e964: P…

渗透测试-前端验签绕过之SHA256+RSA

本文是高级前端加解密与验签实战的第2篇文章&#xff0c;本系列文章实验靶场为Yakit里自带的Vulinbox靶场&#xff0c;本文讲述的是绕过SHA256RSA签名来爆破登录。 绕过 根据提示可以看出这次签名用了SHA2556和RSA两个技术进行加密。 查看源代码可以看到RSA公钥是通过请求服务…

【JavaEE】网络(2)

一、网络编程套接字 1.1 基础概念 【网络编程】指网络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的方式实现网络通信&#xff1b;当然&#xff0c;我们只要满足进程不同就行&#xff0c;所以即便是同一个主机&#xff0c;只要是不同进程&#xff0c;基于网络来传…

《操作系统 - 清华大学》7 -1:全局页面置换算法:局部页替换算法的问题、工作集模型

文章目录 1. 局部页替换算法的问题2. 全局置换算法的工作原理3. 工作集模式3.1 工作集3.2 工作集的变化 4 常驻集 1. 局部页替换算法的问题 局部页面置换算法 OPT&#xff0c;FIFO&#xff0c;LRU&#xff0c;Clock 等等&#xff0c;这些算法都是针对一个正在运行的程序来讲的…

SpringCloud和Nacos的基础知识和使用

1.什么是SpringCloud ​   什么是微服务&#xff1f; ​   假如我们需要搭建一个网上购物系统&#xff0c;那么我们需要哪些功能呢&#xff1f;商品中心、订单中心和客户中心等。 ​   当业务功能较少时&#xff0c;我们可以把这些功能塞到一个SpringBoot项目中来进行…

LLMs之APE:基于Claude的Prompt Improver的简介、使用方法、案例应用之详细攻略

LLMs之APE&#xff1a;基于Claude的Prompt Improver的简介、使用方法、案例应用之详细攻略 目录 Prompt Improver的简介 0、背景痛点 1、优势 2、实现思路 Prompt优化 示例管理 提示词评估 Prompt Improver的使用方法 1、使用方法 Prompt Improver的案例应用 1、Kap…

CMake简单使用(二)

目录 五、scope 作用域5.1 作用域的类型5.1.1 全局作用域5.1.2 目录作用域5.1.3 函数作用域 六、宏6.1 基本语法6.2 演示代码 七、CMake构建项目7.1 全局变量7.2 写入源码路径7.3 调用子目录cmake脚本7.4 CMakeLists 嵌套(最常用) 八、CMake 与库8.1 CMake生成动静态库8.1.1 动…

ASP.NET |日常开发中读写XML详解

ASP.NET &#xff5c;日常开发中读写XML详解 前言一、XML 概述1.1 定义和结构1.2 应用场景 二、读取 XML 文件2.1 使用XmlDocument类&#xff08;DOM 方式&#xff09;2.2 使用XmlReader类&#xff08;流方式&#xff09; 三、写入 XML 文件3.1 使用XmlDocument类3.2 使用XmlWr…

自动化测试之单元测试框架

单元测试框架 一、单元测试的定义 1&#xff1a;什么是单元测试&#xff1f; 还记不记得我们软件测试学习的时候&#xff0c;按照定义&#xff1a;单元测试就是对单个模块或者是单个函数进行测试&#xff0c;一般是开发做的&#xff0c;按照阶段来分&#xff0c;一般就是单元…

JAVA爬虫获取1688关键词接口

以下是使用Java爬虫获取1688关键词接口的详细步骤和示例代码&#xff1a; 一、获取API接口访问权限 要使用1688关键词接口&#xff0c;首先需要获取API的使用权限&#xff0c;并了解接口规范。以下是获取API接口的详细步骤&#xff1a; 注册账号&#xff1a;在1688平台注册一…

【游戏设计原理】8 - 霍华德的隐匿性游戏设计法则

1. 霍华德的隐匿性游戏设计法则 霍华德的隐匿性游戏设计法则的核心思想是&#xff1a;“秘密的重要性与其表面上的无辜性和完整度成正比”。这意味着&#xff0c;当游戏开始时&#xff0c;设计上越是简洁、无害、直观的元素&#xff0c;隐藏的深层意义和转折就会显得更加震撼和…

k8s中用filebeat文件如何收集不同service的日志

以下是一个详细的从在 Kubernetes 集群中部署 Filebeat&#xff0c;到实现按web-oper、web-api微服务分离日志并存储到不同索引的完整方案&#xff1a; 理解需求&#xff1a;按服务分离日志索引 在 Kubernetes 集群中&#xff0c;有web-oper和web-api两种微服务&#xff0c;希…

前端退出对话框也就是点击右上角的叉,显示灰色界面,已经解决

文章目录 遇到一个前端bug&#xff0c;点击生成邀请码 打开对话框 然后我再点击叉号&#xff0c;退出对话框&#xff0c;虽然退出了对话框&#xff0c;但是显示灰色界面。如下图&#xff1a; 导致界面就会失效&#xff0c;点击任何地方都没有反应。 发现是如下代码的问题&am…

一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测

一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测 目录 一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现INFO-CNN-SVM向量加权算法优化卷积神经网络结…

【Stable Diffusion】SD安装、常用模型(checkpoint、embedding、LORA)、提示词具、常用插件

Stable Diffusion&#xff0c;一款强大的AI模型&#xff0c;让我们能够创造出惊人的艺术作品。本文将为您介绍如何安装Stable Diffusion以及深入使用的学习教程。 1. 安装Stable Diffusion (需要的小伙伴可以文末自行扫描获取) Stable Diffusion的安装可能是第一步&#xff0…

【工具变量】上市公司企业资本支出数据(1990-2022年)

一、计算方式&#xff1a;资本支出的公式为:经营租赁所支付的现金购建固定资产、无影资产和其他长期资产所支付的现金-处置固定资产、无形资产和其它长期资产而收回的现金净额。 二、数据范围&#xff1a;包括原始数据详细来源和最终数据结果 三、参考文献&#xff1a;[1]杨兴…

洛谷 P10483 小猫爬山 完整题解

一、题目查看 P10483 小猫爬山 - 洛谷 二、解题思路 我们将采取递归 剪枝的思想&#xff1a; sum数组存放每辆车当前载重。 每次新考虑一只小猫时&#xff0c;我们尝试把它放进每个可以放进的缆车中&#xff08;需要回溯&#xff09; for (int i 0; i < k; i) {if (sum[i]…

Leetcode二叉树部分笔记

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Leetcode二叉树部分笔记 1.二叉树的最大深度2.同样的树3.翻转二叉树4.对称二叉树**5. **填充每个节点的下一个右侧节点指针 II**6. 二叉树展开为链表7. 路经总和8.完全二叉树…

如何用状态图进行设计06

独立的控制线程 扩展状态图也提供了获取无序的输入事件的方法。这意味着一个状态开始时&#xff0c;它可能位于一个或多个控制线程的交叉点。控制行为的每个独立线程都类似一个状态机&#xff0c;独自运行&#xff0c;互不干扰。因此&#xff0c;这些控制线程可能会同时发生状…