11 优化器

目录

1. 随机梯度下降系优化器:SGD

1.1 算法种类

1.2 优缺点 

2 SGDM 即为SGD with momentum 动量

2.1 公式

2.2 动量的优缺点

优点

缺点

2.3 使用场景

 3 AdaGrad

3.1 公式

3.2 AdaGrad的优缺点

优点

缺点

3.3 使用场景

3.4 Adam

3.4.1 Adam优化器的公式

3.4.2 Adam优化器的优缺点

优点

缺点

3.4.3 使用场景

4  怎么选择优化器


        昨天在计算大模型微调占用内存,然后看到优化器Adam占用两倍的模型参数(一阶矩、二阶矩),仔细思考没想明白,今天把优化器的内容补充下;

        优化器在机器学习和深度学习中扮演着至关重要的角色,它们负责更新模型的参数以最小化损失函数。优化器基于训练数据和模型预测的误差,调整模型参数,使模型更好地拟合数据。

1. 随机梯度下降系优化器:SGD

        SGD全称Stochastic Gradient Descent,随机梯度下降,1847年提出。每次选择一个mini-batch,而不是全部样本,使用梯度下降来更新模型参数。它解决了随机小批量样本的问题,但仍然有自适应学习率、容易卡在梯度较小点等问题。

核心思量:就是每次随机挑一个或者一组(mini-batch)数据来优化神经网络的参数。有大佬证明过,这种方式可以近似地等价于原始的梯度下降法。采用SGD的好处就是可以在保证精度的同时降低计算量,让神经网络可以应用于更大规模的数据上。

假设我们有参数向量 𝜃,损失函数为 𝐿,学习率为 𝜂(eta),并且 𝜃𝑗是参数向量中的第 𝑗个元素。SGD更新规则可以表示为:

其中:

  • 𝜃𝑗是参数向量 𝜃 中的第 𝑗个参数。
  • 𝜂 是学习率,控制更新步长的大小。这个是超参数,需要预先设定的,一般小于1;
  • ∇𝜃𝐿(𝜃;𝑥𝑖,𝑦𝑖) 是损失函数 𝐿关于参数 𝜃 的梯度,该梯度是在样本 (𝑥𝑖,𝑦𝑖)上计算的。

1.1 算法种类

1.SGD是最基本的随机梯度下降,它是指每次参数更新只使用一个样本,这样可能导致更新较慢。

2.Batch-SGD是批随机梯度下降,它是指每次参数更新使用所有样本,即把所有样本都代入计算一遍,然后取它们的参数更新均值,来对参数进行一次性更新,这种更新方式较为粗糙;需要更多的内存。

3.Mini-Batch-SGD是小批量随机梯度下降,它是指每次参数更新使用一小批样本,这批样本的数量通常可以采用trial-and-error的方法来确定,这种方法被证明可以有效加快训练速度。

1.2 优缺点 

  • 优点:计算效率高,容易跳出局部最小值。
  • 缺点:由于每次迭代只使用一小部分数据,更新方向可能不稳定。当遇到局部最优点或鞍点时,梯度为0,无法继续更新参数;

2 SGDM 即为SGD with momentum 动量

  • 原理:动量优化器在SGD的基础上增加了一个动量项,使得更新过程更加平滑,减少震荡,加速收敛。

  • 优点:有助于更快地收敛到最优解,特别是在非凸或噪声较大的损失函数中。

提出背景:SGD可能会在垂直方向上产生大幅度的振荡,这会导致训练过程变得非常慢,因为模型需要花费很多迭代来克服这些振荡。此外,在鞍点附近,SGD也可能会陷入停滞,这是因为梯度可能非常小。

思想:来源于物理学中的惯性原理,即物体倾向于保持其运动状态不变。在优化算法中,动量有助于平滑参数更新,减少振荡,加快收敛速度,并帮助模型更快地穿过鞍点。

2.1 公式

        动量始终使用的是梯度的信息,只不过在更新参数的时候,不仅使用了当前的梯度,同时前一步的梯度也参与了计算。

