【优化器】Optimizer——深度学习中的优化器是什么作用呢?

【优化器】Optimizer——深度学习中的优化器是什么作用呢?

【优化器】Optimizer——深度学习中的优化器是什么作用呢?


文章目录

  • 【优化器】Optimizer——深度学习中的优化器是什么作用呢?
  • 1.什么是优化器?
  • 梯度下降法
  • 3. 常见的优化器
    • (1) SGD(随机梯度下降)
    • (2) Momentum(动量法)
    • (3) Adagrad
    • (4) RMSprop
    • (5) Adam(自适应矩估计)
    • (6) AdamW
  • 优化器对比总结


在卷积神经网络(CNN)中,优化器(Optimizer) 是用于更新模型参数(如权重和偏置)的算法。它根据损失函数的导数或梯度,调整模型的参数,以最小化损失函数值,从而提高模型的性能。优化器通常是通过梯度下降法或其变种来进行参数优化。

1.什么是优化器?

优化器的核心目标是调整模型参数,使损失函数逐渐减小,最终找到损失函数的最小值(即全局或局部最小值)。优化器通过迭代方式来更新模型参数,核心思想是:根据损失函数的梯度信息,反向调整参数,直到找到最优解

梯度下降法

梯度下降法(Gradient Descent) 是一种通过迭代最小化损失函数的方法。在每次迭代中,计算损失函数对每个参数的梯度(即偏导数),并沿着梯度的反方向调整参数,因为梯度的方向是损失函数上升最快的方向,反方向是下降最快的方向。

  • 公式
    在这里插入图片描述
    其中:

  • θ θ θ表示模型参数(如权重、偏置)。

  • η η η 是学习率(learning rate),控制每次更新的步长。

  • ∇ J ( θ ) ∇J(θ) J(θ)是损失函数 J ( θ ) J(θ) J(θ) 对参数 θ θ θ的梯度。

3. 常见的优化器

以下是一些深度学习中常见的优化器:

(1) SGD(随机梯度下降)

  • 定义:随机梯度下降(Stochastic Gradient Descent)是经典的梯度下降法的一种变体,更新时使用随机的单个或少量的训练样本,而不是使用全部训练数据。
  • 公式
    在这里插入图片描述
    其中 x ( i ) x^{(i)} x(i), y ( i ) y^{(i)} y(i)是随机选择的一个样本数据。。
  • 优点:由于每次只使用一个或少数样本,计算速度快,适用于大规模数据。
  • 缺点:收敛路径较为不稳定,容易跳过局部最优解。
  • 代码示例
import torch
import torch.optim as optim# 假设一个简单的模型参数
params = [torch.tensor([1.0], requires_grad=True)]# 定义优化器
optimizer = optim.SGD(params, lr=0.01)# 计算损失并更新参数
loss = (params[0] - 2) ** 2  # 假设一个简单的损失函数
loss.backward()  # 计算梯度
optimizer.step()  # 更新参数
optimizer.zero_grad()  # 梯度清零

(2) Momentum(动量法)

  • 定义:动量法在 SGD 基础上加上了一个动量项,允许优化器在更新时不仅考虑当前的梯度,还保留前面更新的方向,形成一个累积效果,从而加快收敛速度。
  • 公式
    在这里插入图片描述
    其中 v t v_t vt是动量, γ γ γ 是动量系数(通常取 0.9)。
  • 优点:加速收敛,尤其是在凹形或平滑区域。
  • 缺点:仍然容易陷入局部最优解。
  • 代码示例
# 使用动量法的 SGD 优化器
optimizer = optim.SGD(params, lr=0.01, momentum=0.9)

(3) Adagrad

  • 定义:Adagrad 是一种自适应学习率优化器,它为每个参数单独设置学习率,并根据参数的更新历史动态调整学习率。更新次数越多,学习率越小。
  • 公式
    在这里插入图片描述
    其中 G t G_t Gt是梯度平方的累积和, ϵ ϵ ϵ是一个很小的常数,用于防止分母为 0。
  • 优点:对稀疏数据和稀疏梯度效果较好。
  • 缺点:随着时间的推移,学习率可能会变得过小,导致模型停止学习。
  • 代码示例
# 使用 Adagrad 优化器
optimizer = optim.Adagrad(params, lr=0.01)

(4) RMSprop

  • 定义:RMSprop 是 Adagrad 的改进版本,它通过引入指数加权平均来减缓累积梯度的增加速度,从而避免学习率变得过小。
  • 公式
    在这里插入图片描述
    其中 γ γ γ 是衰减因子,通常取 0.9。
  • 优点:对非平稳目标函数表现较好,适用于深度神经网络。
  • 缺点:仍然需要手动设置初始学习率。
  • 代码示例
# 使用 RMSprop 优化器
optimizer = optim.RMSprop(params, lr=0.01, alpha=0.9)

