(1)SGD为随机梯度下降算法,每一次迭代计算数据集的小批次的梯度,然后对参数进行更新。随机梯度下降算法比较简单在这里不展开说,关于随机梯度下降算法公式的推导就是运用链式求导法则一顿求偏导,使得数据预测值和真实值的差最小。
公式:
(2)参考了物理中动量的概念,考虑到前几次的梯度,但是前几轮的梯度叠加在当前计算中会有一定的衰减。可以使最优解的曲线更加的平滑,其原理使移动平均加权公式为(和c++中的动态规划有些相似,不同的是带有权重):
其中β为权重,vt-1是前几次的梯度,为当前梯度。
β的选择尤为的重要。在预测温度的例子中,吴恩达老师令β=0.9 。使曲线要平坦一点,这是因为你平均了几天的温度,所以这个曲线波动更小,更加平坦,缺点就是曲线会失去时效性。如果选择的β值过小,平均的数据就会很少,得到的曲线会有更多的噪声也就是(稳定性差)更有可能出现异常值,但是趋势曲线能够更加适应拟合你的原始数据,也就是趋势曲线的(时效性高)。
β是一个很重要的参数,可以取得稍微不同的效果,往往中间某个值效果最好。
该方法和随机梯度下降算法相比的优势是,由于引入动量的原因,可以使梯度轻松的跳出伪最优解。但是由于加入前期梯度的原因可能会导致前期的预测效果不好我们可以引入带修正偏差的指数加权平均公式:
我们可以发现当数据量比较大的时候即t比较大的时候,会出现vt‘=vt的现象。
参考资料:https://zhuanlan.zhihu.com/p/32335746
(3)AdaGrad算法
1)从AdaGrad算法中可以看出,随着算法不断迭代,r会越来越大,整体的学习率会越来越小。所以,一般来说AdaGrad算法一开始是激励收敛,到了后面就慢慢变成惩罚收敛,速度越来越慢。
(2)在SGD中,随着梯度的增大,我们的学习步长应该是增大的。但是在AdaGrad中,随着梯度g的增大,我们的r也在逐渐的增大,且在梯度更新时r在分母上,也就是整个学习率是减少的,这是为什么呢?这是因为随着更新次数的增大,我们希望学习率越来越慢。因为我们认为在学习率的最初阶段,我们距离损失函数最优解还很远,随着更新次数的增加,越来越接近最优解,所以学习率也随之变慢。
(3)经验上已经发现,对于训练深度神经网络模型而言,从训练开始时积累梯度平方会导致有效学习率过早和过量的减小。AdaGrade在某些深度学习模型上效果不错,但不是全部。
优势:
在数据分布稀疏的场景,能更好利用稀疏梯度的信息,比标准的SGD算法更有效地收敛。
缺点:
主要缺陷来自分母项的对梯度平方不断累积,随之时间步地增加,分母项越来越大,最终导致学习率收缩到太小无法进行有效更新
————————————————
版权声明:本文为CSDN博主「bl128ve900」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bl128ve900/article/details/98211689