梯度下降法中的几个问题
学习率如果过大会导致损失函数卡住无法下降,甚至上升,学习率如果过小则会导致收敛过慢。
Adagrad
Adagrad是选择学习率的一种常用方法。具体公式如下
对于这个公式的直观解释,是为了强调梯度的变化,突出反差
从数学上进行解释,如果我们拿一段二次函数作为例子,可以发现最好的学习率(从X0一步走到最低点)是一阶导数/二阶导数。由此我们推测其他情况下也是如此。
不过在模型较为复杂的情况下,计算二阶导数是很困难的。我们发现当二阶导数较大时,一阶导数比较陡峭,在上面采样更容易得到比较大的值。所以我们用多个一阶导数的平方和来代替二阶导数。
Stochastic Gradient Descent
注意图中损失函数的公式,以前我们一般选取所有数据作为参考,力求每一步都尽量做到全局最优,但是这样迭代会比较慢。
如果我们采用SGD,每次只用一个数据,完了就迭代一次,它的方向可能并不是全局最优的但是,迭代速度非常快。
feature scaling
当不同的特征变量大小范围差距过大时,它的损失函数就会像左边的椭圆形,这时候梯度下降的效率是比较低的,因为下降方向并不一定指向最低点。
所以我们可以想办法使得不同变量的大小范围相对接近。
常用的公式如图,当前变量减去同组的平均值再除以标准差。
梯度下降的数学本质
梯度下降的本质实际上是把损失函数近似为其一次的泰勒展开。
然而这种近似的前提是X足够接近X0,当学习率过大时,这种近似其实是不成立的,所以会出现损失函数不下降的情况。
同时,一阶泰勒展开也可能是不够精确的,所以我们也可以考虑二阶泰勒展开,这就是牛顿法。但是在实际过程中,函数的二阶微分计算是比较复杂的,所以我们通常还是只用一阶展开。
在实际问题中,我们还会碰到,损失函数停的位置并不是全局最低点,可能是局部最低点或者是鞍点。