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

神经网络中的优化方法

神经网络中的优化方法

  • 前言
  • 梯度下降法
    • 方法介绍
    • 方法优缺点
      • 优点
      • 缺点
  • 动量法
    • 方法介绍
    • 优缺点
      • 优点
      • 缺点
  • Adagrad
    • 方法介绍
    • 优缺点
      • 优点
      • 缺点
  • RMSProp
  • Adam
    • 方法介绍
    • 优缺点
      • 优点
      • 缺点
  • AdamW
  • 总结

前言

在之前的文章中介绍了神经网络中的损失函数。有了损失函数之后,就要求损失函数的最小值,并且需要求出参数(这个参数可能是神经网络中的 W W W b b b)在取什么值时,损失函数才能取到最小值。那么这个就是优化方法做的事情。这篇文章就来介绍一下神经网络中的优化方法。

梯度下降法

方法介绍

梯度下降法是一个非常简单的优化方法,也是后面要介绍的其它优化方法的基础。梯度下降法奠定了后来优化方法的基础,可以说,后面的大多数优化方法本质上都是在梯度下降法上进行修改得到的。

假设 g g g是我们求得的梯度(可能是一维的,也可能是高维的,取决于参数个数), η \eta η是我们人为设置的学习率(是一个超参数), θ \theta θ是我们需要更新的参数(不一定是一个参数,可能是多个参数组成的向量)。

梯度下降法的公式为 θ = θ − η ⋅ g \theta=\theta-\eta\cdot g θ=θηg

这个公式其实也很好理解,就是一个不断迭代的过程,不断往梯度下降的方向走,直到走到梯度为0的点,也就是最小值点。

方法优缺点

优点

算法简洁,在学习率取值恰当时,可以收敛到全局最优点(凸函数)或局部最优点(非凸函数)。

缺点

对超参数比较敏感,过小导致收敛速度过慢,过大又会越过极值点。

学习率除了敏感,有时还会因其在迭代过程中保持不变,很容易造成算法卡在鞍点的位置。

在较平坦的区域,由于梯度接近于0,优化算法会因误判,在还未到达极值点时,就提前结束迭代,陷入局部最小值。

动量法

方法介绍

动量法又称Momentum。

