李宏毅《机器学习》第6讲——梯度下降
Review: 梯度下降法
在回归问题的第三步中,需要解决下面的最优化问题:
我们要找一组参数θ ,让损失函数越小越好,这个问题可以用梯度下降法解决。
假设θ有里面有两个参数θ1,θ2,随机选取初始值
然后分别计算初始点处,两个参数对L的偏微分,然后θ0减掉η乘上偏微分的值,得到一组新的参数。同理反复进行这样的计算。黄色部分为简洁的写法,▽L(θ) 即为梯度。η叫做学习率。
将梯度下降法的计算过程进行可视化
Tip1:调整学习速率
小心翼翼调整学习速率
调整学习速率
1.可视化损失函数曲线
如图左,假设从左边最高点开始,如果学习率调整的刚刚好,比如红色的线,就能顺利找到最低点。如果学习率调整的太小,比如蓝色的线,就会走的太慢,虽然这种情况给足够多的时间也可以找到最低点,实际情况可能会等不及出结果。如果学习率调整的有点大,比如绿色的线,就会在上面震荡,走不下去,永远无法到达最低点。还有可能非常大,比如黄色的线,直接就飞出去了,更新参数的时候只会发现损失函数越更新越大。
有很多参数的时候,可视化太复杂不现实。
2.可视化对损失函数的影响
如图右,将参数改变对损失函数的影响进行可视化。比如学习率太小(蓝色的线),损失函数下降的非常慢;学习率太大(绿色的线),损失函数下降很快,但马上就卡住不下降了;学习率特别大(黄色的线),损失函数就飞出去了;红色的就是差不多刚好,可以得到一个好的结果。
自适应学习率
随着次数的增加,通过一些因子来减少学习率
比如:
根据距离:通常刚开始,初始点会距离最低点比较远,所以使用大一点的学习率,update好几次参数之后呢,比较靠近最低点了,此时减少学习率
根据次数:随着次数增加减小学习率。
学习率不能是一个值通用所有特征,不同的参数需要不同的学习率
Adagrad算法
每个参数的学习率都把它除上之前微分的均方根。
Ada算法.png
σt:之前参数的所有微分的均方根,对于每个参数都是不一样的。
将Adagrad 的式子进行简化:
Ada简化.png
Adagrad的矛盾:
在Adagrad中,当梯度越大的时候,步伐应该越大,但下面分母又导致当梯度越大的时候,步伐会越小。
image
比如初始点在 x0,最低点为 −b/2a,最佳的步伐就是x0 到最低点之间的距离 |x0+b/2a|,也可以写成 | (2ax0+b)/2a |。而刚好|2ax0+b| 就是方程绝对值在 x0 这一点的微分。
这样可以认为如果算出来的微分越大,则距离最低点越远。而且最好的步伐和微分的大小成正比。所以如果踏出去的步伐和微分成正比,它可能是比较好的。
结论1-1:梯度越大,就跟最低点的距离越远。
这个结论在多个参数的时候就不一定成立了。
对比不同参数
上图左边是两个参数的损失函数,颜色代表损失函数的值。如果只考虑参数w1,就像图中蓝色的线,得到右边上图结果;如果只考虑参数w2,就像图中绿色的线,得到右边下图的结果。确实对于 a 和b,结论1-1是成立的,同理c 和b 也成立。但是如果对比
a 和c,就不成立了,c 比 a 大,但 c 距离最低点是比较近的。
所以结论1-1是在没有考虑跨参数对比的情况下,才能成立的。所以还不完善。
之前说到的最佳距离 | (2ax0+b)/2a |,还有个分母2a,对function进行二次微分刚好可以得到:
所以最好的步伐应该是:一次微分/二次微分。
Adagrad就是在不做多余运算的情况下考虑了二次微分。
Tip2:随机梯度下降法
Stochastic Gradient Descent
对比常规梯度和SGD
常规梯度下降法走一步要处理到所有二十个例子,但随机算法此时已经走了二十步(每处理一个例子就更新)。
Tip3:特征缩放
比如有个函数:
y=b+w1x1+w2x2
x1和x2的分布不同,可以通过scaling统一2个不同特征的分布。
为什么要这么做?
为什么要特征缩放
上图左边是 x1 的scale比 x2 要小很多,所以当 w1 和 w2 做同样的变化时,w1 对y 的变化影响是比较小的,x2对 y 的变化影响是比较大的。
坐标系中是两个参数的error surface(现在考虑左边蓝色),因为 w1 对 y的变化影响比较小,所以 w1 对损失函数的影响比较小,w1 对损失函数有比较小的微分,所以w1方向上是比较平滑的。同理 x2 对y 的影响比较大,所以 x2对损失函数的影响比较大,所以在 x2 方向有比较尖的峡谷。
上图右边是两个参数scaling比较接近,右边的绿色图就比较接近圆形。
怎么做特征缩放?
比较常规的一种方法:
特征缩放常规方法
梯度下降的理论基础
数学理论
梯度下降理论
比如在θ0处,可以在一个小范围的圆圈内找到损失函数细小的 θ1,不断的这样去寻找。
接下来就是如果在小圆圈内快速的找到最小值?
泰勒展开式
多变量泰勒展开式和简化
泰勒展开式太复杂了,这里不展开,有兴趣可以看Datawhale的课程笔记。
https://datawhalechina.github.io/leeml-notes/#/chapter6/chapter6?id=%e4%bb%80%e4%b9%88%e6%98%af%e6%a2%af%e5%ba%a6%e4%b8%8b%e9%99%8d%e6%b3%95%ef%bc%9f
梯度下降限制
梯度下降限制
容易陷入局部极值 还有可能卡在不是极值,但微分值是0的地方 还有可能实际中只是当微分值小于某一个数值就停下来了,但这里只是比较平缓,并不是极值点。