epoch 0

一切学习开始之前。

关于梯度下降的六则笔记。水看不见地形的全貌,只是一直往低处去;机器学会任何东西,用的也是这个办法。

从这里开始下降

上善若水。
水善利万物而不争,
处众人之所恶,
故几于道。

《道德经》第八章

式The update rule

更新规则

梯度下降只有这一行。它不需要看见整座山,只做三件事:感受脚下哪边更高,朝相反的方向走,每次只走一小步。然后重复,几千次,几百万次。

今天会写字、会画画、会下棋的那些模型,都是这样一步一步走出来的。

反者道之动,弱者道之用。
天下万物生于有,有生于无。

《道德经》第四十章

两千多年前的这句话,读起来像这行代码的注释。反是那个负号,永远朝坡度相反的方向走。弱是那个很小的 η,每一步只相信自己一点点。有生于无是 θ0,一切从随机的、一无所知的初始值开始。

那个起点,就叫 epoch 0。

一坡度 Gradient

身在此山

不识庐山真面目,
只缘身在此山中。

苏轼《题西林壁》

神经网络的损失地形动辄有数十亿个维度。没有人见过它的样子,模型自己也没有。

它唯一知道的,是此时此地哪个方向最陡。梯度不是地图,它只描述脚下这一小块地面,换一个位置就要重新测量。

这就够了。每一步只回应脚下的坡度,也能走到一个从未见过的谷底。人大概也是这样过日子的:看不清全局,只能对眼前的这一点坡度诚实。

图一
等高线只在你站立之处可见。把指针移进来,感受脚下的坡度;箭头指向 −∇L。

二步长 Learning rate

分寸

过犹不及。

《论语·先进》

每一步走多远,由学习率 η 决定。它可能是整个训练过程里最要紧的一个数。

η 太大,你会越过谷底,在两侧山壁之间来回摆荡,甚至越走越高。η 太小,每一步都稳妥,走了很久,还在半山腰。荀子说「不积跬步,无以至千里」,前提是跬步真的迈了出去。

对一道曲率为 λ 的山谷,η 一旦超过 2/λ,下降就会变成上升。学习率是一种分寸:你应该在多大程度上相信自己此刻的判断。

图二
同一道山谷,L(x) = x²/2,曲率 λ = 1。拖动 η,看它越过 1 和 2 时发生了什么。

三动量 Momentum

来路

过去从未死去,它甚至从未过去。

威廉·福克纳《修女安魂曲》

带动量的下降记得来路。它每一步的方向,是此刻的坡度加上过去速度的回声:v ← βv − η∇L(θ)

在狭长的峡谷里,没有记忆的下降会在两壁之间反复横跳,沿着谷底却走得很慢。动量让左右的摆动互相抵消,把一致的方向积累下来,它也因此能冲过一些浅浅的洼地。

惯性让人坚定,也让人固执。β 越接近 1,过去就越多地替你做决定,你也越可能在谷底绕上好几圈才停下来。

图三 无记忆 β = 0动量 β = 0.60
同一个起点,同样的 η。墨线没有记忆,蓝线带着动量。把 β 推向 1,看它开始绕圈。

四噪声 Stochasticity

偶然

山重水复疑无路,
柳暗花明又一村。

陆游《游山西村》

随机梯度下降每次只看一小批样本,所以它感受到的坡度总有一点偏差。

精确的下降会停在遇到的第一个洼地里,并以为那就是世界的最低处。噪声让它一直有点不安分。这点不安分常常能把它从一个平庸的谷底里摇出来,翻过山脊,看见另一片更低的地方。

后来人们学会了让噪声慢慢变小:早期多一些随机,后期多一些笃定。这个做法叫退火,是从冶金里借来的词。

图四
四十八颗小球撒在同一片地形上。「精确下降」不加噪声,它们各自停在最近的洼地;「退火」从较大的噪声开始,慢慢冷却。

五泛化 Generalization

遗忘

思考,就是忘记差异,就是概括,就是抽象。

博尔赫斯《博闻强记的富内斯》

训练损失可以降到零,只要把每一个样本都背下来。博尔赫斯写过一个叫富内斯的人,他记得每一片树叶、每一朵云的形状,也因此无法思考。

把训练数据拟合得分毫不差的模型,遇到没见过的数据就会手足无措。这叫过拟合。所以我们给模型加上正则,训练时随机丢掉一些神经元,在验证误差开始上升之前停下来。

学习需要一点遗忘。被忘掉的是噪声和细节,留下来的才是规律。

图五 训练样本从未见过的样本
训练误差0
测试误差0
实心点用来训练,空心点模型从未见过。滑块控制正则强度 λ(当前 0.003):向左,模型会穿过每一个实心点。

六收敛 Convergence

未济

物不可穷也,故受之以未济,终焉。

《周易·序卦传》

损失几乎从不会降到零。训练也没有一个自然的终点:我们只是在某一刻决定停下,保存权重,带着它去做别的事。

《周易》六十四卦,最后一卦不是「既济」,而是「未济」,事情还没有完成。它的六爻没有一爻处在该在的位置上,《彖传》却说:「虽不当位,刚柔应也。」

页首那个没有闭合的圆,禅宗叫它圆相,一笔画成,不再修改。有人会故意留一道缺口:不完满,所以还能继续。这个网站叫 epoch 0,它也还没画完。

epoch 1 me.epoch0.org 我的个人博客,记录之后的每一步。还在训练中,loss 暂时很高。