1、梯度下降的基本思想
每走一段路,测量出最陡的方向,然后向前 ,重复此过程找到山脚。
2、梯度下降法的主要原理
(1)、确定一个小目标——预测函数
在二维直角坐标系中有一群样本点,横纵坐标代表有有因果关系的变量,拟合数据找到一条直线,使所有样本点和这条直线的偏离程度最小。这时候 y = wx就是预测函数。
(2)、找到差距——代价函数
首先,我们需要量化数据的偏离程度——常用均方误差MSE(误差平方和的平均值)
对于点P1,对应的误差为e1,等于这个点的真值y1与预测值w*x1差的平方,再用完全平方式展开即可 。同理可计算出P2、P3……Pn的误差
并且xy和样本数n都是已知项通过合并同类项,再用常量abc代表不同的系数,就可以得到一个一元二次方程。
在将系数1/n忽略,得到的e就表示了学习需要付出的代价,也被称为代价函数。
对于代价函数,a > 0,很明显是一条开口向上的抛物线。一定拥有最小值点。且当w的值变化时,直线y = wx绕原点旋转,对应到抛物线图像就是取值点沿着曲线的运动。
通过定义预测函数y = wx然后根据误差公式推导代价函数e,我们成功的将样本点的拟合过程映射到了一个函数图像上。
(3)、明确搜索方向——梯度计算
机器学习的目标是拟合出最接近训练数据的直线,也就是找到使得误差代价最小的参数w,对应在代价函数图像上,就是找到他的最低点。因此这个寻找最低点的过程就是梯度下降。
假设起始点在曲线上任意一点只要沿着陡峭程度(梯度)最大的方向走,就能很快到达最低点。梯度就是代价函数的导数,对于抛物线而言就是曲线斜率。
(4)大胆地往前走吗——学习率
确定梯度方向后,一次前进多少呢?当学习率过大或者过小时,会导致反复横跳而达不到最低点。如果使用斜率作为步长,离最低点远时,斜率较大可以快速收敛、离最低点近时斜率较小,步子较小。但实际效果会反复横跳,无法收敛到最小值。
如何解决这个问题呢?观察发现这是由于步长过大导致的问题,那么将斜率乘以一个很小的值如0.01来缩小步长就可以解决这个问题了!这个很小的值就叫做学习率。而通过学习调整权重w的方式就是
(5)、不达目的不罢休——循环迭代
梯度下降法的完整过程包括:①定义代价函数;②选择起始点;③计算梯度找到下降方向;④沿着这个方向按照学习率前进;⑤重复③④直到找到最低点;
3、实际情况没有这么简单
实际情况中维度可能更高,代价函数不一定是一个简单的抛物线。某种情况下,代价函数可能是一条波浪线。有多个局部最小点,但我们要找的是全局最优。
4、梯度下降法的各种变体
批量梯度下降算法BGD:使用全部训练样本参与计算,梯度下降的非常平稳 ;能保证素昂发精准度,找到全局最优解,但是让训练过程变得很慢 ,代价很大。
随机梯度下降算法SGD:每次下降只用一个样本进行计算,大方向没错但下降的不平稳;大大提高了下降的速度,但是降低了精准度。
小批量梯度下降算法MBGD(最速下降法):每下降依次就选用一小批样本进行计算,下降相对较快,较为准确。
5、总结
梯度下降法十分依赖学习率。学习率过大会导致反复横跳,学习率过小会导致计算量过大;除非使用BGD,其他方式可能会陷入局部最优解而找不到全局最优解。
AdaGrade——动态学习率:经常更新的参数学习率就小一些,不常更新的学习率大一些。但是可能会导致频繁更新参数的学习率可能过小,以至于逐渐消失。下面几种算法解决了这个问题。
RMSProp——优化动态学习率
AdaDelta——无需设置学习率
Adam——融合AdaGrade和RMSProp
Momentun——模拟动量