训练过程中模型内存使用: 模型参数P+梯度P+动量参数P

        设 𝑣𝑡 是动量项,𝛾 是动量系数(通常设置为0.9),𝜂是学习率,∇𝜃𝐿(𝜃)是损失函数关于参数 𝜃θ 的梯度。动量更新规则如下:

其中:

  • 𝑣𝑡​ 是在时间步 𝑡的动量项(梯度的变种),它是一个累积梯度的加权和。
  • 𝛾 是介于0和1之间的动量系数,决定了前一次梯度的影响程度。
  • 𝜂是学习率,控制参数更新的幅度。
  • ∇𝜃𝐿(𝜃) 是在当前参数 𝜃 下损失函数的梯度。

2.2 动量的优缺点

优点
  • 加速收敛:动量有助于加速在平坦区域的收敛,因为一旦算法确定了正确的方向,它就会沿该方向持续前进,减少在垂直方向上的振荡。
  • 改善稳定性:在训练过程中,动量可以平滑更新过程,减少因随机梯度造成的波动。
  • 逃逸鞍点:动量有助于模型更快地逃离鞍点,因为即使在梯度很小的地方,动量也能推动参数更新。
缺点
  • 可能过冲:如果动量设置得过高,算法可能会在最小值附近过冲,导致模型在最小值附近振荡,不能稳定收敛。
  • 动态调整困难:动量系数和学习率的选择可能需要通过实验来确定,而且可能需要随训练过程进行调整,这增加了训练的复杂性。

2.3 使用场景

  • 当训练数据集很大时,SGD的随机性可能会导致更新方向不稳定,动量可以帮助平滑这个过程。
  • 当损失函数表面具有许多局部最小值或鞍点时,动量可以帮助模型更快地穿越这些区域。
  • 在深度学习中,特别是在训练深度神经网络时,动量常被用来加速收敛和提高稳定性。

 3 AdaGrad

        AdaGrad(Adaptive Gradient)算法是为了解决传统随机梯度下降(SGD)在优化过程中的一些局限性而提出的。在SGD中,所有参数都共享同一个全局学习率,这意味着无论参数的特性如何,它们的更新步长都是一样的。然而,在实践中,不同的参数可能需要不同的更新步长来更有效地收敛。例如,一些参数可能需要更小的步长以避免在最小值附近振荡,而另一些参数可能需要更大的步长来加速收敛。

        AdaGrad的提出正是为了适应不同参数的特性,通过为每个参数分配一个自适应的学习率,从而在优化过程中自动调整每个参数的更新步长。这样,AdaGrad能够在处理稀疏数据时表现得更为优秀,因为在稀疏数据中,某些参数可能很少更新,而AdaGrad可以为这些参数提供较大的学习率,以确保它们能够及时地进行有效的更新。

  • 原理:AdaGrad为每个参数维护一个历史梯度的累积平方和,然后基于这个累积和动态调整学习率。
  • 优点:自适应学习率,对稀疏数据有效。
  • 缺点:历史梯度的累积可能导致学习率过快衰减。

3.1 公式

g_{i,j}^2是参数 𝜃𝑗​ 在时间步 𝑡的梯度平方,𝐺𝑡,𝑗 是从开始到时间步 𝑡 所有梯度平方的累加和,𝛼 是初始学习率,𝜖 是一个很小的正数(为了防止除数为零)。

在时间步 𝑡,AdaGrad的更新公式为:梯度越大迭代的步长越小;

在AdaGrad中,如果某个参数的历史梯度平方累积和 G_{i,j}较大,意味着该参数在过去的迭代中收到的梯度较大或较多,那么在接下来的迭代中,该参数的学习率会相应减小,即 \frac{\alpha }{\sqrt{G_{i,j}+\varepsilon }}​ 减小。因此,虽然单次梯度 𝑔𝑡,𝑗可能很大,但由于学习率的减小,实际的更新步长可能并不会很大。

3.2 AdaGrad的优缺点

优点
  • 自适应学习率:AdaGrad为每个参数提供自适应的学习率,这使得它在处理稀疏数据时特别有效。
  • 处理稀疏特征:对于在训练过程中很少更新的参数,AdaGrad能够给予较大的学习率,帮助它们更快地收敛。
