深度学习里面的而优化函数 Adam,SGD,动量法,AdaGrad 等 | PyTorch 深度学习实战

news2025/3/13 18:33:50

前一篇文章,使用线性回归模型逼近目标模型 | PyTorch 深度学习实战

本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started

本篇文章内容来自于 强化学习必修课:引领人工智能新时代【梗直哥瞿炜】

深度学习里面的而优化函数

  • 发展历史
    • 不同梯度下降算法的原理概述
    • 核心差异
    • 最佳策略的讨论
  • Momentum 动量法
    • 物理学中的动量
    • 深度学习中的动量
    • 梯度更新
    • 运动轨迹
    • 优缺点
  • AdaGrad 算法
    • 基本思想
    • 稀疏特征
    • 优缺点
  • AdaDelta 算法
    • 基本原理
    • 优缺点
  • RMSProp 算法
    • 基本原理
    • 优缺点
  • Adam 算法
    • 基本思想
  • Links

发展历史

机器学习,就是随机初始化参数,然后根据损失函数,不断的使用梯度更新参数。 因此,如何精确的调整参数,十分重要,这个参数更新的算法就是梯度下降,梯度下降算法出现后,不断的演进。

梯度下降变种算法提出时间轴:

  • 1847 年 梯度下降算法
  • 1957 年 随机梯度下降算法 SGD
  • 1993 年 动量法
  • 1994 年 小批量随机梯度动量法
  • 2011 年 AdaGrad 算法
  • 2011 年 AdaDelta 算法
  • 2012 年 RMSProp/AdaDelta 算法
  • 2014 年 Adam 算法

在这里插入图片描述

不同梯度下降算法的原理概述

在这里插入图片描述

不同算法的区别,主要体现在 2,3 步。对于1、4 步,是通用的。

核心差异

  • 更多参考文章 深度学习里面的而优化函数

在这里插入图片描述

通过可视化比较,不同算法在梯度上,选择下降的方向是不同的,论文 《An empirical analysis of the optimization of deep network loss surfaces》。

比如,RMSProp 和 AdaDelta 算法
在这里插入图片描述

最佳策略的讨论

不能一下子确定哪个最好,要根据数据、问题进行尝试,通常的经验如下:

  • 不想做精细的调优,那么就用 Adam;类似于开车上的自动挡
  • 更加自如地控制优化迭代的各类参数,那么 SGD,选择性的添加动量等,相当于开车上的手动挡
  • 先用 Adam 快速下降,再用 SGD 调优

在这里插入图片描述

  • 还是熟悉自己的数据,如果数据是稀疏的,那么就是选择学习率自适应的算法
  • 使用一个小规模的验证集,进行控制变量法的对比,看哪个算法能快速的收敛

在这里插入图片描述

Momentum 动量法

物理学中的动量

动量守恒定律:一个物质系统不受外力或所受外力之和为零,(即 F 合外力 = 0 F_{合外力}=0 F合外力=0 ),那么它的动量必定守恒 。这个定律用数学表达式记作:

在这里插入图片描述

因为动量是矢量,所以动量守恒定律的等式是一个矢量方程。若物体的运动是一维的,那么可以通过规定正方向将这个方程标量化,其中“+”表示物体运动方向与正方向相同,“-”表示物体运动方向与正方向相反。若物体的运动是二维甚至更高维度,则求和符合矢量相加减的原则。

动量守恒定律不仅适用于二体体系,也适用于多体体系:不仅适用于惯性系,也适用于非惯性系。动量守恒定律的适用范围比牛顿运动定律广。

在这里插入图片描述

深度学习中的动量

优化梯度下降的算法:动量有加速收敛的效果。

在这里插入图片描述

梯度更新

动量随机梯度下降。

将当前的梯度与上一步的梯度加权平均来减少梯度的震荡。

在这里插入图片描述

运动轨迹

直观的观察到,为什么动量可以优化学习过程 :

在这里插入图片描述

优缺点

在这里插入图片描述

AdaGrad 算法

AdaGrad 是二阶随机梯度下降动量法的改进版本。二阶动量的出现,意味着自适应学习率优化算法时代的到来。(优化学习率的调整)

基本思想

在这里插入图片描述

对更新的很频繁的参数,更新的慢一点;对更新的不频繁的参数,当更新发生的时候,更新的大一点。更新过程:

  • 计算一阶动量 g τ g_{\tau} gτ
  • 根据一阶动量计算二阶动量 V t V_{t} Vt
  • 根据二阶动量、一阶动量和学习率,计算 η t \eta_{t} ηt
  • 根据 η t \eta_{t} ηt 更新参数 w w w

