3.Gradient Descent
3.1 Tuning Learning Rates
梯度下降算法中最重要的参数是学习速率η。学习速率过小,迭代过慢,花费时间长;学习速率过大,会跃过最小值点,无法使损失函数降到最低,永远无法找到最小值点。如下图:
一种流行而简单的想法是每隔一段时间根据一些因素减小学习速率
- 开始时我们远离目标点,所以可以前进得快一些,使用较大的学习速率
- 在经历几次迭代之后,离目标点比较接近时减小学习速率
- 举例:可以假设学习速率是依赖迭代次数的,在第t次更新参数时(其中η是常数)
另外,需要注意的是不同的参数应该是设置不一样的学习速率。这是因为损失函数在不同的参数方向上陡峭程度不太一样。
最简单的一种方法是Adagrad(还有很多其他的方法)
化简后:
那么为什么可以用这样子的方法呢?
回顾一下,选择学习速率需要考虑以下几个因素:
- 越靠近目标点,学习速率越小 ----方法是η除以t+1的平方根,上图是红色部分
- 不同参数使用不同的学习速率 --所有之前关于参数w的微分的均方差就是达到这个目的,上图蓝色部分
在一个参数的时候,微分越大意味着距离目标点越远;但是当有两个参数时,虽然L关于w1的微分值大于L关于w2的微分值,但是距离目标点的远近却很难说,因为很可能L在w1方向上下降特别快,虽然微分值大了些,可能反而更加接近目标点。
反映损失函数L关于参数变化的快慢通常使用二次微分,但是有时候会遇到当参数很多的时候计算一次微分就很慢,再计算二次就花费太多的时间,所以Adagrad在不增加计算量的情况下,使用了一次微分来估算二次微分。
3.2 随机梯度下降 SGD
与一般梯度下降的不同点在于,损失函数只是针对一个样本的,每次针对一个样本来更新参数。SGD计算速度更快,虽然不是每次迭代都向着全局最优方向,但是大的总体方向是向着全局最优方向的。
3.3 Feature Scaling
对于不同的特征,如果数据量纲不同,那么x1和x2的变化对于y的影响不一样大,从而对于LOSS函数的影响也不一样大,所以在使用Gradient Descent时不同参数一定要使用不同的速率,除非用Adagrad不然比较难算。我们可以看到用一般梯度下降,更新参数的时候方向是顺着等高线方向,而不是朝着最低点方向,所以进行feature scaling后,参数更新比较有效率。
Feature Scaling 的方法
有很多feature scaling方法,常用的是标准化,对所有data每一维进行标准化
3.4 Gradient Descent Theory
梯度下降方法是基于泰勒展开的,所以要使得每次迭代后损失函数变小,必须保证学习速率η无限小。