公式为 { v = α v + ( 1 − α ) g θ = θ − η ⋅ v \begin{cases} v=\alpha v+(1-\alpha)g\\ \theta=\theta-\eta\cdot v \end{cases} {v=αv+(1α)gθ=θηv

其中 α \alpha α表示动量参数, v v v表示累计梯度。跟梯度下降法相比,这里用 v v v代替了 g g g g g g仅仅表示当前这一点处的梯度,而 v v v表示了之前所有梯度的加权平均,而且迭代次数越靠后,其权重越高。这里的 v v v也可以看成动量,与经典物理学中的动量是一致的,就像从山上投出一个球,在下落过程中收集动量,小球的速度不断增加。

优缺点

优点

能帮助参数在正确的方向上加速前进,从而加速收敛。

由于动量具有惯性,所以可以跳出局部最小值。

更具有鲁棒性,使我们的训练过程更加稳定。

缺点

动量法的效果受动量因子和学习率等参数的影响较大。这些参数的选择需要一定的经验和调试,不当的参数设置可能导致算法性能下降。

Adagrad

方法介绍

Adagrad优化算法被称为自适应学习率优化算法。核心思想是为每个参数维护一个独立的学习率,并根据历史梯度信息动态调整学习率。跟其它方法的主要区别在于学习率并不是一个人为设置的定值,而是可以根据实际情况自动实时调整的。

公式为 { r = r + g 2 θ = θ − η r + δ ⋅ g \begin{cases} r=r+g^2\\ \theta=\theta-\frac{\eta}{\sqrt{r+\delta}}\cdot g \end{cases} {r=r+g2θ=θr+δ ηg

其中 δ \delta δ为小参数,避免分母为0,一般取值为 1 0 − 10 10^{-10} 1010

Adagrad的核心想法就是,如果一个参数的梯度一直都非常大,那么其对应的学习率就小一点,防止震荡;而一个参数的梯度一直都非常小,那么这个参数的学习率就大一点,使得其能够更快地更新。这就是Adagrad算法加快深层神经网络训练速度的核心。

优缺点

优点

自适应学习率使得不需要手动调整学习率。

更适合处理稀疏数据。由于稀疏特征在数据集中出现频率低,其梯度值往往较小。在Adagrad算法中,这些特征对应的学习率不会因为梯度小而迅速减小,反而能够保持相对较大的学习率,从而得到更多的更新机会。这对于模型捕捉稀疏特征的信息非常有利。

缺点

学习率 η \eta η总是在降低和衰减,使得后期学习率太低导致模型完全停止学习。

RMSProp

RMSProp的全称是Root Mean Square Propagation,均方根传播。该方法在Adagrad的基础上,进一步在学习率的方向上优化。

公式为 { r = λ r + ( 1 − λ ) g 2 θ = θ − η r + δ ⋅ g \begin{cases} r=\lambda r+(1-\lambda )g^2\\ \theta=\theta-\frac{\eta}{\sqrt{r+\delta}}\cdot g \end{cases} {r=λr+(1λ)g2θ=θr+δ ηg

其中, λ \lambda λ为衰减系数, r r r为累计平方梯度。

衰减系数的引入克服了Adagrad方法中, r r r一直增大的缺点。

Adam

方法介绍

Adam算法即自适应时刻估计方法(Adaptive Moment Estimation)。Adam继承了上面方法的优点,同时又规避了很多缺点,是目前神经网络中使用最广泛的优化方法。

公式为 { v = β 1 v + ( 1 − β 1 ) g r = β 2 r + ( 1 − β 2 ) g 2 v ^ = v 1 − β 1 t r ^ = r 1 − β 2 t θ = θ − η r ^ + δ ⋅ v ^ \begin{cases} v=\beta_1 v+(1-\beta_1)g\\ r=\beta_2 r+(1-\beta_2 )g^2\\ \widehat{v}=\frac{v}{1-\beta_1^t}\\ \widehat{r}=\frac{r}{1-\beta_2^t}\\ \theta=\theta-\frac{\eta}{\sqrt{\widehat{r}+\delta}}\cdot \widehat{v} \end{cases} v=β1v+(1β1)gr=β2r+(1β2)g2v =1β1tvr =1β2trθ=θr +δ ηv

可以在这里面看到许多其它方法的影子。第一行公式来源于动量法,第二行公式来源于RMSProp,第五行公式来源于梯度下降法。

第三行和第四行公式是修正公式,在这里进行一个简单的说明。这里的 t t t代表迭代次数。由于一开始设置的 v v v r r r都是0,所以在开始的时候, v v v r r r为了能更好地代表加权平均值,使得系数和为1,就需要做一个这样的处理。当迭代轮数增大时,这两个公式的分母趋近于1,就可以忽略不计了。

优缺点

优点

在实际应用中,Adam方法效果良好。与其他自适应学习率算法相比,其收敛速度更快,学习效果更为有效,而且可以纠正其他优化技术中存在的问题,如学习率消失、收敛过慢或是高方差的参数更新导致损失函数波动较大等问题。

缺点

虽然避免了手动调整学习率,但是又引入了动量参数 β 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,但在有些情况下,这可能不是最好的选择。

AdamW

AdamW就是在Adam的基础上加上了权重衰减(Weight Decay)。

公式为 { v = β 1 v + ( 1 − β 1 ) g r = β 2 r + ( 1 − β 2 ) g 2 v ^ = v 1 − β 1 t r ^ = r 1 − β 2 t θ = θ − η r ^ + δ ⋅ v ^ − r λ θ \begin{cases} v=\beta_1 v+(1-\beta_1)g\\ r=\beta_2 r+(1-\beta_2 )g^2\\ \widehat{v}=\frac{v}{1-\beta_1^t}\\ \widehat{r}=\frac{r}{1-\beta_2^t}\\ \theta=\theta-\frac{\eta}{\sqrt{\widehat{r}+\delta}}\cdot \widehat{v}-r\lambda\theta \end{cases} v=β1v+(1β1)gr=β2r+(1β2)g2v =1β1tvr =1β2trθ=θr +δ ηv rλθ

该方法引入了超参数 λ \lambda λ。权重衰减的思想是每次更新参数后都对参数减去一个很小的值,防止参数过大,提高模型的泛化性。大名鼎鼎的BERT模型使用的优化方法就是AdamW。

总结

以上几种方法之间其实有一定的继承性,其关系由下图体现。
优化器

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 网络编程复习
  • 服务器模式
  • 【C++】-----多态及原理
  • 相机标定——小孔成像、相机模型与坐标系
  • 《数据结构(C语言版)第二版》第五章-树和二叉树(5.7 哈夫曼树及其应用)
  • 【AI学习】[2024北京智源大会]具身智能:具身智能关键技术研究:操纵、决策、导航
  • kafka 3.x 配置kerbos
  • 赋能未来园区:TSINGSEE视频AI智能管理平台如何引领园区管理智慧化转型
  • java selenium 设置代理,允许在其他环境中使用不同的IP访问
  • 分类预测 | Matlab实现PSO-XGBoost粒子群算法优化XGBoost的多特征分类预测
  • C# 方法的定义
  • JavaScript -- 总结 9 (小白)
  • k8s使用kustomize来部署应用
  • 排序算法1:堆排序,直接插入排序与希尔排序
  • System Verilog--$scanf应用举例
  • python3.6+scrapy+mysql 爬虫实战
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Angular Elements 及其运作原理
  • C# 免费离线人脸识别 2.0 Demo
  • JS基础之数据类型、对象、原型、原型链、继承
  • Laravel Telescope:优雅的应用调试工具
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue-router 实现分析
  • yii2权限控制rbac之rule详细讲解
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 给初学者:JavaScript 中数组操作注意点
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 开源SQL-on-Hadoop系统一览
  • 码农张的Bug人生 - 初来乍到
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 如何设计一个比特币钱包服务
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 译有关态射的一切
  • ​【已解决】npm install​卡主不动的情况
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • # wps必须要登录激活才能使用吗?
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (160)时序收敛--->(10)时序收敛十
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (二)学习JVM —— 垃圾回收机制
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (十六)一篇文章学会Java的常用API
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)linux 命令大全
  • (转)关于pipe()的详细解析
  • (转载)虚函数剖析
  • (自用)网络编程
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)