原理:参数更新越频繁, V t V_{t} Vt 越大,因为其出现在分母上,导致最终本次参数更新越小;与之相反,如果在更新过程历史中,参数更新越少,则 V t V_{t} Vt 越小,导致最终参数更新越大。

稀疏特征

当样本空间是稀疏特征矩阵的时候,AdaGrad 算法特别有效果。

在这里插入图片描述

优缺点

AdaGrad 算法优缺点
在这里插入图片描述

左图是 标准的 SGD,右侧是 AdaGrad.

AdaDelta 算法

避免使用手动调整学习率的方法,来控制训练过程。自动调整学习率,使得训练过程更加顺畅。

基本原理

在这里插入图片描述

  • 左侧是 RMSProp 算法,右侧是 AdaDelta 算法
  • ϵ \epsilon ϵ 是一个正数,防止分母为零
  • E 是对当前梯度 g 或 Δ w \Delta w Δw 求期望

优缺点

在这里插入图片描述

RMSProp 算法

AdaGrad 存在学习率过小,学习收敛慢的问题。RMSProp 算法是对 AdaGrad 的问题的改进。

基本原理

![[../assets/media/screenshot_20250206130441.png]]

基本原理是:改变二阶动量计算方法的策略,不累积全部历史梯度,而只关注过去一段时间窗口的下降梯度。

优缺点

![[../assets/media/screenshot_20250206130509.png]]

缺点:增加了超参数,对稀疏特征矩阵的学习效果变差。

Adam 算法

目前最流行的梯度算法改进。

基本思想

把一阶动量和二阶动量都用起来。自适应动量估计。

  • 快速收敛
  • 引入两个因子 β 1 \beta_{1} β1 控制一阶动量,通常使用 0.9; β 2 \beta_{2} β2 控制二阶动量,通常设置为 0.999
  • m ^ t \widehat m_{t} m t v ^ t \widehat v_{t} v t 分别是对一阶动量和二阶动量的偏差矫正

在这里插入图片描述

Links

  • 深度学习里面的而优化函数

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

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

相关文章

基于Spring Boot的图书个性化推荐系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

【论文阅读】Comment on the Security of “VOSA“

Comment on the Security of Verifiable and Oblivious Secure Aggregation for Privacy-Preserving Federated Learning -- 关于隐私保护联邦中可验证与遗忘的安全聚合的安全性 论文来源摘要Introduction回顾 VOSA 方案对VOSA不可伪造性的攻击对于类型 I 的攻击对于类型 II 的…

3.攻防世界 Confusion1(服务器模板注入SSTI)

题目描述如下 进入题目页面如下 图片是蟒蛇、大象?python、php? 猜测需要代码审计 点击 F12查看源码,有所提示flag 但是也没有其他信息了 猜测本题存在SSTI(服务器模板注入)漏洞,为验证,构造…

保姆级教程 !SQL Server数据库的备份和还原

使用 SQL Server Management Studio (SSMS) 备份和还原数据库 1、数据库备份 Step 1 打开 SSMS 输入server name 以及用户名和密码连接到你的 SQL Server 实例 Step 2 展开Database,选中你要备份的数据库 Step 3 右击选中的数据库,点击Tasks --> Back …

AlwaysOn 可用性组副本所在服务器以及该副本上数据库的各项状态信息

目录标题 AlwaysOn语句代码解释:1. sys.dm_hadr_database_replica_states 视图字段详细解释及官网链接官网链接字段解释 2. sys.availability_replicas 视图字段详细解释及官网链接官网链接字段解释 查看视图的创建语句方法一:使用 SQL Server Managemen…

ip地址是手机号地址还是手机地址

在数字化生活的浪潮中,IP地址、手机号和手机地址这三个概念如影随形,它们各自承载着网络世界的独特功能,却又因名称和功能的相似性而时常被混淆。尤其是“IP地址”这一术语,经常被错误地与手机号地址或手机地址划上等号。本文旨在…

zephyr devicetree

Syntax and structure — Zephyr Project Documentation Input files There are four types of devicetree input files: sources (.dts) includes (.dtsi) overlays (.overlay) bindings (.yaml) The devicetree files inside the zephyr directory look like this: …

学习笔记:机器学习中的数学原理(一)

