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

优化理论及应用精解【25】

文章目录

  • 优化
    • 学习率调度
      • 1. 阶梯衰减(Step Decay)
      • 2. 余弦退火(Cosine Annealing)
      • 3. 多项式衰减(Polynomial Decay)
      • 4. 指数衰减(Exponential Decay)
      • 总结
    • 梯度弥散效应
  • 参考文献

优化

学习率调度

是深度学习中一个重要的技术,它根据训练的进程动态调整学习率,以提高模型训练的效果和稳定性。下面将分别详细介绍几种常见的学习率调度策略的定义、数学原理、公式、计算、例子和例题。

1. 阶梯衰减(Step Decay)

定义
阶梯衰减是一种常见的学习率调度策略,它每隔一定数量的周期(epoch)或迭代步骤就将学习率乘以一个较小的因子(衰减率),从而降低学习率。

数学原理
阶梯衰减基于这样的假设:在训练的早期阶段,较大的学习率有助于模型快速收敛;而在训练的后期阶段,较小的学习率有助于模型在最优解附近进行更精细的调整。

公式
decayed_learning_rate = learning_rate × decay_rate ( global_step decay_steps ) \text{decayed\_learning\_rate} = \text{learning\_rate} \times \text{decay\_rate}^{\left(\frac{\text{global\_step}}{\text{decay\_steps}}\right)} decayed_learning_rate=learning_rate×decay_rate(decay_stepsglobal_step)
其中,learning_rate是初始学习率,decay_rate是衰减率,global_step是当前迭代轮数,decay_steps是衰减步长(即每隔多少个周期或迭代步骤衰减一次)。

计算
假设初始学习率为0.1,衰减率为0.5,衰减步长为10,则在第10轮、第20轮、第30轮等时,学习率将分别衰减为0.05、0.025、0.0125等。

例子
在PyTorch中,可以使用torch.optim.lr_scheduler.StepLR来实现阶梯衰减。

例题
假设初始学习率为0.1,衰减率为0.5,衰减步长为10,请计算并列出前30轮的学习率。

2. 余弦退火(Cosine Annealing)

定义
余弦退火是一种学习率调度策略,它使学习率按照余弦函数的周期变化来衰减。这种方法在训练的早期阶段允许较大的学习率波动,有助于模型跳出局部最优解;而在训练的后期阶段,学习率逐渐减小,有助于模型收敛。

数学原理
余弦退火基于余弦函数的周期性和对称性,模拟了自然界中的退火过程。在训练的早期阶段,较大的学习率波动有助于模型探索参数空间;而在训练的后期阶段,较小的学习率有助于模型在最优解附近进行精细调整。

公式
lr = lr_min + 1 2 ( lr_max − lr_min ) ( 1 + cos ⁡ ( T cur T max π ) ) \text{lr} = \text{lr\_min} + \frac{1}{2} (\text{lr\_max} - \text{lr\_min}) \left(1 + \cos\left(\frac{T_{\text{cur}}}{T_{\text{max}}} \pi\right)\right) lr=lr_min+21(lr_maxlr_min)(1+cos(TmaxTcurπ))
其中,lr是当前学习率,lr_min是最小学习率,lr_max是最大学习率(通常是初始学习率),T_cur是当前周期(epoch)数,T_max是最大周期数。

计算
假设初始学习率为0.1,最小学习率为0.001,最大周期数为50,则可以使用上述公式计算每个周期的学习率。

例子
在PyTorch中,可以使用torch.optim.lr_scheduler.CosineAnnealingLR来实现余弦退火。

例题
假设初始学习率为0.1,最小学习率为0.001,最大周期数为50,请计算并列出前10个周期的学习率。

3. 多项式衰减(Polynomial Decay)

定义
多项式衰减是一种学习率调度策略,它使学习率按照多项式函数的形状逐渐减小。这种方法在训练的早期阶段允许较大的学习率,随着训练的进行逐渐减小学习率。

数学原理
多项式衰减基于多项式函数的性质,通过调整多项式的幂来控制学习率衰减的速度。较大的幂值会导致学习率快速衰减,而较小的幂值则会导致学习率缓慢衰减。

公式
lr = initial_lr × ( 1 − epoch max_epochs ) power \text{lr} = \text{initial\_lr} \times \left(1 - \frac{\text{epoch}}{\text{max\_epochs}}\right)^{\text{power}} lr=initial_lr×(1max_epochsepoch)power
其中,initial_lr是初始学习率,epoch是当前迭代轮数,max_epochs是最大迭代轮数,power是多项式的幂。

计算
假设初始学习率为0.1,最大迭代轮数为50,多项式的幂为2,则可以使用上述公式计算每个周期的学习率。

例子
在PyTorch中,可以使用torch.optim.lr_scheduler.LambdaLR配合自定义的lambda函数来实现多项式衰减。

