1. 自适应学习率调整(Adaptive Learning Rate)
1.1 为什么需要调整学习率
首先认识一个现象.Training stuck ≠ Small Gradient
训练卡住的原因不一定是因为 gradient 太小,即critical point,也有可能是因为振荡.
怎么看出是因为振荡导致训练 loss 降不下去呢:在训练过程中,gradient的大小有较大的波动(红色框中),loss的变化可能就是左图的绿箭头.而产生振荡的原因就是learning rate设定太大.
实际上,如果仅仅使用gradient下降的方式,是很难走大局部最小点或者鞍点的,我们往往需要采用其他优化方式.比如下面那张图,使用gradient下降的方式是很难画出来的.所以在实际训练中,如果训练卡住了不一定是因为 critical point.
1.2 为什么非critical point训练也可能被卡住
我们举一个简单的例子.有个error surface 是凸面,横轴参数的loss变化很小,而纵轴参数的loss变化快,坡度陡峭.黑点是初始点,叉叉是 loss 最低点.假如设置个较大的 learning rate,纵轴参数更新时会振荡;假如设置个较小的 learning rate,纵轴参数能较好更新,而横轴参数却更新很慢,因为横轴坡度本来就平缓,再设个小的 lr 更新速度当然更慢了!!所以没有哪个 learning rate能一劳永逸,适应所有参数更新速度!!