机器学习

梯度下降(gradient descent)

梯度下降是机器学习模型「自学」少犯错的方法。把模型的误差想象成一片广阔起伏的山地:模型内部那些数字(它的参数)的每一种取值,都对应着地形上的一个点,而那个点的高度,就是模型在那里有多「错」。梯度下降做的事很简单,就是往山下走。不管你站在哪里,先感受一下地面朝哪个方向坡度最陡,就朝那个方向迈一小步,然后不断重复——一遍又一遍,直到落进一个误差很低的谷底。

每一步迈多大,由一个叫学习率的旋钮来决定。步子很小,走得慢却稳当;步子很大,走得快却莽撞——一脚迈过头,就可能冲上对面的山坡弹来弹去,永远安顿不下来。把这个旋钮调到刚刚好,是训练模型时一门不动声色的手艺。

一个常见的误解,是以为模型能看清整片山地、一步跳到最低点。它做不到。它只知道脚底下这一小块地的坡度——也就是当下往下的方向,那个「梯度」。所以它只能蒙着头一步一步往下挪,这正是训练为什么动辄要走上百万步,也是为什么它有时会卡在一个并非最深的谷底里。

new parameter = old parameter − (learning rate × slope)

下山的一步:让每个参数逆着它的坡度挪一点;学习率决定这一挪有多大。

「梯度」不过是数学家对「坡度」的称呼——也就是上坡的方向和陡峭程度。这个方法可追溯到1847年,法国数学家柯西为求解天文方程而勾勒出它;一个世纪后,它成了训练几乎所有现代神经网络的主力工具。原本的梯度下降会用全部数据算出准确的坡度;它最常见的变体——随机梯度下降(SGD)——则在每一步只用一小批随机抽取的数据来估算坡度,牺牲一点精确度换来快得多的速度。

又称
steepest descent最速下降法