例题
假设初始学习率为0.1,最大迭代轮数为50,多项式的幂为2,请计算并列出前10个周期的学习率。

4. 指数衰减(Exponential Decay)

定义
指数衰减是一种学习率调度策略,它使学习率按照指数函数的形状逐渐减小。这种方法在训练的早期阶段允许较大的学习率,随着训练的进行学习率迅速衰减。

数学原理
指数衰减基于指数函数的性质,通过调整衰减率来控制学习率衰减的速度。较大的衰减率会导致学习率快速衰减,而较小的衰减率则会导致学习率缓慢衰减。

公式
lr = initial_lr × decay_rate epoch \text{lr} = \text{initial\_lr} \times \text{decay\_rate}^{\text{epoch}} lr=initial_lr×decay_rateepoch
其中,initial_lr是初始学习率,epoch是当前迭代轮数,decay_rate是衰减率。

计算
假设初始学习率为0.1,衰减率为0.95,则可以使用上述公式计算每个周期的学习率。

例子
在PyTorch中,可以使用torch.optim.lr_scheduler.ExponentialLR来实现指数衰减。

例题
假设初始学习率为0.1,衰减率为0.95,请计算并列出前10个周期的学习率。

总结

以上介绍了四种常见的学习率调度策略:阶梯衰减、余弦退火、多项式衰减和指数衰减。每种策略都有其独特的数学原理、公式和应用场景。在实际应用中,可以根据模型的特点和训练的需求选择合适的学习率调度策略。

梯度弥散效应

也被称为梯度消失,是深度学习中一个常见的问题。它主要发生在反向传播过程中,当梯度在通过网络层传播时逐渐减小,最终导致梯度接近于零。这种现象会导致靠近输入层的隐藏层梯度非常小,参数更新变得非常缓慢,几乎就和初始状态一样随机分布。由于神经网络前几层的权重更新过慢或者没有更新,整个网络的学习性能会下降,无法达到训练的标准。

梯度弥散效应的原因主要有以下几点:

  1. 激活函数的“饱和”:在反向传播的过程中,需要计算激活函数的导数。当激活函数的输入值落入其饱和区时,其导数会变得非常小。例如,sigmoid函数在输入值非常大或非常小时,其导数会趋近于零,这会导致梯度弥散。
  2. 网络层数过深:在深度网络中,梯度需要通过多层网络进行反向传播。由于每层网络都会乘以一个小于1的梯度值(在梯度弥散的情况下),多层相乘后梯度值会急剧减小,导致梯度弥散问题更加严重。

梯度弥散效应的数学原理可以通过链式法则来解释。在反向传播过程中,梯度是通过链式法则逐层传递的。如果每一层的梯度都小于1,那么多层相乘后梯度值会迅速减小到接近于零。这种现象在数学上表现为梯度连乘的结果趋于零。

为了解决梯度弥散效应,研究者们提出了多种方法,包括但不限于:

  1. 使用非饱和激活函数:如ReLU(Rectified Linear Unit)及其变种,这些激活函数在输入为正时导数恒为1,有助于缓解梯度弥散问题。
  2. 梯度裁剪:在反向传播过程中,对梯度值进行裁剪,使其保持在一个合理的范围内,避免梯度过大或过小。
  3. 批归一化(Batch Normalization):通过对每一层的输入进行归一化处理,使得输入值保持在一个稳定的分布范围内,从而缓解梯度弥散问题。
  4. 残差网络(Residual Networks):通过引入残差连接,使得网络能够学习到恒等映射,有助于缓解深层网络中的梯度弥散问题。

总的来说,梯度弥散效应是深度学习中一个需要重视的问题。通过选择合适的激活函数、应用梯度裁剪和批归一化等技术手段,可以有效地缓解梯度弥散问题,提高深度神经网络的训练效果。

参考文献

  1. 文心一言

相关文章:

优化理论及应用精解【25】

文章目录 优化学习率调度1. 阶梯衰减(Step Decay)2. 余弦退火(Cosine Annealing)3. 多项式衰减(Polynomial Decay)4. 指数衰减(Exponential Decay)总结 梯度弥散效应 参考文献 优化 …...

贝锐蒲公英网盘首发,秒建私有云,高速远程访问

虽然公共网盘带来了不少便利,但是大家对隐私泄露和重要数据泄密的担忧也随之增加。如果想要确保数据安全,自建私有云似乎是一条出路,然而面对搭建私有云的复杂步骤,许多人感到力不从心,NAS设备的成本也往往让人望而却步…...

[ 蓝桥 ·算法双周赛 ] 第 19 场 小白入门赛

&#x1f525;博客介绍&#xff1a; EvLast &#x1f3a5;系列专栏&#xff1a; <<数据结构与算法>> << 算法入门>> << C项目>> &#x1f3a5; 当前专栏: << 算法入门>> 专题 : 帮助小白快速入门算法竞赛 &#x1f44d…...

