前八课走的全是前向:数据从输入一路流到输出。 可模型里那几亿个数字是怎么变好的?它还一次都没学过。 这一课补上另一半:交叉熵(衡量它有多惊讶)、梯度(往哪个方向拧能少惊讶一点)、学习率(一次拧多大)。 这一课之后,「亲手把它训出来」的零件就齐了。
先滚一个球。下面是一座山谷:横轴是模型里的某一个参数 w, 纵轴是损失(越靠下越好)。小球站在山上,它要走到谷底。 点「让它滚下去」,或者自己一步一步点。
你被蒙着眼放在山坡上,要走到谷底。你能做的只有一件事:用脚感受一下哪边最陡,然后往那个方向迈一步。
真实模型里,这座山不是一维的,而是几亿维的(每个参数一个方向), 但道理完全一样:算梯度(反向传播,第 11 课)→ 迈一步(优化器,第 12 课)→ 重复。
第 9 课模型吐出来的是一张分布:20 个字各有一个概率。 怎么用一个数字概括「它这一把答得好不好」?
答案朴素得惊人:看它给正确答案打了多少概率, 然后取 −log。给得越高,损失越小;给得越低,损失越大。 这个名字叫交叉熵。
还有一件必须交代的工程细节。我们的任务是「猜下一个字」, 所以一句话里每一个位置都能算损失。但其中一大半是套话:
样本「十五加一百一十五等于?一百三」一共 13 个要预测的位置, 答案从第 11 个字开始(「等于?」之后),只有 3 个。 训练时就把前面那 10 个位置的损失权重设成 0。
现在我们知道「错了多少」。接下来要回答的是:每个参数该往哪边挪?答案就是梯度 —— 损失对某个参数的斜率。
演示那座山谷是 loss(w) = (w − 3)²,最小值在 w = 3。 它的梯度是:
照着 lr = 0.1 走五步,每一步都能按计算器核对:
看出来了:离谷底越远,梯度越大(步子越猛);越靠近谷底,梯度越小(自动刹车)。 这就是为什么梯度下降能稳稳收敛,不用人工调步子 —— 除非学习率太大。
真实模型里没有「几亿维的山谷」这种图,但每个参数都在做同一件事:算自己那一维的斜率,往反方向挪一点点。 把「每个参数的斜率」一次算出来,就是反向传播(第 11 课)—— 它是把损失沿着网络一路往回传,用链式法则逐层求出每个参数的梯度。
梯度告诉你方向,但迈多大一步是你定的。这个「步子大小」就是学习率, 它是训练里最要紧的一个旋钮。
到这里,训练的四个零件就齐了:损失(错多少)、梯度(往哪拧)、学习率(拧多大)、循环(重复几万次)。 下一课把「梯度怎么一次算出来」这件事讲透(反向传播), 再下一课把整套训练循环装起来 —— 然后你就能亲手训出第 3 课那个模型了。
训练就四件事:损失衡量「错得多离谱」——−log(模型给正确答案的概率),瞎猜的水平是 ln 20 = 2.995732,给 25% 时是 1.386294;梯度告诉每个参数「往哪边挪损失会降得最快」;学习率决定「一次挪多大」——太小磨蹭、太大震荡甚至发散; 最后循环几万次。 两个容易被忽略的细节:问题部分的损失要屏蔽(那是送分题, 只会让数字好看),以及训练 loss 低 ≠ 模型好(它只说明背得熟)。 真实训练的 loss 曲线和页首那个小球是同一件事:一开始掉得飞快,后来几乎不动。