优化器,SGD+Momentum;Adagrad;RMSProp;Adam

Optimization

 

随机梯度下降(SGD):

当损失函数在一个方向很敏感在另一个方向不敏感时,会产生上面的问题,红色的点以“Z”字形梯度下降,而不是以最短距离下降;这种情况在高维空间更加普遍。

SGD的另一个问题:损失函数容易卡在局部最优或鞍点(梯度为0)不再更新。在高维空间鞍点更加普遍

 

当模型较大时SGD耗费庞大计算量,添加随机均匀噪声时SGD需要花费大量的时间才能找到极小值。

 

SGD+Momentum:

带动量的SGD,基本思想是:保持一个不随时间变化的速度,并将梯度估计添加到这个速度上,在这个速度方向上前进,而不是随梯度变化方向,给一个摩擦系数作为这个速度的衰减项。

 

这种方法解决了局部极小值和鞍点问题,尽管在局部极小值和鞍点任会有朝预定速度方向步进,且速度会随着时间的速度增加。

 

普通的Momentum更新是先估计当前梯度向量,取其和速度向量的和的方向作为真实参数更新的方向

Nesterov Momentum则相反,先取得速度方向的步进,再估计当前位置的梯度,随后回到原来位置,再根据两者的和作为真实参数更新的方向。在凸优化问题有良好表现

 Nesterov Momentum不会剧烈的越过局部最小值

 

 

 AdaGrad:

 在优化过程中,需要保持一个在训练过程中的每一步的梯度的平方和的持续估计;与速度项不同,梯度平方项在训练时,会一直累加当前梯度的平方到这个梯度平方项,在更新参数向量时,会除以这个梯度平方项。

 

 当一个维度上的梯度更新很小时会除以很小的平方项,梯度很大时则会除以很大的平方项;在一个维度上(梯度下降很慢的)训练会加快,在另一个维度方向上训练减慢;让各个参数得到相同程度的收敛。

随着时间的推移,梯度更新的步长会越来越小(梯度平方项随时间单调递增);在学习目标是一个凸函数的情况下,效果很好,到达极值点,步长越来越小最终收敛;非凸函数则会变得复杂

 

 

 RMSProp:

 不仅加上平方项,并让平方梯度按照一定比率下降,然后用1减去衰减了乘以梯度平方加上之前的结果。

随着训练的进行,步长会有一个良好的性质,与AdaGrad类似在一个维度上(梯度下降很慢的)训练会加快,在另一个维度方向上训练减慢,RMSProp让梯度平方衰减了,可能会造成训练一直在变慢。

 

 RMSProp会慢慢调整梯度更新方向,SGD效果不好,SGD+Momentum会先绕过极小值再朝极小值方向前进,AdaGrad在较小学习率时可能会卡住。(凸优化问题)

 

 

 Adam:

更新第一动量(类似SGD+Momentum中的速度)和第二动量(类似AdaGrad、RMSProp中的梯度的平方项)的估计值,第一动量的估计值等于梯度的加权和,第二动量的动态估计值是梯度平方的动态估计值,相当于速度项与梯度平方项的结合。

 

 在最初的第一步,第二动量的初始值为0,第一步之后衰减值beta2=0.9或0.99,第二动量还是接近于0,除以第二动量后会得到很大的步长,可能导致初始化到一个难以收敛的区域。1e-7为的是分母不为0。

 因此,Adam增加了一个偏置校正项避免出现开始时得到很大步长。

 

 一般网络的都会使用Adam算法作为优化算法,它结合了SGD和RMSProp的优点。

 

 学习率的选择:

 一般选择学习率衰减策略,在训练的开始选择较大的学习率,然后随着步长衰减或指数衰减。

 

 SGD+Momentum的学习率衰减很常见,Adam一般不使用学习率衰减,学习率衰减相当于二阶超参数,在开始时不使用,在训练达到一定瓶颈时再考虑使用。

 

 一阶优化与二阶优化:

 

 

 