缺点
  • 学习率衰减过快:AdaGrad的学习率会随着训练的进行而单调递减,这可能导致学习率过早地变得太小,从而阻碍模型的进一步改进。
  • 存储成本:AdaGrad需要为每个参数存储一个梯度平方的累加和,这会增加内存的使用。

3.3 使用场景

        AdaGrad非常适合于处理稀疏数据和具有大量零值或极少更新的特征的情况。例如,在自然语言处理(NLP)任务中,词嵌入矩阵往往非常稀疏,AdaGrad能够为不常见的词提供更大的学习率,有助于它们更快地学习到有意义的表示。

        在深度学习中,AdaGrad可能不是最优选择,特别是在需要长时间训练的模型中,因为它的学习率衰减问题可能会导致训练后期的收敛速度变慢。然而,对于那些数据集较小或特征稀疏的任务,AdaGrad仍然是一个值得考虑的优化算法。在实际应用中,AdaGrad经常被更先进的自适应优化算法如Adam和RMSprop所取代,这些算法在学习率调整方面提供了更好的性能。

3.4 Adam

        Adam优化器(Adaptive Moment Estimation)由Diederik P. Kingma和Jimmy Ba在2014年提出,旨在结合AdaGrad和RMSprop的优点,同时解决它们的一些缺点。AdaGrad能够自适应地调整学习率,但在训练后期学习率会过快衰减;RMSprop通过使用滑动平均来解决AdaGrad的这一问题,但在处理稀疏数据时效果不佳。Adam试图提供一个更全面的解决方案,既能处理非稀疏数据,又能处理稀疏数据,并且能够自适应地调整每个参数的学习率。

3.4.1 Adam优化器的公式

        Adam优化器结合了一阶矩估计(即动量)和二阶矩估计(类似于RMSprop)。它维护了两个滑动平均值,分别是梯度的一阶矩(即梯度的均值)和梯度的二阶矩(即梯度平方的均值)。

        设 𝜃 是参数向量,𝛽1 和 𝛽2是两个超参数,分别用于控制一阶和二阶矩估计的指数衰减率,𝛼 是学习率,𝜖 是一个很小的正数,用于防止除数为零。

        β1​ 的默认值是 0.9,而 𝛽2的默认值是 0.999。

一阶矩估计:(其实就是动量)当前梯度与前面梯度(动量)的加权平均。

一阶矩估计:(学习率调节器)当前梯度平方与前面梯度(动量)平方的加权平均。

  • 一阶矩的偏差校正\beta_1^t是 𝛽1 的 𝑡次幂,它表示了从算法开始到当前时间步 𝑡的所有历史一阶矩估计的衰减累积效应。在初始迭代时,这个值接近于0,但随着迭代次数增加,它会逐渐接近1。通过除以 1-\beta_1^t,偏差校正确保了 m_t的估计更加准确,尤其是在迭代开始时。

  • 二阶矩的偏差校正:类似的,\beta_2^t是 𝛽2​ 的 𝑡 次幂,它表示了所有历史二阶矩估计的衰减累积效应。由于 𝛽2​ 通常设置得更接近于1(如0.999),它的 𝑡次幂在迭代初期会非常小,导致 \bar{v}_t的值在开始时可能很大。偏差校正通过除以1-\beta_2^t 来调整这个估计,确保它更接近于真实值。

3.4.2 Adam优化器的优缺点

优点
  • 自适应学习率:为每个参数提供自适应的学习率,能够处理稀疏和非稀疏数据。
  • 快速收敛:在实践中,Adam通常能够比传统的SGD更快地收敛。
  • 简单易用:相比其他自适应优化算法,Adam的超参数设置较为直观,且通常不需要大量的调参即可获得良好效果。
  • 鲁棒性强:Adam对学习率的选择相对不敏感,且在不同的任务和模型上表现出较好的泛化能力。
