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

【优化器】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: 自适应学习率,适合稀疏数据

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • claude,gpt,通义千问
  • 5. Python之数据类型
  • MATLAB窗口操作常用命令
  • 基于 Delphi 的家庭财务管理系统
  • Linux-mysql5.7-mysql8.0安装包下载及安装教程,二合一
  • 车型展示+接驳体验!苏州金龙海格客车闪耀汉诺威商用车展
  • Android 系统下:普通应用无缝安装,Launcher 应用安装遭遇罕见障碍解析
  • 使用 Java 初步搭建简单Spring 项目框架:
  • Docker和K8S
  • 车辆重识别(关于卷积神经网络一些资料)2024/9/11
  • 【454. 四数相加 II】
  • 【设计模式-外观】
  • 解密AI创作:提升Prompt提示词的提问技巧
  • 《Google软件测试之道》笔记
  • 软考 -- 软件设计师 -- 二轮复习(3) -- 数据结构(持续更新)
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • java 多线程基础, 我觉得还是有必要看看的
  • Java新版本的开发已正式进入轨道,版本号18.3
  • PAT A1092
  • React的组件模式
  • React中的“虫洞”——Context
  • spring boot 整合mybatis 无法输出sql的问题
  • Vue ES6 Jade Scss Webpack Gulp
  • Vue小说阅读器(仿追书神器)
  • 多线程事务回滚
  • 关于List、List?、ListObject的区别
  • 基于HAProxy的高性能缓存服务器nuster
  • 聊聊redis的数据结构的应用
  • 前端路由实现-history
  • 前端面试题总结
  • 数据可视化之 Sankey 桑基图的实现
  • 消息队列系列二(IOT中消息队列的应用)
  • 小试R空间处理新库sf
  • 做一名精致的JavaScripter 01:JavaScript简介
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 2017年360最后一道编程题
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ![CDATA[ ]] 是什么东东
  • # include “ “ 和 # include < >两者的区别
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #VERDI# 关于如何查看FSM状态机的方法
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (java)关于Thread的挂起和恢复
  • (Note)C++中的继承方式
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .net dataexcel 脚本公式 函数源码
  • .NET文档生成工具ADB使用图文教程