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

深度学习基础——神经网络优化算法

1.1梯度下降法

梯度下降法:函数沿梯度方向有最大的变化率,优化目标损失函数时,根据负梯度方向进行。
θ t + 1 = θ t − η ⋅ ∇ θ L ( θ t ) \theta_{t+1} = \theta_t - \eta \cdot \nabla_\theta L(\theta_t) θt+1=θtηθL(θt)
其中:
η \eta η为学习率,即每次更新的步长。
∇ θ \nabla_\theta θ为梯度。

1.2改进的梯度下降法

以下是神经网络梯度下降法中几种经典改进方法的讲解,包括核心思想、公式及适用场景:


1. Momentum(动量法)

核心思想:模拟物理中的动量,在参数更新时引入历史梯度方向的加权平均,加速收敛并减少震荡。
公式
v t = β v t − 1 + ( 1 − β ) ∇ θ L ( θ t ) θ t + 1 = θ t − η ⋅ v t v_{t} = \beta v_{t-1} + (1-\beta) \nabla_\theta L(\theta_t) \\ \theta_{t+1} = \theta_t - \eta \cdot v_t vt=βvt1+(1β)θL(θt)θt+1=θtηvt

  • 特点
    • β \beta β 为动量系数(通常取0.9),控制历史梯度的权重。
    • 在梯度方向一致时加速更新,梯度方向变化时减少震荡。
  • 适用场景:损失函数存在局部最小值或鞍点时效果显著。

2. AdaGrad(自适应梯度)

核心思想:为每个参数自适应调整学习率,历史梯度平方的累积值越大,学习率越小。
公式
G t = G t − 1 + ( ∇ θ L ( θ t ) ) 2 θ t + 1 = θ t − η G t + ϵ ⋅ ∇ θ L ( θ t ) G_t = G_{t-1} + (\nabla_\theta L(\theta_t))^2 \\ \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{G_t + \epsilon}} \cdot \nabla_\theta L(\theta_t) Gt=Gt1+(θL(θt))2θt+1=θtGt+ϵ ηθL(θt)

  • 特点
    • 学习率随训练逐步衰减,适合稀疏数据(如自然语言处理)。
    • 缺点:累积梯度平方可能导致学习率过早趋近于零。
  • 适用场景:特征稀疏或需要自适应调整学习率的任务。

3. RMSProp(均方根传播)

核心思想:改进AdaGrad的累积方式,引入指数衰减平均,避免学习率过早下降。
公式
E t = β E t − 1 + ( 1 − β ) ( ∇ θ L ( θ t ) ) 2 θ t + 1 = θ t − η E t + ϵ ⋅ ∇ θ L ( θ t ) E_t = \beta E_{t-1} + (1-\beta)(\nabla_\theta L(\theta_t))^2 \\ \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{E_t + \epsilon}} \cdot \nabla_\theta L(\theta_t) Et=βEt1+(1β)(θL(θt))2θt+1=θtEt+ϵ ηθL(θt)

  • 特点
    • 通过衰减系数 β \beta β(通常取0.9)控制历史梯度的影响。
    • 解决了AdaGrad学习率单调下降的问题。
  • 适用场景:非平稳目标函数或需要动态调整学习率的场景。

4. Adam(自适应矩估计)