(5) Adam(自适应矩估计)

  • 定义:Adam 结合了 Momentum 和 RMSprop 的优点,使用两个独立的指数加权平均来处理梯度的一阶动量和二阶动量。这种方法对不同参数使用不同的自适应学习率。
  • 公式
    在这里插入图片描述
    其中, β 1 β_1 β1 β 2 β_2 β2是超参数,通常取 β 1 = 0.9 β_1=0.9 β1=0.9 β 2 = 0.999 β_2=0.999 β2=0.999
  • 优点:结合了动量和自适应学习率的优点,收敛速度快,且对超参数较为鲁棒。
  • 缺点:在某些情况下可能导致过拟合或模型停止学习。
  • 代码示例
# 使用 Adam 优化器
optimizer = optim.Adam(params, lr=0.001, betas=(0.9, 0.999))

(6) AdamW

  • 定义:定义: AdamW 是 Adam 的变体,主要区别在于权重衰减(weight decay)的方式。它通过将权重衰减应用到每次更新的参数上,而不是通过调节学习率来实现。这可以有效地避免过拟合。
  • 公式
    在这里插入图片描述
    其中 λ λ λ 是权重衰减系数。
  • 优点:更好的正则化效果,尤其适用于大型深度学习模型。
  • 代码示例
# 使用 AdamW 优化器
optimizer = optim.AdamW(params, lr=0.001, weight_decay=1e-5)

优化器对比总结

  • SGD: 基本的梯度下降法,适合小规模数据,收敛速度较慢。
  • Momentum: 加快收敛速度,适合梯度方向一致的情况。
  • Adagrad: 自适应学习率,适合稀疏数据

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

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

相关文章

在typescript浏览器端中调用C++编写的函数,WebAssembly传递指针类型的参数,以及处理指针类型的返回值。

首先要在Cmake工程中的cmakelists.txt文件中引入Emscripten工具链&#xff1a; set(CMAKE_TOOLCHAIN_FILE "D:/CppPkg/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake")直接看C代码&#xff1a; #include <emscripten/emscripten.h> #i…

鸿蒙开发之ArkTS 基础六 对象

什么是对象的呢&#xff1f;就是描述物体的特征和行为&#xff0c;是可以存储多种数据的容器 对象的定义和使用 let 对象名称: 对象结构类型 值 通过interface 关键字来约定对象结构类型,语法结构如下&#xff1a; interface 对象名{ 属性1&#xff1a;类型 属性2&#…

11.01类的定义和对象的使用(练习)

类的定义 类名&#xff1a;手机(Phone) 成员变量&#xff1a;品牌(brand&#xff09;&#xff0c;价格&#xff08;price&#xff09; 成员方法&#xff1a;打电话(calL)&#xff0c;发短信&#xff08;sendMessage&#xff09; 调用类变量和方法

基于SpringBoot+Vue+MySQL的高校心理教育辅导系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着社会的快速发展&#xff0c;大学生群体面临着日益复杂的学习、生活及就业压力&#xff0c;心理健康问题日益凸显。传统的面对面心理咨询方式因时间、空间等限制&#xff0c;难以满足学生多样化的需求。因此&#xff0c;利用…

基于spring的ssm整合

目录 基于spring的ssm整合 Spring 框架 SpringMVC 框架 MyBatis 框架 1.创建项目 2.导入依赖 3.导入sql 4.创建jdbc.propries文件 1&#xff09;mysql8以下 2&#xff09;mysql8以上的 5.创建mybatis-config.xml配置文件 6.创建spring-Config.xml文件 7.创建项目所需包和类 1&a…

2024-1.2.12-Android-Studio配置

本地博客: https://k1t0111.github.io/ K1T0 最近在做一些app方向的移动技术开发学习&#xff0c;但是由于AS的配置问题&#xff0c;市面上找不到最新的2024版本的AS的相关配置。笔者也是踩了很多坑&#xff0c;因此想写一篇文章记录一下最新的AS 2024 1.2.12的对应java环境的一…

Html css样式总结

1.Html css样式总结 1.1. 定位position 布局是html中非常重要的一部分&#xff0c;而定位在页面布局中也是使用频率很高的方法&#xff0c;本章节为定位在布局中的使用技巧和注意事项。   position定位有4个属性&#xff0c;分别是static(默认&#xff09;&#xff0c;absol…

CLIP论文中关键信息记录

由于clip论文过长&#xff0c;一直无法完整的阅读该论文&#xff0c;故而抽取论文中的关键信息进行记录。主要记录clip是如何实现的的&#xff08;提出背景、训练数据、设计模式、训练超参数、prompt的作用&#xff09;&#xff0c;clip的能力&#xff08;clip的模型版本、clip…

感知器神经网络