HTML+CSS基础 第二季课堂笔记

一、列表 列表都不是单打独斗的&#xff0c;通常都是一组标签组成 1 无序列表 作用&#xff1a;定义一个没有顺序的列表结构 由两个标签组成&#xff0c;ul&#xff08;容器级标签&#xff09;&#xff0c;li&#xff08;容器级&#xff09; ul&#xff1a;英文ulordered …...

【Easy RL】Easy RL蘑菇书全书学习笔记

【Easy RL】Easy RL蘑菇书全书学习笔记 第一章 强化学习基础1.1 强化学习概述监督学习强化学习与监督学习的不同之处二者的区别总结强化学习的特征强化学习的优越性预演&#xff08;rollout&#xff09;和 轨迹&#xff08;trajectory&#xff09;的概念端到端的概念深度强化学…...

JavaWeb(二)

Servlet开发技术 [外链图片转存中…(img-Cnu8X2V4-1728026684827)] 简述Servlet的创建过程&#xff1f; package servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; …...

【C++】--类和对象(2)

&#x1f44c;个人主页: 起名字真南 &#x1f446;个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 类的默认成员函数2 构造函数3 析构函数4 拷贝构造5 赋值运算符重载5.1 运算符重载5.2 赋值运算符的重载 1 类的默认成员函数 默认成员函数就是用户没有显示实现&#xff0c;…...

最新BurpSuite2024.9专业中英文开箱即用版下载

1、工具介绍 本版本更新介绍 此版本对 Burp Intruder 进行了重大改进&#xff0c;包括自定义 Bambda HTTP 匹配和替换规则以及对扫描 SOAP 端点的支持。我们还进行了其他改进和错误修复。 Burp Intruder 的精简布局我们对 Burp Intruder 进行了重大升级。现在&#xff0c;您可…...

C++ 观察者模式

观察者模式&#xff08;Observer Pattern&#xff09;是一种行为设计模式&#xff0c;用于在对象之间建立一对多的依赖关系&#xff0c;当一个对象的状态发生变化时&#xff0c;它的所有依赖对象都会得到通知并自动更新。 在观察者模式中&#xff0c;主题和观察者之间是松耦合…...

基于pytorch的手写数字识别-训练+使用

import pandas as pd import numpy as np import torch import matplotlib import matplotlib.pyplot as plt from torch.utils.data import TensorDataset, DataLoadermatplotlib.use(tkAgg)# 设置图形配置 config {"font.family": serif,"mathtext.fontset&q…...

SpringBoot接收前端传递参数

1&#xff09;URL 参数 参数直接 拼接在URL的后面&#xff0c;使用 ? 进行分隔&#xff0c;多个参数之间用 & 符号分隔。例如&#xff1a;http://localhost:8080/user?namezhangsan&id1后端接收&#xff08;在Controller方法的参数列表中使用 RequestParam 注解&…...

【LeetCode周赛】第 418 场

3309. 连接二进制表示可形成的最大数值 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接 数组 nums 中所有元素的 二进制表示 &#xff0c;请你返回可以由这种方法形成的 最大 数值。 注意 任何数字的二进制表示 不含 前导零 思路&#xff1a;暴力枚举 class Soluti…...

Android学习7 -- NDK2 -- 几个例子

学习 Android 的 NDK&#xff08;Native Development Kit&#xff09;可以帮助你用 C/C 来开发高性能的 Android 应用&#xff0c;特别适合对性能要求较高的任务&#xff0c;如音视频处理、游戏开发和硬件驱动等。下面是学习 NDK 的建议步骤和具体例子&#xff1a; ### 1. **准…...

问:说说JVM不同版本的变化和差异?

在Java程序的执行过程中&#xff0c;Java虚拟机&#xff08;JVM&#xff09;扮演着至关重要的角色。它不仅负责解释和执行Java字节码&#xff0c;还管理着程序运行时的内存。根据JVM规范&#xff0c;JVM将其所管理的内存划分为多个不同的数据区域&#xff0c;包括程序计数器、J…...

计算机毕业设计 基于Python的社交音乐分享平台的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

51单片机的水位检测系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块水位传感器继电器LED、按键和蜂鸣器等模块构成。适用于水位监测、水位控制、水位检测相似项目。 可实现功能: 1、LCD1602实时显示水位高度 2、水位传感器采集水位高度 3、按键可设置水位的下限 4、按键可手动加…...

Python和R及Julia妊娠相关疾病生物剖析算法

&#x1f3af;要点 算法使用了矢量投影、现代优化线性代数、空间分区技术和大数据编程利用相应向量空间中标量积和欧几里得距离的紧密关系来计算使用妊娠相关疾病&#xff08;先兆子痫&#xff09;、健康妊娠和癌症测试算法模型使用相关性投影利用相关性和欧几里得距离之间的关…...

