SGD,Momentum,AdaGrad,RMSProp,Adam等优化算法发展历程

2024-06-22 06:58

本文主要是介绍SGD,Momentum,AdaGrad,RMSProp,Adam等优化算法发展历程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

各种优化算法层出不穷,看的眼花缭乱,如果不能理清楚其中他们的关系及发展历程,必然会记得很混乱及模糊

       最开始做神经网络的时候大家更新参数的时候都是把所有数据计算一遍,求所以数据的平均梯度再进行参数调节,后来觉得这样太慢了,干脆就计算一条数据就调节一次,这就叫随机梯度下降了(SGD),随机两字的由来是因为每条数据可能调节的方向都不一样,下降的过程会很震荡。

       这都是两个极端,后来就干脆折中一点,MIni batch进行一次调整,就是算出来了一个批次后调整一次,就是批梯度下降了。

       然后可以想象一个石头落下山的时候肯定中间会收到阻力,忽而慢、忽而快,在我们这里就好比如,如果前面的批次都是朝着一个方向进行调整,突然有个异常数据方向完全相反或又差异,岂不是一种干扰,辛辛苦苦调整了半天又回去了,这个时候一个大神就想到了物理里面的动量,模拟石头下山的一个过程,一路顺畅则越下越快,有阻碍则减速,这就是动量下降法(Momentum

  

但是如果都是一路顺畅,会下降的过快,在达到终点的时候可能会溢出,所以又改进了一点产生了牛顿动量法(Nesterov),其核心思想是:注意到 momentum 方法,如果只看 项,那么当前的 θ经过 momentum 的作用会变成 。因此可以把这个位置看做是当前优化的一个”展望”位置。所以,可以在 处求导, 而不是原始的θ。

  


在约束完梯度后,就开始对学习率进行改进了

AdaGrad 对于出现频率较低参数采用较大的α更新;相反,对于出现频率较高的参数采用较小的α更新。

 


随着训练次数的增加会越来越大,到后面会出现学习率为0的问题。为了使学习率下降的慢点,提出了

RMSprop算法 AdaGrad 是学习率除以梯度的平方和开根号,RMs则变为了求梯度平方和的平均数开根号(均方根)

 

前面是对梯度进行调节,后面是对学习率进行约束,把两者相结合就产生了Adam算法了

其中,m_tn_t分别是对梯度的一阶矩估计和二阶矩估计,可以看作对期望E|g_t|E|g_t^2|的估计;\hat{m_t}\hat{n_t}是对m_tn_t的校正,这样可以近似为对期望的无偏估计,为什么要进行这么一个无偏估计呢,求均值,为什么说是无偏估计呢,本身就是一种估计,估计了很多回以后,它本身也有一个分布,对它求均值,就基本上认为是准确的了,所以叫无偏估计。



这篇关于SGD,Momentum,AdaGrad,RMSProp,Adam等优化算法发展历程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083601

相关文章

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

MySQL中like模糊查询的优化方案

《MySQL中like模糊查询的优化方案》在MySQL中,like模糊查询是一种常用的查询方式,但在某些情况下可能会导致性能问题,本文将介绍八种优化MySQL中like模糊查询的方法,需要的朋友可以参... 目录1. 避免以通配符开头的查询2. 使用全文索引(Full-text Index)3. 使用前缀索

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel