Gradient Descent
1、Gradient Descent的基本操作
回顾一下机器学习的步骤,定义一个Model(function set),利用损失函数评估function的好坏,最后利用gradient descent 方法找到最优的function。
梯度下降法就是找到最优的参数解,使得损失函数loss function最小。
一开始我们先随机生成一组参数,之后随着梯度计算来更新我们的参数,来找到更合适的参数使得loss 逐渐减小。
其中,η 指学习率,可以简单理解为参数移动步伐的大下
2、Gradient Descent的几个小tips
在训练过程中,你设定的η学习率可能过大或过下导致你的训练效果并不好,如下图所示:
第一类tips就是自动调节学习率,在离最低点(最优点)远的时候,我们就把学习率设大一点),在随后逐渐离最优点越近的时候,把学习率设小一点,这样就不会使训练速度过慢或是虽然快了但却不小心越过了最优点。
这里针对第一类tips就是
- Adagrad
**引申:**根据我们最后化简后的式子来看,当梯度增加的时候,移动的会多一点,但是分子位置增大后导致,移动的会少一点,这就产生了矛盾。
我们应该如何解释这个矛盾呢?李老师给出了以下解释,我在这里把自己理解的重点提出来,建议看视频食用
一篇论文指出,这样是为了造成强烈的反差,我理解的是为了敏感反映梯度的大小变化。
例如:
从导数的角度来分析,
在单个参数的情况下,我们比较两个点的梯度大小,只和一阶导数有关,为了找到最优解,我们移动的步伐大小和二阶导数有关。且正好除以二阶导数使我们最好的移动大小。
当放在两个参数的情况下时,在不同维度下,两个点的梯度是没有办法进行比较的。比如上图中的b,d两个点。
所以我们就引入二阶导数:
现在我们如何理解下图这个式子?
我们对这两个维度分别进行一阶导数和二阶导数的求导,对采样点进行均方根就能近似的表示二阶导数的大小,比如左图就比较平稳,值就小,右图比较陡峭,值就大。这就是公式中采用均方根的理由。
- Tip 2 SGD
SGD的梯度下降,之前是训练一组数据更新一次参数,SGD是一个example就更新一次参数。对比结果如下:
- tip 3 Feature Scaling
Feature scaling就是把input feature的range弄成一样的。
具体做法就是对 input feature 做normalization
3、Gradient Descent为什么会work?(原理)
问题的导入:
从上图,我们来把我们寻找梯度的过程进行解释,从起始点开始,以起始点为中心,画一个圆,在这个圆内寻找最佳的方向和移动步伐。
利用泰勒展开公式:
利用泰勒展开公式将我们的损失函数进行处理:
继续化简,其中,S作为常数,可忽略不进行考虑
为了使乘积最小,我们把他们类比为上图中的向量,是最小既是两个向量夹角180,以圆的半径为长度所形成的步伐是最优的。
再进行化简即可得到我们梯度下降的公式
4、Gradient Descent的局限
梯度下降的局限性:就是局部最小值