目录
一、梯度下降法
梯度下降法(Gradient descent)是一个一阶最优化算法。 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索。如果相反地向梯度正方向迭代进行搜索,则会接近函数的局部极大值点;这个过程则被称为梯度上升法。
二、调整Learning rate
继《深度学习1——回归实例讲解》,假设我们得到的Loss Function函数如下图所示:
1、当learning rate调整得刚好(红色),顺着箭头很顺利地走到最低点;
2、当learning rate调整得太小(蓝色),顺着箭头需要花费更多时间才能走到最低点;
3、当learning rate调整得较大(绿色),步伐太大,无法走到最低点;
4、当learning rate调整得很大(黄色),箭头开始往高处走,甚至是飞出去了。
只有当参数为一个或两个时,我们才能用图表现出来,当参数超过三个时,我们无法将其可视化。
但我们可以可视化参数个数的更新和Loss值变化之间的关系:
1、当learning rate太小的话,Loss值下降得太慢;
2、当learning rate较大的话,Loss值一开始下降得快,但慢慢地不再变化;
3、当learning rate大小的话,Loss值开始增强甚至是飞出去了;
4、当learning rate刚好的话,Loss值的变化才是我们想要的结果。
三、Adagrad梯度下降法
1、前言
最流行和最简单的想法是:每隔几个epochs将学习率降低一些系数。
在最开始的时候,我们离目的地很远,所以需要使用较大的学习率;几个epochs之后,我们接近了目的地,所以我们开始降低学习率。
比如使用t分之一衰变:
但是Learning Rate不能一刀切完,所以需要给定不同的参数和不同的Learning Rate。
而一种称为Adagrad的算法思想是:将每个参数的Learning Rate除以其先前导数的均方根。
在批梯度下降法中,将w看成一个参数:
在Adagrad梯度下降法中,是参数w的先前导数的均方根:
2、实例
假设初始值是w0,计算在w0处的微分,并且σ0就是g0的平方再开方:
接下来再更新参数,计算出w2和σ1:
再更新参数,计算w3和σ2:
不断反复执行上述操作,从而得到一个和:
因此,在使用Adagrad算法时,我们可以得到最后的计算式子为:
对于上式的分子,当梯度越大时,那么参数更新的步伐越大;
但是对于上式的分母,当梯度越大时,那么参数更新的步伐越小。
那么分母的作用是什么呢?
解释1、分母的作用就是需要造成一个反差的效果:
比如有一种情况是:
前面的参数值很小,但到了第四个却很大。
另外一种情况是:
前面的参数值很大,但到了第四个却变得很小。
这就起到了一个反差的效果。
解释2、用于估算二次微分的值:
首先考虑一个二次函数:
将式子求导后,得到:
在二次函数上随机选取一个点x0做梯度下降,当踏出去的步伐为:
这是一个最佳值,而分子 就是求导后得到的式子,即:
所以说最好的步伐值是跟微分的大小成正比,而对于任何一个式子,最好的步伐值应该是:
那么当使用Adagrad算法时,如何计算最佳步伐值呢?
该式子的分子可以看成是一次微分,那么我们现在需要考虑的是如何估算二次微分的值。
考虑使用一次微分来估计二次微分,假设一个二次微分比较小的峡谷和一个二次微分比较大的峡谷:
然后将一次微分的值考虑进来,并随机获取几个点:
由图可知,在比较平滑的峡谷中,它的一次微分值都较小;在比较尖的峡谷中,它的一次微分值都较大。
因此当我们计算 时,即可用来表示二次微分的大小。
四、Stochastic梯度下降法
当做回归时,我们得到的Loss function是
当得到损失值后,便可以开始做梯度下降:
但Stochastic梯度下降法的思想却不同,它每次就随机选取一个值 ,这时计算的损失值只考虑某一个样本的值:
接下来进行参数的更新时,只需要考虑这一个样本的值:
普通的梯度下降法需要在考虑完所有的样本后才开始更新参数,结果如下图:
而Stochastic梯度下降法则是只需考虑一个样本的值。假设有20个样本值,那么就需要更新20次,结果如下图:
最开始是只考虑一个样本值,最后考虑所有的值,其更新的速度会更快。
五、特征缩放(Feature Scaling)
当预测宝可梦未来的CP值时考虑了两个自变量为x1和x2,其中 为宝可梦当前的CP值, 为宝可梦当前的生命值。那么模型为 。
如果 和 分布的范围不一样的话,即:
那么就需要做一个缩放(Scaling)的操作,得到结果:
这就可以让不同的特征值有着同样的缩放(Scaling),那么为什么要这样做呢?
对于式子 ,如果当 的取值为1,2......; 的取值为100,200......时,我们得到的损失值为:
因为 的取值较小,所以 对Y值的影响较小,所以在 这个方向上比较平滑;
因为 的取值较大,所以 对Y值的影响较大,所以在 这个方向上比较陡峭。
那么如果当 和 的取值均为1,2......的时候,那么得到的损失值情况如下:
那么特征缩放一般要怎么做呢?
现在假设有一组数据 ,每一组值又有一系列的特征值() ,()等等:
对于每一行的值,去计算它们的平均值 和标准差 ,然后选取第 r 列第 i 行的特征值,计算式子:
随后便可以得到所有行的平均值为0,并且方差值全为1。
六、总结
本文简单地讲解了一下什么是梯度下降法,同时通过《深度学习1——回归实例讲解》中的实例,说明了“Adagrad梯度下降法”和“Stochastic梯度下降法”的基本用法,最后使用宝可梦的假设模型来对特征缩放进行了简单讲解