一坡度 Gradient
身在此山
不识庐山真面目,
苏轼《题西林壁》
只缘身在此山中。
神经网络的损失地形动辄有数十亿个维度。没有人见过它的样子,模型自己也没有。
它唯一知道的,是此时此地哪个方向最陡。梯度不是地图,它只描述脚下这一小块地面,换一个位置就要重新测量。
这就够了。每一步只回应脚下的坡度,也能走到一个从未见过的谷底。人大概也是这样过日子的:看不清全局,只能对眼前的这一点坡度诚实。
上善若水。
《道德经》第八章
水善利万物而不争,
处众人之所恶,
故几于道。
式The update rule
梯度下降只有这一行。它不需要看见整座山,只做三件事:感受脚下哪边更高,朝相反的方向走,每次只走一小步。然后重复,几千次,几百万次。
今天会写字、会画画、会下棋的那些模型,都是这样一步一步走出来的。
反者道之动,弱者道之用。
天下万物生于有,有生于无。
两千多年前的这句话,读起来像这行代码的注释。反是那个负号,永远朝坡度相反的方向走。弱是那个很小的 η,每一步只相信自己一点点。有生于无是 θ0,一切从随机的、一无所知的初始值开始。
那个起点,就叫 epoch 0。
一坡度 Gradient
不识庐山真面目,
苏轼《题西林壁》
只缘身在此山中。
神经网络的损失地形动辄有数十亿个维度。没有人见过它的样子,模型自己也没有。
它唯一知道的,是此时此地哪个方向最陡。梯度不是地图,它只描述脚下这一小块地面,换一个位置就要重新测量。
这就够了。每一步只回应脚下的坡度,也能走到一个从未见过的谷底。人大概也是这样过日子的:看不清全局,只能对眼前的这一点坡度诚实。
二步长 Learning rate
过犹不及。
《论语·先进》
每一步走多远,由学习率 η 决定。它可能是整个训练过程里最要紧的一个数。
η 太大,你会越过谷底,在两侧山壁之间来回摆荡,甚至越走越高。η 太小,每一步都稳妥,走了很久,还在半山腰。荀子说「不积跬步,无以至千里」,前提是跬步真的迈了出去。
对一道曲率为 λ 的山谷,η 一旦超过 2/λ,下降就会变成上升。学习率是一种分寸:你应该在多大程度上相信自己此刻的判断。
三动量 Momentum
过去从未死去,它甚至从未过去。
威廉·福克纳《修女安魂曲》
带动量的下降记得来路。它每一步的方向,是此刻的坡度加上过去速度的回声:v ← βv − η∇L(θ)
在狭长的峡谷里,没有记忆的下降会在两壁之间反复横跳,沿着谷底却走得很慢。动量让左右的摆动互相抵消,把一致的方向积累下来,它也因此能冲过一些浅浅的洼地。
惯性让人坚定,也让人固执。β 越接近 1,过去就越多地替你做决定,你也越可能在谷底绕上好几圈才停下来。
四噪声 Stochasticity
山重水复疑无路,
陆游《游山西村》
柳暗花明又一村。
随机梯度下降每次只看一小批样本,所以它感受到的坡度总有一点偏差。
精确的下降会停在遇到的第一个洼地里,并以为那就是世界的最低处。噪声让它一直有点不安分。这点不安分常常能把它从一个平庸的谷底里摇出来,翻过山脊,看见另一片更低的地方。
后来人们学会了让噪声慢慢变小:早期多一些随机,后期多一些笃定。这个做法叫退火,是从冶金里借来的词。
五泛化 Generalization
思考,就是忘记差异,就是概括,就是抽象。
博尔赫斯《博闻强记的富内斯》
训练损失可以降到零,只要把每一个样本都背下来。博尔赫斯写过一个叫富内斯的人,他记得每一片树叶、每一朵云的形状,也因此无法思考。
把训练数据拟合得分毫不差的模型,遇到没见过的数据就会手足无措。这叫过拟合。所以我们给模型加上正则,训练时随机丢掉一些神经元,在验证误差开始上升之前停下来。
学习需要一点遗忘。被忘掉的是噪声和细节,留下来的才是规律。
六收敛 Convergence
物不可穷也,故受之以未济,终焉。
《周易·序卦传》
损失几乎从不会降到零。训练也没有一个自然的终点:我们只是在某一刻决定停下,保存权重,带着它去做别的事。
《周易》六十四卦,最后一卦不是「既济」,而是「未济」,事情还没有完成。它的六爻没有一爻处在该在的位置上,《彖传》却说:「虽不当位,刚柔应也。」
页首那个没有闭合的圆,禅宗叫它圆相,一笔画成,不再修改。有人会故意留一道缺口:不完满,所以还能继续。这个网站叫 epoch 0,它也还没画完。