神经网络优化算法

news2024/12/29 10:31:14

神经网络优化算法

文章目录

  • 神经网络优化算法
    • 梯度下降算法
    • 批量梯度下降法
    • 随机梯度下降法
    • 小批量随机梯度下降法
    • 动量法
    • NAG
    • AdaGrad
    • RMSProp
    • ADADELTA
    • ADAM
    • NADAM

梯度下降算法

f ( x ) = 1 2 x 2 f(x)=\frac12x^2 f(x)=21x2为例展示了梯度下降法中梯度下降的实际情况,图中的箭头表示梯度下降的方向。可以将 x x x往 导数的反方向移动一小步来减小 f ( x ) f( x) f(x)即取 x ′ = x − ϵ f ′ ( x ) x^{\prime}=x-\epsilon f^{\prime}(x) x=xϵf(x)为新的参考点,这种技术称为梯度下降。

image-20240523180548794

梯度下降的步骤如下:

  1. 初始化参数值。
  2. 计算当前参数下损失函数的梯度。
  3. 按照梯度的方向和学习率对参数进行更新,学习率决定了每一步参数 调整的大小。
  4. 重复步骤2和3,直到达到预定的停止条件(如达到最大迭代次数或损 失函数收敛到指定的值)。
  5. 通过不断更新参数,梯度下降法能够使模型逐渐朝着更小的损失函数 值移动,从而找到损失函数的局部最小值或全局最小值。

需要注意的是,梯度下降法可能会陷入局部最小值而无法到达全局最小值。 为了解决这个问题,可以使用不同的改进方法,

  • 批量梯度下降法(Batch Gradient Descent,BGD)
  • 随机梯度下降法(Stochastic Gradient Descent,SGD)
  • 小批量随机梯度下降法(Mini-batch Stochastic Gradient Descent, mini-batch SGD)

批量梯度下降法

批量梯度下降法(Batch Gradient Descent,BGD)是在更新参数的时候 使用所有的样本进行更新,假设一个批次中有𝑛个样本,则计算梯度的时候 使用这个批次中所有𝑛个样本的梯度数据,计算公式:
x ′ = x − ϵ ∑ j = 1 n ∇ x j f ( x j ) x^{\prime}=x-\epsilon\sum_{j=1}^n\nabla_{x_j}f(x_j) x=xϵj=1nxjf(xj)
因为需要计算整个批次的梯度来执行一次更新,所以批量梯度下降法可能非常缓慢,并且对于内存不适合的数据集来说是难以处理的,而且批量梯 度下降法也不允许在线更新模型。

随机梯度下降法

随机梯度下降法(Stochastic Gradient Descent,SGD)与批量梯度下降法相对应,区别在于求梯度时没有用一个批次中的所有𝑛个样本数据,而是随机选取其中一个样本来求梯度,计算公式:
x ′ = x − ϵ ∇ x j f ( x j ) x^{\prime}=x-\epsilon\nabla_{x_j}f(x_j) x=xϵxjf(xj)
由于每次仅采用一个样本来迭代,训练速度很快。但是基于这种方法的模型对每个实例都非常敏感,造成了收敛中的不稳定,来回波动,当然实例引发的波动可能使模型跳过皱褶,找到更好的局部最小值。

已有研究表明,当缓慢降低学习率时,SGD表现出与批量梯度下降法相同的收敛行为,对于非凸优化和凸优化,几乎可以分别收敛到局部最小值或全局最小值。

小批量随机梯度下降法

小批量随机梯度下降法(Mini-batch Stochastic Gradient Descent, mini-batch SGD)是批量梯度下降法和随机梯度下降法的折衷,也就是对于一个批次中的所有𝑛个样本,采用𝑘个样本来迭代:
x ′ = x − ϵ ∑ j = t t + k − 1 ∇ x j f ( x j ) x^{\prime}=x-\epsilon\sum_{j=t}^{t+k-1}\nabla_{x_j}f(x_j) x=xϵj=tt+k1xjf(xj)
小批量随机梯度下降法一方面减少了参数更新的方差,使得损失函数更稳定的收敛,另一方面可以利用最先进的深度学习库中常见的矩阵优化,使梯度的计算非常高效。常见的小批量大小在50-256之间,但不同的数据集可能会有所不同。

动量法

随机梯度下降法容易导致模型陷入局部最优或者鞍点,且梯度更新不稳定, 容易陷入震荡。