1、原理 感知器是一种前馈人工神经网络&#xff0c;是人工神经网络中的一种典型结构。感知器具有分层结构&#xff0c;信息从输入层进入网络&#xff0c;逐层向前传递至输出层。根据感知器神经元变换函数、隐层数以及权值调整规则的不同&#xff0c;可以形成具有各种功能特点的…

学习笔记 韩顺平 零基础30天学会Java(2024.9.15)

P557 泛型应用实例 P558 泛型使用细节1 P560 泛型使用细节2 P560 泛型课堂练习 代码见Exceise P561 自定义泛型类 对于第二点&#xff0c;因为不知道类型&#xff0c;所以不知道开辟多少空间&#xff0c;因此不能初始化 第三点&#xff0c;静态方法与类相关的&#xff0c;在类…

LeetCode[中等] 189.轮转数组

给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 思路 创建一个新数组&#xff0c;存储原数组旋转后的元素&#xff0c;然后将新数组中的元素复制回原数组。 public class Solution {public void Rotate(int[] nums, int k)…

【docker】阿里云使用docker,2024各种采坑

▒ 目录 ▒ &#x1f6eb; 导读需求开发环境 1️⃣ dial tcp: lookup on 8.8.8.8:53: no such host失败属于DNS问题 2️⃣ docker镜像配置配置最新镜像源 3️⃣ 【重点】阿里云专用获取自己的镜像加速器地址配置镜像地址 &#x1f6ec; 文章小结&#x1f4d6; 参考资料 &#x…

一款强大的吉他乐谱编辑软件GuitarPro 8.2中文解锁版

GuitarPro 8.2中文解锁版是一款强大的吉他乐谱编辑软件&#xff0c;适合新手和专业乐手。它提供详尽教程和实用工具&#xff0c;助力初学者掌握吉他技巧&#xff1b;对于专业乐手&#xff0c;它精准记录音符和节奏&#xff0c;提供丰富编辑功能和音效处理。此外&#xff0c;软件…

虽难必学系列:Netty

Netty 是一个基于 Java 的高性能、异步事件驱动的网络应用框架&#xff0c;广泛用于构建各类网络应用&#xff0c;尤其是在高并发、低延迟场景下表现出色。作为一个开源项目&#xff0c;Netty 提供了丰富的功能&#xff0c;使得开发者可以轻松构建协议服务器和客户端应用程序。…

图像生成领域老牌的GAN模型简要回顾

&#x1f367;背景 这篇文章内容很浅&#xff0c;只是个基础概念介绍&#xff0c;无深度分析。 生成对抗网络&#xff08;Generative Adversarial Networks&#xff0c;简称GAN&#xff09;是一种深度学习模型&#xff0c;由Ian Goodfellow等人在2014年提出&#xff0c;没错&…

【路径规划】全局路径规划算法,基于RRT算法家族的改进

摘要 本项目对经典的 RRT* 算法进行了改进&#xff0c;开发了 Informed-RRT* 算法&#xff0c;用于高效的全局路径规划。Informed-RRT* 通过引入启发式搜索和路径优化策略&#xff0c;在经典 RRT* 的基础上显著提高了路径质量和搜索效率。该算法特别适用于复杂环境中的高维路径…

信号的产生,保存与处理

1.信号的概念&#xff1a; 在生活中的信号&#xff1a;红绿灯&#xff0c;下课铃声&#xff0c;闹钟 红绿灯&#xff0c;你为什么认识红绿灯&#xff1f; 1.能识别红绿灯 2.能理解红灯绿灯黄灯 也就是说信号在还没产生的时候&#xff0c;我们已经认识信号并知道如何去处理…

数据稀缺条件下的时间序列微分:符号回归(Symbolic Regression)方法介绍与Python示例

时间序列概况在日常生活和专业研究中都很常见。简而言之,时间序列概况是一系列连续的数据点 y(0), y(1), …, y(t) ,其中时间 t 的点依赖于时间 t-1 的前一个点(或更早的时间点)。 在许多应用中,研究者致力于预测时间序列概况的未来行为。存在各种建模方法。这些模型通常基于过…

算法:76.最小覆盖子串

题目 链接&#xff1a;leetcode链接 思路分析&#xff08;滑动窗口&#xff09; 还是老样子&#xff0c;连续问题&#xff0c;滑动窗口哈希表 令t用的hash表为hash1&#xff0c;s用的hash表为hash2 利用hash表统计窗口内的个字符出现的个数&#xff0c;与hash1进行比较 选…

Java数据存储结构——平衡二叉树

文章目录 22.1.3 平衡二叉树22.1.3.1 LL22.1.3.2 LR22.1.3.3 RR22.1.3.4 RL 22.1.3 平衡二叉树 平衡二叉树的特点&#xff1a; 二叉树左右两个子树的高度差不超过1任意节点的左右两个子树都是一颗平衡二叉树 在原来的平衡二叉树中&#xff0c;新增数据会破坏平衡性&#xff…