003.1.优化器(原理讲解)
0.简介
由于博主时间有限,本来在之前应该还有一节关于损失函数的讲解,但我认为这两部分应该放在一起来理解。而且Loss函数创建的目的就是为了通过opertimzer来更新对应参数,所以就写了这篇博客,
由于本章涉及的数学原理较多,涵盖了向量,级数,与概率论中的参数估计(矩估计),在查阅(chaoxi)了大量来自 YouTube和很多凸优化(又TM是数学)的知识后,决定用视频讲解的方式来讲解其数学原理,所以本章就只是一个大纲,后期会在b站上录一个关于原理讲解的视频(不会Latex打公式…)
1.手动更新参数
1.动量(Momentum)
这里的动量可和高中学的物理里面的动量不是一个东西,但是思想有相似之处,因为在传统的机器学习里面的梯度下降面临一个重要的问题就是更新幅度的问题,如果如BGD一样,那么下降的速度会过于慢(每次更新用所有样本),但如SGD一般,那么下降的速度可能会过快,导致错过了最优点(每次更新一个样本),那怎么去解决呢
(传统机器学习)
(动量原理的伪代码与向量解释)
(标量解释)
2.牛顿动量法(NAG)
- 利用当前位置(n) 处之前(n-1)的梯度值先做一个目标参数(的临时参数)更新
- 用这个临时参数去更新参数
- 用这个梯度来更新动量再更新参数(n+1)
这个方法的最大的优点就是涉及到了三个维度,n,n-1,n+1.所以比往前所有的方法考虑的范围更广。(这里广的意思不仅仅是指会在跳出最低点的时候返回,自己理解…)
(伪代码)
(向量解释)
2.自动更新参数
1.AdaGrad
-
需要传入的参数(3):学习率,初始化模型参数,小常数(防止分母是0)
-
原理:随着迭代的次数的增加,且越来越接近最优点,梯度会越来越小,累加和会越来越大,更新步伐会越来越小。
-
优点:
1.如果一个参数的梯度一直很大,那么对应的学习率就小一点,防止震荡
2.随着梯度累加越来越大,所以分母越来越大,这时越接近最优点,防止了跳出最优点的情况
-
缺点:
1.当参数的梯度足够大时,会导致累加的梯度接近于无穷大,使得更新速度无限接近于0
2.还是要输入初始化学习率,不能做到绝对的自动更新,模型效果很大部分取决于输入的参数初始值,而非完全决定于样本本身的数据集特征
(伪代码)
PS:指数平滑法与偏差修正
引用:优化算法之指数移动加权平均 - 知乎 (zhihu.com)
一种更新参数的方法,即运用加权的方法去用当前真实值去更新预测值,公式:
用Vt-2去代替Vt-1,n次得到了递推公式,theta t 代表当前真实值。
但之后又遇到了其它问题,即该式子在递推的过程中会对原始的几个数据特别的敏感,当前面的数据和后面的数据之间的方差之间的差距越来越大的时候就会导致预测出现较大的误差
所以我们提出了 偏差修正后的指数加权平均公式
对比传统的更新公式,即直接加上观测值,后绘制两者图像,可以得到如下图。
可以看见其更加平滑,震动幅度更小
2.RMSProp
-
需要传入的参数 :衰减速率γ,初始参数,小常数(防止分母是0)
-
原理:和Adagrad差不多的原理,即自动更新梯度的原理,但比起来原来的更新梯度一样直接累加相比,这样使下降更加平缓(可以说只是数学层面上的优化,但本质上还是和之前的一样)
(伪代码)
3.Adam
-
需要传入的参数:初始的学习率,一阶衰减速率,二阶衰减速率,初始化参数
-
原理:和之前的Adagrad和RMSProp都不同,其数学原理分两部分,一是用原点矩来更新参数,二是与RMSProp相比,在梯度累加的时候采用了偏差修正后的指数加权平均公式
(伪代码)