《线性回归求解》中介绍了「梯度下降大法」的原理
即
从起点开始,沿着「梯度」方向一步一步走到「谷底」
其中,引入了一个叫做「步长」的东西
指的是沿着梯度方向迈出多大步伐
也可以叫作「学习速率」
记作
那么,取多少合适呢?
先保守一点,取一个比较小的值,看看有什么问题
上图中,太小了,以至于经过了N此迭代之后,损失值缺失在减小
但减小的很快
可能你会说,那就把设置小点就可以了嘛
只要有足够的时间,一定能走到「谷底」,还研究个啥
实际上,从梯度下降的计算逻辑中可以知道
(参考:《线性回归求解》)
每走一步,都要把所有样本的误差计算一遍,这是很耗费资源的
试想一下你的训练集有1000万个样本,需要多大的计算量
那就把步子迈大些看看
这个图中,步子甩开了
但是,刚走两步,就越过最低点了
越过最低点会有什么问题呢?
运气好的话,会左右震荡着到达最低点;运气不好的话会左右震荡无法收敛、甚至发散
就像下图
那么,问题来了
为什么不能在「谷底」两边震荡着收敛呢?
先带着这个问题回头看很小的情况
是不是不管设置的多么小,都很有「越过谷底」的可能?因为不管怎么设置,都不太可能在迭代的过程中正好命中「谷底」,只要有丝毫偏差,就越过谷底了。
那岂不是不管多么小,都很可能会发散出去?
要解答这两个问题,就需要再深入了解一下「梯度」了
梯度的大小
之前说「梯度」是损失函数值变化地最快的方向,实际上,除了方向,它还有大小
梯度的大小指的是沿着梯度方向时,损失函数变化的速度
例如,在某一点上,沿着梯度方向前进1个单位,损失函数值减少了5,那么在改点的梯度的大小就是:5/1 = 5
看下图
图中标记的几个点,负梯度方向毋庸置疑,都是水平向右;而梯度的大小则是越来越小(箭头长短表示大小)
因为损失值 J 的变化速度越来越慢,函数越接近谷底越平坦,谷底的梯度大小为0
回到上边的问题
问题1:步长很小,会不会越过谷底?
不会!因为越往谷底处,梯度大小越小,这么小的梯度乘一个很小的步长,越不过谷底
问题2:步长很大,越过了谷底,为什么会不收敛或者发散?
越过谷底后,首先梯度方向会反过来,梯度大小可能变大、变小或不变。
如果梯度大小变大,那么梯度乘步长会更大,这样就左右震荡着发散出去;
如果梯度大小不变,那么就会左右震荡,永远不能收敛;
如果梯度大小变小,则会震荡着到达最低点
总结
实际应用中,很长时间都会用来调整、优化「学习速率」
选择对合适的步长,才能高效、准确的完成学习任务
关注公众号,获取更多内容~
领取专属 10元无门槛券
私享最新 技术干货