核心思想:结合Momentum和RMSProp,利用梯度的一阶矩(均值)和二阶矩(方差)进行自适应调整。
公式
m t = β 1 m t − 1 + ( 1 − β 1 ) ∇ θ L ( θ t ) ( 一阶矩 ) v t = β 2 v t − 1 + ( 1 − β 2 ) ( ∇ θ L ( θ t ) ) 2 ( 二阶矩 ) m ^ t = m t 1 − β 1 t , v ^ t = v t 1 − β 2 t ( 偏差修正 ) θ t + 1 = θ t − η v ^ t + ϵ ⋅ m ^ t m_t = \beta_1 m_{t-1} + (1-\beta_1)\nabla_\theta L(\theta_t) \quad (\text{一阶矩}) \\ v_t = \beta_2 v_{t-1} + (1-\beta_2)(\nabla_\theta L(\theta_t))^2 \quad (\text{二阶矩}) \\ \hat{m}_t = \frac{m_t}{1-\beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1-\beta_2^t} \quad (\text{偏差修正}) \\ \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \cdot \hat{m}_t mt=β1mt1+(1β1)θL(θt)(一阶矩)vt=β2vt1+(1β2)(θL(θt))2(二阶矩)m^t=1β1tmt,v^t=1β2tvt(偏差修正)θt+1=θtv^t +ϵηm^t

  • 特点
    • 超参数 β 1 \beta_1 β1(通常0.9)和 β 2 \beta_2 β2(通常0.999)分别控制一阶和二阶矩的衰减。
    • ϵ \epsilon ϵ为一个很小的常数。
    • 偏差修正(Bias Correction)避免初始阶段估计偏差。
    • 综合了动量加速和自适应学习率的优点。
  • 适用场景:通用性强,尤其适合大数据集和复杂模型(如深度学习)。

总结与对比
方法核心改进点优点缺点
Momentum引入动量加速收敛减少震荡,加速平坦区域收敛对噪声敏感,需调参(\beta)
AdaGrad自适应学习率(历史梯度平方)适合稀疏数据学习率过早下降,需手动设置(\epsilon)
RMSProp指数衰减的梯度平方累积解决AdaGrad学习率下降过快问题超参数(\beta)需调节
Adam一阶矩+二阶矩自适应收敛快,适应性强,通用性好内存占用略高,超参数较多

实际应用建议
  • 默认选择:优先尝试Adam,因其在大多数任务中表现稳定。
  • 特殊场景:稀疏数据可尝试AdaGrad或RMSProp;简单模型可用Momentum。
  • 框架实现
    # PyTorch示例
    optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
    optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
    
http://www.xdnf.cn/news/533629.html

相关文章:

  • 免费私有化部署! PawSQL社区版,超越EverSQL的企业级SQL优化工具面向个人开发者开放使用了
  • 游戏盾的功有哪些?
  • AGI大模型(27):LangChain向量存储
  • react事件绑定的方法
  • 桌面麒麟系统下的GMAC调试日志
  • HTTPS、SSL证书是啥?网站“安全小锁”的入门科普
  • 基于 STC89C52 的料仓物位监测系统设计与实现
  • 自动化调参工具:VOFA+可视化参数
  • java集合详细讲解
  • Java集合框架解析:从基础到底层源码
  • 如何使用GIT管理项目代码
  • 大二周周练翻译
  • IP地址代理公司:服务模式与行业应用探析
  • 龙虎榜——20250519
  • Java—— IO流 第一期
  • FART 自动化脱壳框架简介与脱壳点的选择
  • Effective C++阅读笔记(item 1-4)
  • C++(2)关键字+数据类型 +数据类型输入
  • linux服务器参数调优
  • 【Pandas】pandas DataFrame mode
  • 家庭数字生态构建实战:基于飞牛fnOS的智能家居数据中台搭建全流程解析
  • Visual Studio构建三剑客:生成/重新生成/清理解决方案深度解析
  • 【爬虫】DrissionPage-8.1
  • Ubuntu20.04系统下使用交叉编译工具链(aarch、x86)交叉编译opencv4.5.0
  • DApp开发全流程解析:模式设计、功能参考与合约管理实践
  • Fabric初体验(踩坑笔记)
  • 详细介绍一下Python连接MySQL数据库的完整步骤
  • 命令2-IBM Spectrum Scale(以前称为 GPFS)-mmhealth cluster show NATIVE_RAID
  • SAP系统的委外业务是什么?委外采购(标准委外)与工序外协的区别有哪些?
  • 图像中紫边出现原因