针对此问题,动量(Momentum)法提出在随机梯度下降法的基础上,引入动量的概念,使用指数移动平均值取代梯度计算,计算公式
x ′ = x − ϵ m t = x − ϵ ( β m t − 1 + ∇ x j f ( x j , t ) ) x^{\prime}=x-\epsilon m_t=x-\epsilon\left(\beta m_{t-1}+\nabla_{x_j}f(x_j,t)\right) x=xϵmt=xϵ(βmt1+xjf(xj,t))
其中 ϵ \epsilon ϵ表示学习率, m t m_t mt即为引入的动量,它累加了过去的梯度信息
m t = β m t − 1 + ∇ x j f ( x j , t ) = β ( β m t − 2 + ∇ x j f ( x j , t − 1 ) ) + ∇ x j f ( x j , t ) = ∑ τ = 0 t − 1 β τ ∇ x j f ( x j , t − τ ) \\m_t=\beta m_{t-1}+\nabla_{x_j}f(x_j,t)=\beta\left(\beta m_{t-2}+\nabla_{x_j}f(x_j,t-1)\right)+\nabla_{x_j}f(x_j,t)= \sum_{\tau=0}^{t-1}\beta^\tau\nabla_{x_j}f(x_j,t-\tau) mt=βmt1+xjf(xj,t)=β(βmt2+xjf(xj,t1))+xjf(xj,t)=τ=0t1βτxjf(xj,tτ)
直观来看,动量在当前时刻的梯度上,增加了与先前时刻梯度相关的 β m t − 1 \beta m_{t-1} βmt1,增加了与先前时刻梯度相关的 β m t − 1 \beta m_{t-1} βmt1,即当前时刻参数的更新方向不仅由当前梯度方向决定,也与之前累积的梯度方向(动量方向)相关。如图所示,对于参数中梯度方向变化不大的维度,动量的引入可以加速参数收敛;而针对梯度方向变化较大的维度,则可以缓解震荡现象。

image-20240523190459562

NAG

NAG(Nesterov Accelerated Gradient)针对动量法进行了进一步改进,动量法中计算的为当前时刻的梯度,NAG提出计算参数经过更新之后时刻的梯度:
x ′ = x − ϵ m t = x − ϵ ( β m t − 1 + ∇ x j f ( x j − β m t − 1 , t ) ) x'=x-\epsilon m_t=x-\epsilon\left(\beta m_{t-1}+\nabla_{x_j}f\left(x_j-\beta m_{t-1},t\right)\right) x=xϵmt=xϵ(βmt1+xjf(xjβmt1,t))
动量法与NAG参数更新方向的比较如图所示,对于动量法,参数更新方向1由当前步的动量方向和梯度方向1决定。对于NAG,其相较于动量法多了一步前瞻操作,即先对当前步应用动量方向进行参数更新以得到梯度方向2,然后结合动量方向得到参数更新方向2。

image-20240523210021774

AdaGrad

以上方法均使用相同的学习率对所有参数进行更新,但是对于不常见的参数,由于其更新频率低可能导致其无法更新到较好的状态。解决此问题的一个思路是在训练过程中对不同参数的学习率进行动态调整: 对于常见参数,由于其更新频率高从而调低其学习率;对于不常见参数, 由于其更新频率低从而调高其学习率。

可以记录截至第 t t t步参数 x x x被更新的次数 s ( Θ , t ) s(\Theta,t) s(Θ,t),并将其学习率设置为 ϵ = ϵ 0 s ( Θ , t ) + c \epsilon=\frac{\epsilon_0}{\sqrt{s(\Theta,t)+c}} ϵ=s(Θ,t)+c ϵ0其中, ϵ 0 \epsilon_0 ϵ0为设置的初始全局学习率, c c c为一个较小的正数,常设置为 10 − 6 {10}^{-6} 106用于保证数值稳定性,避免分母为零。

AdaGrad (Adaptive Gradient) 算法提出使用梯度的平方和作为 s ( Θ , t ) s(\Theta,t) s(Θ,t)
替换估计,记为 s t : s_t: st:
x ′ = x − ϵ 0 s t + c ∇ x j f ( x j , t ) s t = s t − 1 + ∇ x j f ( x j , t ) 2 \begin{aligned} x^{\prime}&=x-\frac{\epsilon_0}{\sqrt{s_t+c}}\nabla_{x_j}f(x_j,t)\\ s_t&=s_{t-1}+\nabla_{x_j}f\left(x_j,t\right)^2 \end{aligned} xst=xst+c ϵ0xjf(xj,t)=st1+xjf(xj,t)2