L-BFGS是一个二阶优化器

 

 Adam是大多数情况下的默认选择,如果能承受整个批次的更新且没有很多随机性(如风格迁移),可以考虑L-BFGS

 

模型集成是提高测试集准确率的有效办法,通常选择一批不同的随机初始值上训练N个模型,测试时平均N个模型的结果,能够缓解过拟合。

 

 

Q1:随机梯度下降的随机指得是什么?

Q2:尝试解释为什么Adam通常会是一个更好的选择?(可以结合Momentum和RMSProb的优点解释)

 

1.随机梯度下降指的是从批量样本中随机选取一个样本,按照该样本梯度下降的方向进行梯度下降,
2.Adam的优点:可以解决局部最优和鞍点问题,且下降速度较快,平衡各特征梯度的大小

 

https://blog.csdn.net/weixin_40170902/article/details/80092628

转载于:https://www.cnblogs.com/Manuel/p/11041119.html

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

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

相关文章

iOS开发-平台使用TestFlight进行Beta测试

使用 TestFlight,你可以向测试人员发布你 App 的 prerelease 版本来收集反馈信息,为将来发布 App 的正式版做准备。现在 TestFlight 是一个可选功能,你也可以不使用它,而是像以往发布 App 那样直接提交到 appStore。 TestFlight 使…

java语言介绍 —(1)

1.基础常识 软件:即一系列按照特定顺序组织的计算机数据和指令的集合。分为:系统软件 和 应用软件 系统软件:windows , mac os , linux ,unix,android,ios,… 应用软件:word ,ppt,画图板,… 人机交互方式: 图形化界面…

第一个java程序helloworld —(2)

1.开发体验——HelloWorld 1.1 编写 创建一个java源文件:HelloWorld.java class HelloChina{public static void main(String[] args){System.out.println("Hello,World!");} }1.2 编译: javac HelloWorld.java 1.3 运行: java Hel…

2017年苹果公司开发者账号申请与支付流程

邓白氏编码下来之后,现在我们就可以走到付款流程,购置账号了!觉得有用的顶一下 1.登陆苹果账号,加入苹果开发者 https://developer.apple.com/ 2.按照指示,一步步点击进入就行了,反正你也看不懂&#xff08…

java关键字与标识符 —(3)

1.java关键字的使用 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词) 特点:关键字中所字母都为小写 具体哪些关键字: 2.保留字:现Java版本尚未使用,但以后版本可能会作…

2017年苹果公司开发者账号申请-公司邓白氏编码

申请公司的苹果开发者账号和企业级的苹果开发者账号时,都会用到邓白氏编码,也就是我们申请苹果开发者账号时需要填写的D-U-N-S Number。 申请这个邓白氏编码是免费的,但是从像华夏邓白氏公司提交申请到可以申请苹果开发者账号来用这个9位的D-…

java变量及进制问题 —(4)

1.变量的分类 1.1 按数据类型分类 详细说明: //1. 整型:byte(1字节8bit) \ short(2字节) \ int(4字节) \ long(8字节) //① byte范围:-128 ~ 127 // ② 声明long型变量,必须以"l"或"L"结尾 // ③ 通常&…

Struts2的两个蝴蝶飞,你好简单开发(一)

我把你的头像,设置成我的名字,此刻你便与我同在。我把你的名字,写进我的代码里面,以后,我的世界便存在着你。 “两个蝴蝶飞”特别喜欢"java1234知识分享网"小峰的实用主义,所以本文及其系列文章均…

用Canvas画圆环百分比进度条

<!DOCTYPE html> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><title>canvas圆环进度</title><link rel"stylesheet" href"">…

利用SQL计算两个地理坐标(经纬度)之间的地表距离

