梯度下降算法总结
来源:互联网 发布:android app启动优化 编辑:程序博客网 时间:2024/05/21 06:45
- 基本梯度下降法
- 随机梯度下降
- 批梯度下降法
- Momentum梯度下降法
- Nesterov Momentum梯度下降法
- AdaGrad
- RMSprop
- AdaDelta
- Adam
- 基本梯度下降法
机器学习中,求解的问题常常变为最优化问题,求解最优化问题,常常使用梯度下降法。梯度下降法的最基本原理是向着最优化点不断靠近。假设最终的Loss函数为
那么梯度下降的基本形式为
在实践中,根据具体问题,有演变出以下几种
基本梯度下降法
基本梯度下降法,是指在每一次更新参数时,都是通过减去
这里的
随机梯度下降
随机梯度下降,是指:每次随机抽取一个样本->求得损失函数->计算梯度->执行梯度下降算法。
这里计算的损失函数为一个样本的损失函数
随机梯度下降法中,噪声比较多,每一步参数更新,不一定是向着最优方向;因此损失函数并不是计算全局最优,样本并不纯净等。
批梯度下降法
随机梯度下降法,每次求得的梯度噪声太大,参数更新许多迭代次数太多。因此有了梯度下降法和随机梯度下降法的折中:批梯度下降法。
批梯度下降法,是每次求得一批样本的损失函数->求梯度->更新参数。
一次样本求梯度,一定程度上减小了噪声;计算量也不至于太大。在实践中常常使用批梯度下降法。
Momentum梯度下降法
通过优化参数找到损失函数最小值,可以看做小球在山上滚动,找到山谷。参数随机初始化,可以看做小球从这个位置以起始速度为0,开始滚动。损失函数的梯度,可以看过施加给小球的力,通过力有了速度,通过速度改变位置。由力学定律
动量法,原理在于一个方向的速度可以积累,而且越积累越大;通过不同训练样本求得梯度时,在最优的方向的梯度,始终都会增大最优方向上的速度。因此,可以减少许多震荡。
Nesterov Momentum梯度下降法
Nesterov Momentum梯度下降法是对Momentum梯度下降法的一个改进。在Momentum梯度下降法中,已经求出了
AdaGrad
学习率在梯度下降法中,十分重要,但是所有参数都是用同一个学习率未必合适。例如,有些参数可能已经接近最优,仅仅需要微调,需要比较小的学习率;而有些参数还需要大幅度调动。在这种场景下,AdaGrad,来自适应不同的学习率。
AdaGrad原理也比较简单,它通过记录之前更新每一步更新值的平方,将这些参数累加,以此来调节每一步的学习率。
如果梯度比较大,它会不断减小学习率;相反,则会增大。
缺点是,随着训练进行,学习率会不断减小,最终参数不再更新。
RMSprop
RMSprop是为了解决AdaGrad法中,梯度不断减小问题的。方法很简单,通过设置当前梯度和历史梯度比例,例如
AdaDelta
AdaDelta也是为了解决Adagrad中,学习率不断减小问题的。与Adagrad不同的是,AdaDelta通过设置窗口w,只是用部分时间段内累计的梯度。
存储前w个梯度
Adam
Adam考虑了梯度以及梯度的平方,具有AdaGrad和AdaDelta的优点。Adam根据梯度的一阶估计和二阶估计,动态调整学习率。
推荐的超参数为
- 梯度下降算法总结
- 梯度下降算法总结
- 梯度下降优化算法总结
- 梯度下降优化算法总结
- 梯度下降优化算法总结
- 最简总结 -- 梯度下降算法
- 梯度下降算法与随机梯度下降
- 随机梯度下降算法
- 梯度下降算法
- 梯度下降算法
- 梯度下降算法
- 梯度下降算法
- 梯度下降算法
- 梯度下降算法
- 梯度下降算法
- 梯度下降算法详解
- 梯度下降算法
- 梯度下降算法
- [DP] BZOJ 4574 [Zjoi2016]线段树
- linux下xml安装和使用
- 从零开始学 SpringBoot (1)
- 集合之Collections
- (OK) shmem: enable user xattr for tmpfs
- 梯度下降算法总结
- C++学习笔记(7)
- protobuf-2.5.0.tar.gz的下载与安装
- Exception的ToString()方法究竟返回的是什么
- C/C++ rand产生随机数
- [05]javascript的运算符
- Android热修复学习之旅——Andfix框架完全解析
- Competing-Consumers模式
- 几条有利于提升性能的JQuery规则介绍