AdaGrad也存在一定问题:首先AdaGrad依赖于初始全局学习率 ϵ 0 \epsilon_0 ϵ0,如果初始全局学习率太大,会使得训练初期对梯度的调节太大;此外随着训练次数的迭代,累积的梯度平方和会越来越大,会使得学习率单调递减至0,从而导致训练提前结束。

RMSProp

为解决AdaGrad中存在的梯度累计导致的学习率递减至0的问题 ,RMSProp(Root Mean Square Prop)改用指数移动平均改善学习率动态调整过程:
x ′ = x − ϵ 0 s t + c ∇ x j f ( x j , t ) s t = γ s t − 1 + ( 1 − γ ) ∇ x j f ( x j , t ) 2 \begin{aligned} x^{\prime}&=x-\frac{\epsilon_0}{\sqrt{s_t+c}}\nabla_{x_j}f(x_j,t)\\ s_t&=\gamma s_{t-1}+(1-\gamma)\nabla_{x_j}f\left(x_j,t\right)^2 \end{aligned} xst=xst+c ϵ0xjf(xj,t)=γst1+(1γ)xjf(xj,t)2

其中, γ \gamma γ为指数移动平均的加权系数,且 γ ∈ [ 0 , 1 ] \gamma\in[0,1] γ[0,1]。RMSProp改善了AdaGrad存在的问题,但是仍然需要手动指定初始学习率 ϵ 0 \epsilon_0 ϵ0

ADADELTA

ADADELTA是AdaGrad的另一种变体,同时使用了两个状态变量, s t s_t st与RMSProp一样用于存储梯度平方和(二阶动量)的指数移动平均值, Δ x t \Delta x_t Δxt​ 用于存储模型本身参数更新变量平方和的指数移动平均值。

其中
x ′ = x − Δ x t − 1 + c s t + c ∇ x j f ( x j , t ) s t = γ s t − 1 + ( 1 − γ ) ∇ x j f ( x j , t ) 2 Δ x t − 1 = γ Δ x t − 2 + ( 1 − γ ) g t − 1 2 g t − 1 = Δ x t − 2 + c s t − 1 + c ∇ x j f ( x j , t − 1 ) \begin{aligned} x^{\prime}&=x-\frac{\sqrt{\Delta x_{t-1}+c}}{\sqrt{s_t+c}}\nabla_{x_j}f(x_j,t)\\ s_t&=\gamma s_{t-1}+(1-\gamma)\nabla_{x_j}f(x_j,t)^2\\ \Delta x_{t-1}&=\gamma\Delta x_{t-2}+(1-\gamma)g_{t-1}^2\\ g_{t-1}&=\frac{\sqrt{\Delta x_{t-2}+c}}{\sqrt{s_{t-1}+c}}\nabla_{x_j}f(x_j,t-1) \end{aligned} xstΔxt1gt1=xst+c Δxt1+c xjf(xj,t)=γst1+(1γ)xjf(xj,t)2=γΔxt2+(1γ)gt12=st1+c Δxt2+c xjf(xj,t1)
从上式可看出,ADADELTA无需人工指定学习率。

ADAM

动量法在SGD的基础上引入了一阶动量,AdaGrad、RMSProp和ADADELTA则引入了二阶动量。ADAM (Adaptive Moment)则同时利用了梯度的一阶动量和二阶动量,其参数更新公式如下:
x ′ = x − ϵ m ^ t s ^ t + c m t = β 1 m t − 1 + ( 1 − β 1 ) ∇ x j f ( x j , t ) , m ^ t = m t 1 − β 1 t s t = β 2 s t − 1 + ( 1 − β 2 ) ∇ x j f ( x j , t ) 2 , s ^ t = s t 1 − β 2 t \begin{aligned} x^{\prime}&=x-\epsilon\frac{\widehat{m}_t}{\sqrt{\hat{s}_t}+c}\\ m_t&=\beta_1m_{t-1}+(1-\beta_1)\nabla_{x_j}f(x_j,t),\quad\widehat{m}_t=\frac{m_t}{1-\beta_1^t}\\ s_t&=\beta_2s_{t-1}+(1-\beta_2)\nabla_{x_j}f\left(x_j,t\right)^2,\quad\hat{s}_t=\frac{s_t}{1-\beta_2^t} \end{aligned} xmtst=xϵs^t +cm t=β1mt1+(1β1)xjf(xj,t),m t=1β1tmt=β2st1+(1β2)xjf(xj,t)2,s^t=1β2tst
其中, β 1 \beta_{1} β1 β 2 \beta_{2} β2 为非负超参数,默认设置 β 1 = 0.9 , β 2 = 0.999 \beta_{1}=0.9 ,\beta_{2}=0.999 β1=0.9,β2=0.999 m t m_{t} mt s t s_{t} st为参数梯度的一阶动量和二阶动量的指数移动平均值,即对参数梯度的一阶动量期望和二阶动量期望的估计。

但是由于初始值 m 0 m_{0} m0 s 0 s_{0} s0设置为0 ,当 t t t较小时存在较大的初始偏差,从而估计值并不准确。例如,当 β 1 = 0.9 \beta_{1}=0.9 β1=0.9 m 1 = 0.1 ∇ x j f ( x j , 1 ) m_{1}=0.1\nabla_{x_{j}} f\left(x_{j}, 1\right) m1=0.1xjf(xj,1) 。为消除这样的影响,研究人员提出使用 m t m_{t} mt s t s_{t} st的偏差修正值 m ^ t \widehat{m}_{t} m t s ^ t \hat{s}_{t} s^t对参数进行更新。

NADAM

NADAM (Nesterov ADAM) 在ADAM的基础上引入了NAG的思想,引入 “未来时刻”的梯度,首先将ADAM中的 m ^ t \widehat{m}_t m t展开,参数更新公式:
x ′ = x − ϵ 1 s ^ t + c ( β 1 m t − 1 1 − β 1 t + ( 1 − β 1 ) ∇ x j f ( x j , t ) 1 − β 1 t ) x^{\prime}=x-\epsilon\frac1{\sqrt{\hat{s}_t}+c}\left(\frac{\beta_1m_{t-1}}{1-\beta_1^t}+\frac{(1-\beta_1)\nabla_{x_j}f(x_j,t)}{1-\beta_1^t}\right) x=xϵs^t +c1(1β1tβ1mt1+1β1t(1β1)xjf(xj,t))
NADAM则是将其中的一阶动量 m t − 1 m_t-1 mt1替换为 m t m_t mt(前瞻计算):

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

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

相关文章

Postman快捷功能-快速填写请求头

大家好,之前给大家分享关于 Postman 工具的基础使用,今天给大家介绍一个快捷功能,可以一定程度提高我们使用 Postman 工具的效率,在我们进行接口测试时,几乎每个接口都需要填写 Headers,且 Headers 中的参数…

代理模式的种类和它们之间区别?

静态代理 这种代理方式需要代理对象和目标对象实现一样的接口。 优点:可以在不修改目标对象的前提下扩展目标对象的功能。 缺点: 1.冗余。由于代理对象要实现与目标对象一致的接口,会产生过多的代理类。 2. 不易维护。一旦接口增加方法,目标…

桂林电子科技大学计算机工程学院、广西北部湾大学计信学院莅临泰迪智能科技参观交流

5月18日,桂林电子科技大学计算机工程学院副院长刘利民、副书记杨美娜、毕业班辅导员黄秀娟、广西北部湾大学计信学院院长助理刘秀平莅临广东泰迪智能科技股份有限公司产教融合实训基地参观交流。泰迪智能科技副总经理施兴、广西分公司郑廷和、梁霜、培训业务部孙学镂…

Mysql8.0离线安装 centos

Mysql8.0离线安装 centos 上传mysql安装包并解压 tar xvf mysql-8.0.37-1.el7.x86_64.rpm-bundle.tar运行安装对应的rpm包,按照一下顺序 rpm -ivh mysql-community-common-8.0.37-1.el7.x86_64.rpm rpm -ivh mysql-community-client-plugins-8.0.37-1.el7.x86_64.rp…

班组管理新篇章:打造高效沟通机制,助推团队协同发展

班组作为组织的基本单位,其沟通的顺畅与否直接关系到整个组织的运行效率和团队的凝聚力。建立健全的班组管理沟通机制,不仅是提升工作效率的关键,更是推动团队持续发展的核心动力。那么,如何建立健全的班组管理沟通机制呢&#xf…

LeetCode题练习与总结:从前序与中序遍历序列构造二叉树--105

一、题目描述 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,nul…

一图看懂 | 蓝卓医化行业解决方案

随着“创新药”首次出现在政府工作报告中,医药工业各个细分赛道都迎来了关键突破期,其中化学药品制剂作为所有药品中数量、品种最多的类别,也是居民日常生活中使用最广泛的类别,推动医药化工行业数字化能力,对于发展新…