两个地理坐标(经纬度)地表距离计算公式&#xff1a; 公式解释如下&#xff1a; Long1,Lat1表示A点经纬度&#xff0c;Long2,Lat2表示B点经纬度&#xff1b;aLat1–Lat2 为两点纬度之差&#xff0c;bLong1-Long2为两点经度之差&#xff1b;6378.137为地球半径&#xff0c;单位为…

java数组 —(7)

* 1.数组的理解&#xff1a;数组(Array)&#xff0c;是多个相同类型数据一定顺序排列的集合&#xff0c;并使用一个名字命名&#xff0c; 并通过编号的方式对这些数据进行统一管理。 * 2.数组相关的概念&#xff1a; 数组名 元素 角标、下标、索引 数组的长度&#xff1a;元素…

java数组 —(8)

1.数组的创建与元素赋值&#xff1a; 杨辉三角&#xff08;二维数组&#xff09;、回形数&#xff08;二维数组&#xff09;、6个数&#xff0c;1-30之间随机生成且不重复。 2.针对于数值型的数组&#xff1a; 最大值、最小值、总和、平均数等 3.数组的赋值与复制 int[] a…

idea启动tomcat时报错:Error during artifact deployment. See server log for details.

Error during artifact deployment. See server log for details. 这个很多人都找不出来&#xff0c;原因无非2个&#xff1a; 一、jar 包有有些没能识别&#xff0c;tomcat没有配置好&#xff01; 二、这个一般代码错了&#xff1a; 除了看 server 的报错&#xff0c;别忘了看…

leetcode 279 四平方定理

可以用四平方和定理&#xff1a;任意一个正整数都可以表示为4个以内整数的平方和。 如果一个数含有因子4&#xff0c;那么我们可以把4都去掉&#xff0c;并不影响结果。比如&#xff1a;8去掉4&#xff0c;12去掉3&#xff0c;返回的结果都相同。 如果一个数除以8余7&#xff0…

java类与对象 —(10)

1.面向对象学习的三条主线&#xff1a; 1.Java类及类的成员&#xff1a;属性、方法、构造器&#xff1b;代码块、内部类2.面向对象的大特征&#xff1a;封装性、继承性、多态性、(抽象性)3.其它关键字&#xff1a;this、super、static、final、abstract、interface、package、…

JavaScript-内存空间

深入了解js这门语言后&#xff0c;才发现它有着诸多众所周知的难点&#xff08;例如&#xff1a;闭包、原型链、内存空间等&#xff09;。有的是因为js的设计缺陷导致的&#xff0c;而有的则是js的优点。不管如何&#xff0c;总需要去学会它们&#xff0c;在学习过程中我觉得只…

java类的结构1: 属性 —(11)

类的设计中&#xff0c;两个重要结构之一&#xff1a;属性 对比&#xff1a;属性 vs 局部变量 1.相同点&#xff1a; 1.1 定义变量的格式&#xff1a;数据类型 变量名 变量值1.2 先声明&#xff0c;后使用1.3 变量都其对应的作用域 2.不同点&#xff1a; 2.1 在类中声明的…

javascript-排序算法

插入排序 算法描述&#xff1a; 1. 从第一个元素开始&#xff0c;该元素可以认为已经被排序 2. 取出下一个元素&#xff0c;在已经排序的元素序列中从后向前扫描 3. 如果该元素&#xff08;已排序&#xff09;大于新元素&#xff0c;将该元素移到下一位置 4. 重复步骤 3&am…

DPDK并行计算

参考文献&#xff1a; 《深入浅出DPDK》 https://www.cnblogs.com/LubinLew/p/cpu_affinity.html ...................................................................... 前言&#xff1a; 处理器提高性能主要是通过两个途径&#xff0c;一个是提高IPC&#xff08;CPU每一时…

Highcharts图表-ajax-获取json数据生成图表

重点说明此代码是针对一个报表显示多个项对比显示。 直接贴代码&#xff1a;web端 <script type"text/JavaScript" src"js/jQuery/jquery-1.7.2.js"></script> <script type"text/javascript" src"j…