缺点
  • 可能在非凸问题中收敛到次优解:虽然Adam在许多任务中表现良好,但在某些非凸优化问题中,它可能无法找到全局最优解。
  • 偏差校正:虽然Adam通过偏差校正来减轻初始迭代时的偏差问题,但这种校正可能在某些情况下引入额外的复杂性。

3.4.3 使用场景

        Adam优化器因其优秀的性能和广泛的适用性,已经成为深度学习中最为流行的优化算法之一。它在各种场景下都能提供良好的优化效果,包括但不限于:

  • 计算机视觉:在图像识别、目标检测和图像生成等任务中。
  • 自然语言处理:在文本分类、机器翻译和文本生成等领域。
  • 推荐系统:在个性化推荐和广告投放的模型训练中。
  • 强化学习:在智能体的学习和决策制定中。

总的来说,Adam优化器因其灵活性和高效性,成为了深度学习模型训练的首选优化算法。

4  怎么选择优化器

        五大优化器其实分为两类,SGD、SGDM,和Adagrad、RMSProp、Adam。使用比较多的是SGDMAdam

        如上所示,SGDM在CV里面应用较多,而Adam则基本横扫NLP、RL、GAN、语音合成等领域。所以我们基本按照所属领域来使用就好了。比如NLP领域,Transformer、BERT这些经典模型均使用的Adam,及其变种AdamW。

        SGDM训练慢,但收敛性更好,训练也更稳定,训练和验证间的gap也较小。而Adam则正好相反。

ref:

https://zhuanlan.zhihu.com/p/208178763

 

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

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

相关文章

计算机网络01

文章目录 浏览器输入URL后发生了什么?Linux 系统是如何收发网络包的?Linux 网络协议栈Linux 接收网络包的流程Linux 发送网络包的流程 浏览器输入URL后发生了什么? URL解析 当在浏览器中输入URL后,浏览器首先对拿到的URL进行识别…

2024最全RabbitMQ集群方案汇总

之前在网上找rabbitmq集群方案有哪几种时,基本上看到的答案都不太一样,所以此文的主要目的是梳理一下rabbitmq集群方案,对rabbitmq集群方案的笔记并不是搭建的笔记。 总结了一些文章,rabbitmq集群大概有五种方案:普通…

[Linux安全运维] iptables包过滤

前言 防火墙是网络安全中非常重要的设备,是一种将内部网络和外部网络隔离开的技术。简单来说,防火墙技术就是访问控制技术,由规则和动作组成。 1. Linux 包过滤防火墙 1 .1 概述 iptables: 指的是管理Linux防火墙的命令程序&a…

Windows 下后台启动 jar 包,UTF-8 启动 jar 包_windows启动jar

转自:https://blog.csdn.net/2401_83817971/article/details/137514739 本文介绍了如何使用javaw.exe后台启动Javajar包,如何在Windows中管理和设置cmd编码,以及与Python开发相关的学习资源。包括UTF-8编码启动jar包的方法和Windows下关闭后台服务的技…

superset 不显示mysql的选项问题

superset不显示mysql的选项 数据库驱动未安装:确保你已经安装了Python的MySQL数据库驱动,比如mysqlclient。 pip install mysqlclient

vue一些npm i 时报错问题解决【JAVA前后端分离】

前端vue npm i 安装时出现 作为一个懂些前端得 JAVA开发自然是要粗暴解决这个问题了 问题解决 使用命令 npx -p npm6 npm i 即可编译 原因: ERESOLVE与npm版本有关,因为npm版本高对某些事情比npm6.x更严格。通常,最简单的解决方法是将--…

【机器学习基础】机器学习概述与实践基础

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,…

STC12C5A60S2单片机输出pwm的方法

所谓的pwm输出就是让单片机在某个管脚上按照时间输出特定频率和占空比的矩形方波。这里面有两个参数,一是频率,二是占空比。两者互不干涉。以STC12C5A60S2为例子,本51型单片机可以有两路pwm输出。以其中的一路为例说明; 首先说频…

Teltonika FMXXX系列定位器解析说明

1.产品外观 2.数据包说明 2.1.登录包 **模块第一次上线,先发送其对应的IMEI号,数据包如下:** 000F313233343536373839303132333435**数据包解析如下:** 000F --packet starts 313233343536373839303132333435 --IMEI 1234567890…