1. 集合 集合分为有限集和无限集; 对于有限集,两集合元素数相等即为等势; 对于无限集,两集合元素存在一一映射关系即为等势; 无限集根据是否与正整数集等势分为可数集和不可数集。 2. sigmoid函数(也叫…

鼠标滚轮冒泡事件@wheel.stop

我有一个页面,是在画布上的组件,但是组件中有一个table,table中数据多了,就会出现滚动条,正常情况下,滚动条用鼠标滚轮就可以滑动,但是这个table是在画布上,滚动滚轮会让画布缩放 在table外层的div上加上 wheel.stop,就生效了 wheel.stop 用途:这个修饰符用于处理鼠…

代码随想录算法【Day38】

Day38 322. 零钱兑换 思路 完全背包 代码 class Solution { public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount 1, INT_MAX);dp[0] 0;for (int i 0; i < coins.size(); i) { // 遍历物品for (int j coins[i]; j <…

51单片机之冯·诺依曼结构

一、概述 8051系列单片机将作为控制应用最基本的内容集成在一个硅片上&#xff0c;其内部结构如图4-1所示。作为单一芯片的计算机&#xff0c;它的内部结构与一台计算机的主机非常相似。其中微处理器相当于计算机中的CPU&#xff0c;由运算器和控制器两个部分构成&#xff1b;…

02.07 TCP服务器与客户端的搭建

一.思维导图 二.使用动态协议包实现服务器与客户端 1. 协议包的结构定义 首先&#xff0c;是协议包的结构定义。在两段代码中&#xff0c;pack_t结构体都被用来表示协议包&#xff1a; typedef struct Pack {int size; // 记录整个协议包的实际大小enum Type type; …

【CubeMX+STM32】SD卡 文件系统读写 FatFs+SDIO+DMA

本篇&#xff0c;将使用CubeMXKeil&#xff0c;创建一个SD卡的 FatFSSDIODMA 文件系统读写工程。 目录 一、简述 二、CubeMX 配置 FatFSSDIO DMA 三、Keil 编辑代码 四、实验效果 实现效果&#xff0c;如下图&#xff1a; 一、简述 上两篇&#xff0c;已循序渐进讲解了SD、…

51单片机之使用Keil uVision5创建工程以及使用stc-isp进行程序烧录步骤

一、Keil uVision5创建工程步骤 1.点击项目&#xff0c;新建 2.新建目录 3.选择目标机器&#xff0c;直接搜索at89c52选择&#xff0c;然后点击OK 4.是否添加起吊文件&#xff0c;一般选择否 5.再新建的项目工程中添加文件 6.选择C文件 7.在C文件中右键&#xff0c;添加…

aws(学习笔记第二十七课) 使用aws API Gateway+lambda体验REST API

aws(学习笔记第二十七课) 使用aws API Gatewaylambda体验REST API 学习内容&#xff1a; 使用aws API Gatewaylambda 1. 使用aws API Gatewaylambda 作成概要 使用api gateway定义REST API&#xff0c;之后再接收到了http request之后&#xff0c;redirect到lambda进行执行。…

5 前端系统开发:Vue2、Vue3框架(上):Vue入门式开发和Ajax技术

文章目录 前言一、Vue框架&#xff08;简化DOM操作的一个前端框架&#xff09;&#xff1a;基础入门1 Vue基本概念2 快速入门&#xff1a;创建Vue实例&#xff0c;初始化渲染&#xff08;1&#xff09;创建一个入门Vue实例&#xff08;2&#xff09;插值表达式&#xff1a;{{表…

快速在wsl上部署学习使用c++轻量化服务器-学习笔记

知乎上推荐的Tinywebserver这个服务器&#xff0c;快速部署搭建&#xff0c;学习c服务器开发 仓库地址 githubhttps://link.zhihu.com/?targethttps%3A//github.com/qinguoyi/TinyWebServerhttps://link.zhihu.com/?targethttps%3A//github.com/qinguoyi/TinyWebServer 在…

2025年Android NDK超全版本下载地址

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

React 设计模式:实用指南

React 提供了众多出色的特性以及丰富的设计模式&#xff0c;用于简化开发流程。开发者能够借助 React 组件设计模式&#xff0c;降低开发时间以及编码的工作量。此外&#xff0c;这些模式让 React 开发者能够构建出成果更显著、性能更优越的各类应用程序。 本文将会为您介绍五…

B站自研的第二代视频连麦系统(上)

导读 本系列文章将从客户端、服务器以及音视频编码优化三个层面&#xff0c;介绍如何基于WebRTC构建视频连麦系统。希望通过这一系列的讲解&#xff0c;帮助开发者更全面地了解 WebRTC 的核心技术与实践应用。 背景 在文章《B站在实时音视频技术领域的探索与实践》中&#xff…