Gradient Descent
学习率会出现以下四种不同的情况:
学习率太小,即图中蓝色的线,每次跨越的步长很小很小,梯度每次变化的值也小,模型要达到local minima,就必须需要更多的训练时间;
学习率太大,即图中绿色的线,每次跨越的步长会很大,很可能形成在山谷之间震荡的现象;
学习率特别大,即图中黄色的线,就很可能会直接跳出local minima,loss会越来越大;
学习率刚好合适,即图中红色的线,每次跨越的步长非常合适,达到local minima的时间也不需要特别多。
由于手动设置learning rate会导致很多问题,就出现了一些自适应的梯度调整方法。
刚开始训练时,我们离local minimum的距离还很远,因此可以使用稍大的learning rate;
在经过多次的训练后,离local minimum的距离已经很近了,所以这时可以使用小的learning rate;
Adagrad
AdaGrad算法分析
(1)从AdaGrad算法中可以看出,随着算法不断迭代,r(累积平方梯度)会越来越大,整体的学习率会越来越小。所以,一般来说AdaGrad算法一开始是激励收敛,到了后面就慢慢变成惩罚收敛,速度越来越慢。
(2)在SGD中,随着梯度的增大,我们的学习步长应该是增大的。但是在AdaGrad中,随着梯度g的增大,我们的r也在逐渐的增大,且在梯度更新时r在分母上,也就是整个学习率是减少的,这是为什么呢?
这是因为随着更新次数的增大,我们希望学习率越来越慢。因为我们认为在学习率的最初阶段,我们距离损失函数最优解还很远,随着更新次数的增加,越来越接近最优解,所以学习率也随之变慢。
(3)经验上已经发现,对于训练深度神经网络模型而言,从训练开始时积累梯度平方会导致有效学习率过早和过量的减小。AdaGrade在某些深度学习模型上效果不错,但不是全部。
思考
直观解释
gradient越大,函数值离minima的距离就越远这个说法不一定在所有情况下都是成立的。(只考虑一个 参数的时候成立)
对于图中的两个参数w1和w2,画两条直线,保持其中一个变量不变,得出另一个变量的变化曲线,分别对应右图中的曲线。在右图中,对于w1中的a点和w2中的c点,c点距离minimum的距离最近,但梯度却更大。因此在分析梯度和步长时,我们不能只考虑一阶导数的大小,还必须要要考虑二阶导数的大小
使用一阶导数的值来表示二阶导数的值。
Stochastic Gradient Descent
对于传统的梯度下降算法,损失函数L的计算包含了所有的样本;
随机梯度下降算法,损失函数L则只使用其中一个样本,计算效率可以提高很多.
Feature scaling
使不同量级的数据集都具有相同的规模,比如x2的都是大于100的值,经过feature scaling,就可以使x2的数值范围和x1相接近。
标准化:使之服从标准正态分布
Gradient Descent Theory
Limitation
在真实的实验环境中,我们往往会设置一个临界值(比如10−4),当该点的梯度小于该值(即≈0)时,就停止训练。
因此,gradient descent的限制是,gradient为0的点并不一定是local minimum,还有可能是saddle point,也有可能是接近于0的点