区块链软硬件协同,做产业数字化转型的“安全官” |《超话区块链》直播预告

今年的两会政府工作报告提出:“产业的数字化(行业数字化转型)是发展新质生产力的核心,是推动产业升级实现高质量发展的关键。”全面推进产业数字化,需要技术创新与产业应用深入协同;立足可持续发展的长远目…

泰迪智能科技入选广东省2024年第三批职业技能等级认定社会培训评价组织名单

7月17日,根据《关于公布广东省2023年社会培训评价组织新申请机构进入培育辅导期名单的通知》(粤人社函〔2023〕269号)、《关于公布广东省2023年社会培训评价组织(“产教评”链主培育单位)进入培育辅导期名单的通知》&a…

网络安全是什么?怎么入门网络安全?

一、网络安全的定义 网络安全,简单来说,就是保护网络系统中的硬件、软件以及其中的数据不因偶然或恶意的原因而遭到破坏、更改、泄露,保障系统连续可靠正常地运行,网络服务不中断。 随着信息技术的飞速发展,网络安全的…

docker compose 安装 kafka

一 前置准备 创建 /data/kafkadata /data/zookeeper-1用于保存kafka和zookeeper的配置文件 kafkadata中创建三个文件夹 /kafka1 /kafka2 /kafka3,用于存放三个kafka节点的配置文件 zookeeper-1文件夹中创建 /conf /data /logs /datalog四个文件夹,用于…

IoTDB 入门教程 实战篇④——C#示例(开源)

文章目录 一、前文二、新建C#项目三、NuGet安装四、示例源码五、查询数据六、参考 一、前文 IoTDB入门教程——导读 本文详细阐述了如何通过一个C#项目成功连接到IoTDB时序数据库,进而展示了如何向该数据库高效地写入数据以及执行精确的数据查询操作。 此示例旨在为…

Redis高可用之持久化,以及reids的性能管理

一、redis高可用: 在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365天)99.9% redis的高可用含义更加宽泛,正常服务是指标之一,数据容量的扩展,数据的安全性 在redis中实现高可…

多模态大模型(MM-LLMs)近期概述

《MM-LLMs: Recent Advances in MultiModal Large Language Models》 论文地址:https://arxiv.org/abs/2401.13601 GitHub地址:https://mm-llms.github.io/ 1.介绍 目的:MM-LLMs旨在减少计算费用并提高多模态预训练的效率, 因为从头开始训…

Data Augmentation数据增强

目录 数据增强是什么 为什么数据增强 数组增强分类 有监督数据增强 无监督数据增强 数据增强是什么 数据增强又称数据扩增,是一种通过应用合理且随机的变换(例如图像位移、旋转)来增加训练集多样性的技术。让有限的数据产生等价于更多数…

Jenkins集成JDK、git、gitee、maven逐步实现自动拉取,自动部署,自动启动

1. jenkins集成JDK 成功登录Jenkins后,选择Manage Jenkins,选择Tools 集成JDK 2. jenkins集成git 因为Jenkins自动从git远程仓库拉取代码 首先要在Jenkins所在的linux服务器上安装git yum install -y git然后,实行集成JDK的第一步 配置g…

C#:枚举及位标志周边知识详解(小白入门)

文章目录 枚举为什么要有枚举?枚举的性质设置默认类型和显式设置成员的值 位标志(重要)位标记是什么及作用位标志周边知识HasFlag判断是否有该功能枚举前面加Flags的好处 关于枚举的更多知识using static简化代码获取枚举成员的字面量 枚举 为什么要有枚举? 为了增加代码的…

FlowUs息流作为一款技术驱动的笔记和知识管理平台,其核心功能和技术优势为新媒体行业带来了革命性的工作效率提升

FlowUs息流作为一款技术驱动的笔记和知识管理平台,其核心功能和技术优势为新媒体行业带来了革命性的工作效率提升。以下是对其技术特色的深入解析: 本地化技术优化:FlowUs息流通过深入研究中文用户的操作习惯,实现了界面的本地化设…