深度学习中的优化算法串讲
Datawhale原创
作者:谢文睿,Datawhale成员
寄语:优化算法是一个超参数,一个优化算法不是适合所有损失函数的,没有哪个优化算法是绝对的好或绝对的坏,是要根据损失函数判断的
本文对深度学习中的优化算法进行了梳理。首先,介绍了整个优化算法的基本框架。然后将目前用的主流优化算法进行讲解,带领大家了解优化算法从SGD到Adam及Nadam的转变。
视频链接:https://www.bilibili.com/video/av94067702/
基本框架
为什么这些算法是能串讲的呢?因为这些算法都是相通的。为什么是相通的呢?因为所有的优化算法均基于下面优化算法的基本框架。
其中,一阶动量和二阶动量分别是历史梯度的一阶函数和二阶函数。
SGD随机梯度下降算法
首先,讲一下最基础的SGD算法:
缺点:容易陷入局部最优。由于SGD只考虑当前时刻的梯度,在局部最优点的当前梯度为0。由计算公式可知,此时参数不再进行更新,故陷入局部最优的状态。
改进策略及算法
引入历史梯度的一阶动量,代表算法有:Momentum、NAG
引入历史梯度的二阶动量,代表算法有:AdaGrad、RMSProp、AdaDelta
同时引入历史梯度的一阶动量及二阶动量,代表算法有:Adam、Nadam
改进策略1:引入一阶动量
Momentum
改进思想:为了抑制SGD的震荡,Momentum认为梯度下降过程可以加入惯性,也就是在SGD基础上引入了一阶动量。
其中,关于历史梯度的一阶动量的计算采取指数加权移动平均值的思想进行计算,具体计算步骤详见PPT或视频讲解。
NAG
改进思想:除了利用惯性跳出局部沟壑以外,我们还可以尝试往前看一步。即:在Momentum考虑历史梯度的基础上,把当前梯度转换为未来梯度。
改进策略2:引入二阶动量
二阶动量的出现,才意味着“自适应学习率”优化算法时代的到来。在SGD及其引入一阶动量的改进算法中,均已相同的学习率去更新参数。但是,以相同的学习率进行变化经常是不合理的。
在神经网络中,参数需要用不同的学习率进行更新。对于经常更新的参数,我们已经积累了大量关于它的知识,不希望被单个样本影响太大,希望学习速率慢一些;对于偶尔更新的参数,我们了解的信息太少,希望能从每个偶然出现的样本身上多学一些,即学习速率大一些。
以神经网络中的W及b为例,如下图为损失函数图像,W为x轴,b为y轴。发现每次b变动很大,而W每次仅更新一小步。但是,纵观整个损失函数我们发现,W其实可以迈开步子往前走,b是不是可以跳跃不那么大。
于是,出现了不同针对不同维度的参数采用不同学习率的二阶动量改进算法。
AdaGrad
改进思想:从数学的角度来看,更新幅度很大的参数,通常历史累计梯度的平方和会很大;相反的,更新幅度很小的参数,通常其累计历史梯度的平方和会很小。
缺点:随着时间步的拉长,历史累计梯度平方和会越来越大,这样会使得所有维度参数的学习率都不断减小(单调递减),无论更新幅度如何。
RMSProp/AdaDelta
改进思想:不累积全部历史梯度,而只关注过去一段时间窗口的下降梯度,采用Momentum中的指数加权移动平均值的思路。
改进策略3:同时引入一阶动量及二阶动量
Adam
改进思想:加入Momentum的一阶动量计算方法及AdaGrad的二阶动量计算方法。
Nadam
改进思想:Nadam = Nesterov + Adam。核心在于计算当前时刻的梯度时使用了未来梯度。
视频链接(或阅读原文)
https://www.bilibili.com/video/av94067702/
如需本文PPT,在后台回复"PPT"获取
深度学习中的优化算法串讲相关推荐
- 深度学习中的优化算法之Adam
之前在https://blog.csdn.net/fengbingchun/article/details/124909910 介绍过深度学习中的优化算法Adadelta,这里介绍下深度学习的另一种优 ...
- 深度学习中的优化算法之RMSProp
之前在https://blog.csdn.net/fengbingchun/article/details/124766283 中介绍过深度学习中的优化算法AdaGrad,这里介绍下深度学习的另一种优 ...
- 深度学习中的优化算法与实现
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 GiantPandaCV导语:这篇文章的内容主要是参考 沐神的mxnet/gluon视频中,Aston ...
- 深度学习中的优化算法之MBGD
之前在https://blog.csdn.net/fengbingchun/article/details/75351323 介绍过梯度下降,常见的梯度下降有三种形式:BGD.SGD.MBGD,它们的 ...
- 深度学习中的优化算法之BGD
之前在https://blog.csdn.net/fengbingchun/article/details/75351323 介绍过梯度下降,常见的梯度下降有三种形式:BGD.SGD.MBGD,它们的 ...
- 深度学习中的优化算法之带Momentum的SGD
之前在https://blog.csdn.net/fengbingchun/article/details/123955067介绍过SGD(Mini-Batch Gradient Descent(MB ...
- 深度学习中的优化算法之NAG
之前在https://blog.csdn.net/fengbingchun/article/details/124648766 介绍过Momentum SGD,这里介绍下深度学习的另一种优化算法NAG ...
- 深度学习中的优化算法之AdaGrad
之前在https://blog.csdn.net/fengbingchun/article/details/123955067 介绍过SGD(Mini-Batch Gradient Des ...
- 2.2)深度学习笔记:优化算法
目录 1)Mini-batch gradient descent(重点) 2)Understanding mini-batch gradient descent 3)Exponentially wei ...
最新文章
- 【iOS】sqlite3的使用(増删改查)
- java url getfile_java url构成及get属性方法解释
- 如何在不增加人员的情况下自动化API安全程序
- C++ STL容器之 list 初步
- linux chromebook arm,第一款可拆卸 ARM Chromebook 可能是 KODAMA
- 收藏 | 佐治亚理工出品交互式线代教科书!
- 远程命令,代码执行漏洞原理
- batch批处理(转载)
- error: dst ref refs/heads/zhCN_v0.13.1 receives from more than one src.
- 【数据结构-链表】malloc函数头文件
- RGL: A Simple yet Effective Relation.. 文章详解
- 腾达ap设置说明_腾达(Tenda)F3无线信号放大模式(Client+AP)设置 | 192路由网
- oracle 分组统计效率,Oracle 分组求和函数(rollup、cube、grouping sets)
- 初识5G - 揭开5G的神秘面纱 从零开始学习
- 能够创建时间循环并飞檐走壁的 VR 游戏 TRANSPOSE正式上线
- Postman是什么 怎么用
- 1053: 正弦函数
- Voluntarily Relinquishing the Processor-----《Pro_Java_8_Programming_(3rd_edition)》
- Tools_@截屏工具@OCR识别工具@图片文字翻译工具长截屏,普通截屏套件推荐(by QQ)@鼠标键盘动作录制
- ## 标题 使用eclipse遇到的错误JavaWeb【404,The origin server did not find a current representation for the targ