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

前一篇文章,使用线性回归模型逼近目标模型 | 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.mzph.cn/bicheng/70476.shtml

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

相关文章

番外篇:寄人篱下的岁月

在小冷的记忆深处,有一段时光如同一幅陈旧却又色彩浓烈的画卷,被岁月的尘埃轻轻覆盖着。那是他小时候,在二姨家度过的一年。这段经历,在他的生命中刻下了深深的印记,成为了他成长路上一段难以忘怀的过往,其…

腾讯混元3D创作引擎:一站式AI 3D创作平台的深度解析

在当今数字化的时代,3D内容创作正逐渐成为各行各业不可或缺的一部分。从游戏开发到影视制作,再到教育和广告行业,3D技术的应用场景日益广泛。然而,传统的3D创作往往需要大量的时间和技能积累,这使得许多非专业人士望而却步。为了打破这一壁垒,腾讯于2025年1月21日正式发布…

Chrome谷歌多开教程:实用方法与工具

不管是电子商务、技术测试、空投等不同专业领域,还是个人的工作和生活账号管理,使用不同的独立账户往往需要借助Chrome谷歌浏览器多开来提高效率。Chrome谷歌多开有哪些方法和工具?可以来参考以下实用内容。 一、Chrome谷歌多开方法与工具 1…

数据库操作与数据管理——Rust 与 SQLite 的集成

第六章:数据库操作与数据管理 第一节:Rust 与 SQLite 的集成 在本节中,我们将深入探讨如何在 Rust 中使用 SQLite 数据库,涵盖从基本的 CRUD 操作到事务处理、数据模型的构建、性能优化以及安全性考虑等方面。SQLite 是一个轻量…

Android原生开发问题汇总

Fragment顶部出现一个白条怎么办?父类布局搞事情。 layer-list被拉伸问题 Android之 ImageView android:src和tools:src的区别是什么? Android运行时权限的总结,以及EasyPermissions框架的使用 Android Studio添加EasyPemissions Android中module怎…

【AI实践】Cursor上手-跑通Hello World和时间管理功能

背景 学习目的:熟悉Cursor使用环境,跑通基本开发链路。 本人背景:安卓开发不熟悉,了解科技软硬件常识 实践 基础操作 1,下载安装安卓Android Studio 创建一个empty project 工程,名称为helloworld 2&am…

深度解析DeepSeek模型系列:从轻量级到超大规模(附DeepSeek硬件配置清单)

在人工智能领域,深度学习模型的选择对于任务的执行效率和精度至关重要。DeepSeek模型系列提供了多种不同参数量的版本,以满足不同场景下的需求。本文将详细解析DeepSeek模型系列的特点、适用场景以及硬件需求。 DeepSeek模型系列概览 DeepSeek模型系列…

LeetCodeHot 100 第一天

哈希组 1、两数之和使用的是HashMap,如果数字数目比较小可以使用数组作为Hash表,HashMap使用的函数市put,get,containsKey。 2、遇到判断字母异位词首先进行排序,本质上就是找字母异位词的共同之处,也就是…

讯飞绘镜(ai生成视频)技术浅析(五):视频生成

讯飞绘镜(AI生成视频)是一种先进的AI视频生成技术,能够将静态的分镜画面转换为动态视频,并使画面中的元素按照一定的逻辑和动作进行动态展示。 一、讯飞绘镜视频生成技术概述 讯飞绘镜的视频生成技术主要包含以下几个核心模块: 1.视频生成模型:包括生成对抗网络(GAN)…

LabVIEW铅酸蓄电池测试系统

本文介绍了基于LabVIEW的通用飞机铅酸蓄电池测试系统的设计与实现。系统通过模块化设计,利用多点传感器采集与高效的数据处理技术,显著提高了蓄电池测试的准确性和效率。 ​ 项目背景 随着通用航空的快速发展,对飞机铅酸蓄电池的测试需求也…

JVM虚拟机以及跨平台原理

相信大家已经了解到Java具有跨平台的特性,即“一次编译,到处运行”,例如在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C很难做到的。 那么,跨平台是怎样实现的呢?这就要谈及…

重新刷题求职2-DAY7

1.454. 四数相加 II 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a; 输入&#…

如何用大语言模型提高工作效率

软件工程师对大型语言模型&#xff08;LLM&#xff09;的看法存在严重分歧。许多人认为它们是迄今为止对该行业最具变革性的技术。另一些人则认为它们不过是又一个炒作过度的产品&#xff1a;想想很兴奋&#xff0c;但最终对从事严肃工作的专业人士来说毫无用处。 就我个人而言…

CSP晋级组比赛生成文件夹与文件通用代码Python

快速生成文件夹与文件的脚本 import sys import osmyfiles sys.argv[1::] for f in myfiles:os.mkdir(f)os.system(f"touch {f}/{f}.in")os.system(f"touch {f}/{f}.out")os.system(f"touch {f}/{f}.cpp")with open("template.cpp",…

基于STM32校车安全监控系统的设计(论文+源码+实物

1 方案设计 根据设计要求&#xff0c;本设计校车安全监控系统的设计以STM32F103单片机作为主控制器&#xff0c;通过MQ传感器实现异常气体的检测&#xff0c;当异常气体浓度异常时会通过继电器打开车窗进行通风&#xff0c;以保证舒适的环境&#xff0c;通过红外传感器用于监测…

Vite 打包原理

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

基于yolo的视频检测分析

基于yolo的视频检测分析 分步骤实现视频处理、目标检测与追踪、动作分析、计数逻辑&#xff0c;然后整合成API 完整的解决方案&#xff0c;包含视频分析逻辑和API封装&#xff0c;使用Python、YOLOv8和FastAPI实现代码如下&#xff1a; python代码实现 import os import uu…

探索C语言:寻找数组中连续1的最大长度

在编程的世界里&#xff0c;我们常常会遇到各种有趣的算法问题&#xff0c;今天让我们来深入剖析一段C语言代码&#xff0c;它的功能是在给定的整数数组中找出连续1的最大长度。 一、代码功能概述 这段代码定义了一个名为 findMaxConsecutiveOnes 的函数&#xff0c;它接受一个…

人工智能应用-智能驾驶精确的目标检测和更高级的路径规划

实现更精确的目标检测和更高级的路径规划策略是自动驾驶领域的核心任务。以下是一个简化的示例&#xff0c;展示如何使用Python和常见的AI库&#xff08;如TensorFlow、OpenCV和A*算法&#xff09;来实现这些功能。 1. 环境准备 首先&#xff0c;确保安装了以下库&#xff1a;…

归一化与伪彩:LabVIEW图像处理的区别

在LabVIEW的图像处理领域&#xff0c;归一化&#xff08;Normalization&#xff09;和伪彩&#xff08;Pseudo-coloring&#xff09;是两个不同的概念&#xff0c;虽然它们都涉及图像像素值的调整&#xff0c;但目的和实现方式截然不同。归一化用于调整像素值的范围&#xff0c…