当前位置: 首页 > 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;非常…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...