adam算法_关于损失函数和优化算法,看这一篇就够了
在进行神经网络训练时,很多同学都不太注重损失函数图和损失函数的优化算法的理解,造成的结果就是:看起来效果不错,但是不知道训练的参数是否合理,也不知道有没有进一步优化的空间,也不知道初始点的选择是否恰当。本篇文章着重介绍神经网络损失函数最小化过程中使用的优化算法,前面先对梯度下降法进行介绍,后面介绍梯度下降法中使用的几种优化算法,中间穿插着自变量的更新轨迹和损失函数图像的讲解,以期同学们对损失函数相关的知识有清晰明确的认识,这是学好神经网络的基础。
梯度下降法
梯度下降法是最原始的对模型的参数向量进行更新的方法,它的目标函数是训练数据集中有关各个样本的损失函数的平均。设
目标函数在
模型的参数向量更新:
例如,对于目标函数
可以看到自变量的迭代轨迹与等高线是垂直的,说明迭代一直朝着梯度的反方向进行(直达目的地)。但是梯度下降法每次更新模型参数需要对所有样本计算梯度,所以每次自变量迭代的计算开销为
随机梯度下降法
为了减少计算的开销,采用了随机梯度下降(SGD)方法。在随机梯度下降的每次迭代中,我们随机均匀采样的一个样本索引
我们的目标是把所有样本的损失降到一个极小值,但是这种方式只能把一个样本的损失给降低,那么这样能达到我们的目标吗?可以证明:经过很多次的迭代之后随机梯度下降能达到梯度下降相同的效果,也就是说随机梯度
可以看到自变量的迭代轨迹与等高线不是垂直的,说明迭代没有完全按照梯度下降的方向走,但是最后也到达了跟梯度下降方法同样的终点,再次证明了我们上述说的“经过很多次的迭代之后随机梯度下降能达到梯度下降相同的效果”。但是此时可能存在损失函数图像是以下形状:
出现这种损失函数在某个值附近波动,说明学习率太大了,以至于在这个值附近跳来跳去,无法继续朝着梯度的反方向达到极小值点,通常需要降低学习率。
小批量随机梯度下降法
除了梯度下降和随机梯度下降,我们还能每次处理一批样本,当这一批样本的数量等于整个训练集时,就成了梯度下降;当这一批样本的数量为一个样本时,就成了随机梯度下降。
小批量随机梯度下降对自变量的迭代如下:
对于目标函数
可以看到小批量随机梯度下降也大体是朝着等高线垂直的方向前进。但是注意:在前几次的迭代过程中垂直方向上每一步的跨度都超过了水平方向上的跨度,这是因为两个方向的方向导数差别太大导致的,这种情况如果我们更新参数的时候在各个方向还是使用相同的学习率就会带来不好的结果:具体来说就是当学习率设置的大的时候方向导数比较大的那个维度容易发散,这样就找不到极小值了。当学习率设置的比较小的时候方向导数比较小的那个维度移动较慢,可能训练已经结束了,还没达到极小值点(在实际的训练中经常发生这样的事情,因为高维空间的函数及其复杂,可能存在大片平坦区域,很久也走不出去)。针对这种情况,出现了两种优化方法:动量法和AdaGrad算法。下面分别介绍。
动量法
动量法的思想很简单,就是要把之前时间步的梯度考虑进来,比如在某一个维度上,前面好几个时间步的梯度都是同一个符号,说明在这个方向上一直在下坡,还没有跳过极小值点,那么就需要加速,一次跳的更远一些,这样接近极小值更快一些。再比如在另一个维度上,前面好几个时间步的梯度的正负符号不一致,那么说明在这个区域内,这个维度在极小值附近跳来跳去,也就是说当前的(学习率*梯度)太大了,以至于不能更靠近极小值。这两种情况都可以通过一个办法解决,那就是把最近几个时间步的学习率*梯度考虑进来,如果最近几个时间步的都为同一个符号,那么它们相加就会变大,更新的就快;如果最近几个时间步的为不同的符号,那么它们相加就会相互抵消,就会变小,就更容易靠近极小值点。动量法的更新方法如下:
相比以前,多了一步
例如:
其实就是,本来应该减
同样是上述目标函数,这里我们把学习率设置的和刚才一样,但是使用动量法并设置动量超参数为
可以看到动量法在竖直方向上的移动更加平滑。
AdaGrad算法
还是要解决刚才的问题,动量法是把最近的(学习率*梯度)考虑了进来,另一种想法就是针对每一维我们设置不同的学习率不就行了吗,如果某个维度的导数比较大,我们就设置比较小的学习率,如果某个维度的方向导数比较小,我们就设置稍微大一点的学习率,这正是AdaGrad算法算法的思路。
AdaGrad算法的更新方法如下(时间步0时,
其中
上式为了好看把
当学习率在迭代早期降得较快且当前解依然不佳时,AdaGrad算法在迭代后期由于学习率过小,可能较难找到一个有用的解。
还是使用目标函数
损失函数的变化图形大致如下所示:
可以看到由于前期学习率下降太快,导致后期的迭代变得特别慢,20轮迭代之后,自变量仍未达到极小值点。由于在实际的机器学习过程中,损失函数都是高维函数,函数将变得非常复杂,学习率下降太快会导致不管训练了多久可能都出不了某个区域的情况。
RMSProp算法
针对上面这个问题,提出了RMSProp算法。RMSProp算法综合了动量法和AdaGrad算法的思想,它既想用过去的时间步的梯度来更新当前
像刚才一样,我们还是做一个变形:
相当于给每个
还是使用目标函数
损失函数的变化图形大致如下所示:
可以看到,RMSProp算法可以更快逼近最优解,并且像动量法一样在竖直方向上的移动更加平滑,也克服了AdaGrad法迭代较慢的现象。
Adam算法
Adam算法在RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均,可以看做是RMSProp算法与动量法的结合,也就是RMSProp算法的增强和优化版本。
Adam算法使用了动量变量
另外还有一点,就是上面的
所以Adam算法真正的公式如下:
Adam算法是应用最广泛、效果最好的优化算法之一,近年来又提出了很多优化算法,但核心思想都是为了解决梯度下降过程中存在的上述几个问题。把这几个算法理解清楚,就理解了整个梯度下降的过程,对于后续研究其它优化算法也打下了坚实的基础。
adam算法_关于损失函数和优化算法,看这一篇就够了相关推荐
- 算法函数_关于损失函数和优化算法,看这一篇就够了
在进行神经网络训练时,很多同学都不太注重损失函数图和损失函数的优化算法的理解,造成的结果就是:看起来效果不错,但是不知道训练的参数是否合理,也不知道有没有进一步优化的空间,也不知道初始点的选择是否恰当 ...
- 最优化算法单纯形法的matlab实现(单纯形法看这一篇就够了)
文章目录 前言 一.单纯形法表格 1.1可立即读出最优解和最优值的表格具备的特点 二.单纯形法的步骤(流程图) 三.单纯形法的matlab实现 3.1单纯形法matlab代码 3.2测试例题 3.3结 ...
- 后端数据成功返回 页面不渲染_如何统计页面访问量,看这一篇就够了
大家好我是CloudCoder,译为云时代的码农,专注分享linux/go/java等相关技术. 如何使用前后端统计页面的访问量? 这是我的一个github项目 链接为:https://github. ...
- 百万并发下的Nginx优化,看这一篇就够了!
本文作者主要分享在 Nginx 性能方面的实践经验,希望能给大家带来一些系统化思考,帮助大家更有效地去做 Nginx. 优化方法论 我重点分享如下两个问题: 保持并发连接数,怎么样做到内存有效使用. ...
- 合并文件夹中子目录_如何整理文件夹,看这一篇就够了,简单易学
说出来可能你们不信,松鼠君在办公室看到了人类第八大奇迹-- 一个全是新建文件夹的电脑! 我的乖乖,他到底是怎么干活的 层级分类 在我们日常的工作生活中,对电脑的文件进行整理成了不可避免的工作:而如何高 ...
- 单点登录 cas 设置回调地址_单点登录(SSO)看这一篇就够了
背景 在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登录,很方便. 但随着企业的发展,用到的系统随之增多,运营人员在操作不同的系统时,需要多 ...
- 最优化算法对偶单纯形法的matlab实现(对偶单纯形法看这一篇就够了)
文章目录 前言 一.单纯形法表格 1.1可立即读出最优解和最优值的表格具备的特点 二.对偶单纯形法的步骤(流程图) 三.对偶单纯形法的matlab实现 3.1对偶单纯形法matlab代码 3.2测试例 ...
- 损失函数及优化算法汇总
损失函数汇总 1. 常用损失函数 1.1 0-1损失函数(0-1 lossfunction) 1.2 感知损失函数(Perceptron Loss) 1.3 平方损失函数(Quadratic Loss ...
- 机器学习算法优缺点_用于机器学习的优化算法的优缺点
机器学习算法优缺点 A deep-dive into Gradient Descent and other optimization algorithms 深入研究梯度下降和其他优化算法 Optimi ...
最新文章
- Spring系列(十):@Autowired 和@Resource注解用法介绍
- sox处理mp3_音频处理常用Linux命令总结(一)
- 互联网日报 | 7月19日 星期一 | 美团外卖成立骑手服务部;金山办公发布“文档中台”;一汽-大众奥迪在华销量突破700万辆...
- java substring_java 中 substring()方法
- 设计模式--单例模式--Java实现
- SSH 无法启动的原因分析及解决方法
- 标题决胜武器:标题常用的14个套路
- 【云服务器】阿里云服务器+宝塔Linux零成本搭建全网音乐搜索引擎网站(在线音乐播放器),可在线播放可下载可分享它不香么?
- 网吧用服务器做虚拟化,网吧内共享服务器搭建
- 魅族计算机按键声,魅族16T按键音怎么关
- 京东管培生(产品方向)线上hr面
- Cobot专长:了解您的日常需求
- 股票入门基础知识1:什么是股票和股份?
- scp命令传输出现ssh: Could not resolve hostname错误
- HelloRobot【六足】机械蜘蛛
- 竹炭纤维集成墙面板装修的缺点是什么,有哪些弊端
- coteditor mac版文本编辑器
- 游戏配音最重要的两点
- 设计模式(java)—— 简单工厂模式之农场,女娲造人
- 苹果iPhone自研PC处理器架构细节曝光:性能对比Intel直接溢出
热门文章
- 刚挑选出的几本硬件设计类书籍
- bravado哺乳内衣好吗?
- 吉利纯电动品牌几何A:极简设计、智能驾驶背后暗含大野心...
- JSRender之渲染模板
- html中div文字垂直居中显示,CSS文本和div垂直居中方法总结
- crypto-EasyMath(Bugku CTF)
- java 访问mtp设备_GitHub - duongnartist/AndroidOtgUSBMtpSample: 探究读取单反相机照片并复制到到手机内部存储中的Android解决方案...
- 华为 WATCH Ultimate 如何开通和使用北斗卫星卡
- echarts-图表插件
- 【VScode远程连接虚拟机(ubuntu)】