解决docker中container运行闪退终止的问题

在运行bindmount-test时,点击完运行按钮后闪退结束运行。 第一步查看log日志: 2024-05-18 23:46:18 Error: Cannot find module /app/nodemon 2024-05-18 23:46:18 at Function.Module._resolveFilename (internal/modules/cjs/loader.js:668:15) …

pip如何快速install packet

1、在后面加-i https://mirrors.aliyun.com//pypi//simple或https://pypi.tuna.tsinghua.edu.cn/simple pip install numpy -i https://mirrors.aliyun.com//pypi//simplepip install numpy1.21.0 -i https://pypi.tuna.tsinghua.edu.cn/simple2、需要注意的是,如果…

k8s 声明式资源管理

一、资源配置清单的管理 1.1 查看资源配置清单 声明式管理方法: 1.适合于对资源的修改操作 2.声明式资源管理方法依赖于资源配置清单文件对资源进行管理 资源配置清单文件有两种格式:yaml(人性化,易读),j…

实例展示vue单元测试及难题解惑

通过生动详实的例子带你排遍vue单元测试过程中的所有疑惑与难题。 技术栈:jest、vue-test-utils。 共四个部分:运行时、Mock、Stub、Configuring和CLI。 运行时 在跑测试用例时,大家的第一个绊脚石肯定是各种undifned报错。 解决这些报错…

精品干货-阿里巴巴华为等知名大厂数据中台最佳实践方案合集(52份可下载)

【1】关注本公众号 【1】私信发送 数据中台52 获取下载链接。 如需下载本方案PPT/WORD原格式,请加入微信扫描以下方案驿站知识星球,获取上万份PPT/WORD解决方案!!!感谢支持!!!

[STM32-HAL库]0.96寸OLED显示屏-模拟IIC-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C8T6

目录 一、前言 二、详细步骤 1.配置STM32CUBEMX 2.导入OLED库 3.程序设计 3.1 初始化OLED显示屏 3.2 显示字符串 3.3 显示汉字 三、汉字取模 四、总结 一、前言 OLED显示屏是一种十分常见的显示模块,通过用它作为采集到的传感器数据的展示模块。本文通过STM32CU…

每日一题——Python实现PAT甲级1028 List Sorting(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 ​编辑​编辑​编辑我的写法: 代码点评 代码点评: 时间复杂…

EasyExcel的CellWriteHandler注入CellStyle不生效

文章目录 一、问题描述二、问题排查三、解决问题 一、问题描述 最近发现原本项目的导出excel功能中,写的那些 CellWriteHandler 去改变样式的代码全都不生效了 二、问题排查 由于代码都是没有改动的,加上最近有升级过 easyExcel 的版本,由…

js实现鼠标拖拽多选功能

实现功能 在PC端的H5页面中&#xff0c;客户拖动鼠标可以连选多个选项 效果展示 具体代码如下 <!DOCTYPE html> <html><head><title>鼠标拖拽多选功能</title><script src"https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js&quo…

ArcGIS基础操作-ArcGIS插值交叉验证方法与流程

ArcGIS基础操作-ArcGIS插值交叉验证方法与流程 交叉验证(Cross-validation)主要用于建模应用中&#xff0c;例如PCR、PLS回归建模中。在给定的建模样本中&#xff0c;拿出大部分样本进行建模型&#xff0c;留小部分样本用刚建立的模型进行预报&#xff0c;并求这小部分样本的预…

自己手写一个字符串【C风格】

//字符串的常见操作 #include <iostream>#define MAX_SIZE 15 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status;//状态类型 typedef char ElemType;//元素类型typedef ElemType String[MAX_SIZE 1];//第一个字节记录长度//***tring是数…

华为设备WLAN配置之AP上线

WLAN基础配置之AP上线 配置WLAN无线网络的第一阶段&#xff0c;AP上线技术&#xff1a; 实验目标&#xff1a;使得AP能够获得来自AC的DHCP地址服务的地址&#xff0c;且是该网段地址池中的IP。 实验步骤&#xff1a; 1.把AC当作三层交换机配置虚拟网关 sys Enter system view,…

2024年艺术鉴赏与文化传播国际会议(AACC 2024)

2024年艺术鉴赏与文化传播国际会议&#xff08;AACC 2024&#xff09; 2024 International Conference on Art Appreciation and Cultural Communication 【重要信息】 大会地点&#xff1a;贵阳 大会官网&#xff1a;http://www.icaacc.com 投稿邮箱&#xff1a;icaaccsub-co…