优化与训练

学习率(learning rate)

/ LUR-ning rayt /

学习率,是模型在学习时每一步迈得有多大。想象往谷底走下坡:坡度告诉你该朝哪个方向,而学习率决定你每次跨多远。步子极小,你最终能到,但慢得叫人难受;步子巨大,你可能一跃越过整个谷底,落到比出发点还高的地方,来回剧烈弹跳。

从技术上说,当梯度告诉你「把这个权重朝这个方向调」之后,学习率就是那个控制调整量到底有多大的乘数。学习率为0.1,每一步走的距离是0.01的十倍。它几乎总是最该调对的那一个超参数:差上十倍,训练就可能彻底失败——要么发散成一团乱码(太高),要么爬得太慢以至于永远练不完(太低)。

没有什么神奇数值,因为合适的步长取决于损失地形的形状,而你事先看不见那形状。于是人们去搜索:取几个跨越数量级的值(0.001、0.01、0.1)试一试,盯着损失曲线,挑出那个仍能稳定训练的最大学习率。现代实践很少把它固定不变——通常是开头先「热身」升上去,再随时间「衰减」下来,这正是学习率调度的活儿。

同一个模型,三种学习率。取0.5,损失没几步就爆炸到无穷大(迈过了头)。取0.00001,跑了几千步损失几乎没动(在爬)。取0.01,它平滑地一路滑到一个不错的值。只有动手试,才知道哪个是哪个。

太大会迈过头;太小在爬;恰好则一路滑下。

如果你的损失突然蹿到一个巨大的数,或者变成「NaN」,那几乎总是学习率太高了。训练一炸,这就是第一个该往下调的旋钮。

又称
step sizelr学习率步长學習率步長