Web安全 - 重放攻击(Replay Attack)

文章目录 OWASP 2023 TOP 10导图1. 概述2. 重放攻击的原理攻击步骤 3. 常见的重放攻击场景4. 防御重放攻击的技术措施4.1 使用时效性验证&#xff08;Time-Based Tokens&#xff09;4.2 单次令牌机制&#xff08;Nonce&#xff09;4.3 TLS/SSL 协议4.4 HMAC&#xff08;哈希消息…...

Python项目文档生成常用工具对比

写在前面&#xff1a; 通过阅读本片文章&#xff0c;你将了解&#xff1a;主流的Python项目文档生成工具&#xff08;Sphinx&#xff0c;MkDocs&#xff0c;pydoc&#xff0c;Pdoc&#xff09;简介及对比&#xff0c;本文档不涉及相关工具的使用。 概述 近期&#xff0c;由于…...

教育领域的技术突破:SpringBoot系统实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

RabbitMQ入门3—virtual host参数详解

在 RabbitMQ 中&#xff0c;创建 Virtual Host 时会涉及到一些参数配置&#xff0c;比如 tags 和 Default Queue Type。下面是对这两个参数的详细解释&#xff1a; 1. Tags Tags 是 Virtual Host 的标记&#xff0c;用来为 Virtual Host 添加元数据&#xff0c;帮助你管理和组…...

【Nacos入门到实战十四】Nacos配置管理:集群部署与高可用策略

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…...

UE5+ChatGPT实现3D AI虚拟人综合实战

第11章 综合实战&#xff1a;UE5ChatGPT实现3D AI虚拟人 通过结合Unreal Engine 5&#xff08;UE5&#xff09;的强大渲染能力和ChatGPT的自然语言处理能力&#xff0c;我们可以实现一个高度交互性的AI虚拟人。本文将详细介绍如何在UE5中安装必要的插件&#xff0c;配置OpenAI…...

[图形学]smallpt代码详解(2)

一、简介 本文紧接在[图形学]smallpt代码详解&#xff08;1&#xff09;之后&#xff0c;继续详细讲解smallpt中的代码&#xff0c;包括自定义函数&#xff08;第41到47行&#xff09;和递归路径跟踪函数&#xff08;第48到74行&#xff09;部分。 二、smallpt代码详解 1.自…...

vmstat命令:系统性能监控

一、命令简介 ​vmstat​ 是一种在类 Unix 系统上常用的性能监控工具&#xff0c;它可以报告虚拟内存统计信息&#xff0c;包括进程、内存、分页、块 IO、陷阱&#xff08;中断&#xff09;和 CPU 活动等。 ‍ 二、命令参数 2.1 命令格式 vmstat [选项] [ 延迟 [次数] ]2…...

linux部署NFS和autofs自动挂载

目录 &#xff08;一&#xff09;NFS&#xff1a; 1. 什么是NFS 2. NFS守护进程 3. RPC服务 4. 原理 5. 部署 5.1 安装NFS服务 5.2 配置防火墙 5.3 创建服务端共享目录 5.4 修改服务端配置文件 (1). /etc/exports (2). nfs.conf 5.5 启动nfs并加入自启 5.6 客户端…...

WPF RadioButton 绑定boolean值

<RadioButtonMargin"5"Content"替换"IsChecked"{Binding CorrectionOption.ReCorrectionMode}" /> <RadioButtonMargin"5"Content"平均"IsChecked"{Binding CorrectionOption.ReCorrectionMode, Converter{St…...

2024 ciscn WP

一、MISC 1.火锅链观光打卡 打开后连接自己的钱包&#xff0c;然后点击开始游戏&#xff0c;答题八次后点击获取NFT&#xff0c;得到有flag的图片 没什么多说的&#xff0c;知识问答题 兑换 NFT Flag{y0u_ar3_hotpot_K1ng} 2.Power Trajectory Diagram 方法1&#xff1a; 使用p…...

代码随想录--字符串--重复的子字符串

题目 给定一个非空的字符串&#xff0c;判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母&#xff0c;并且长度不超过10000。 示例 1: 输入: "abab" 输出: True 解释: 可由子字符串 "ab" 重复两次构成。示例 2: 输入: "…...

No.5 笔记 | 网络端口协议概览:互联网通信的关键节点

1. 常用端口速览表 端口范围主要用途1-1023系统或特权端口1024-49151注册端口49152-65535动态或私有端口 远程访问类&#xff08;20-23&#xff09; 端口服务记忆技巧安全风险21FTP"File Transfer Port"爆破、嗅探、溢出、后门22SSH"Secure Shell"爆破、…...