第 01 章 / 第 01 课

模型究竟怎样学会:从梯度开始

用一个只有两个参数的例子,把预测、损失、反向传播与参数更新连起来。

中文讲解 · 约 3 分钟两道自测 · 可重复作答附官方视频 · 英文第 1 / 15 课
这一课,你会学到
  • 区分预测值、损失值和梯度
  • 手算一次链式法则
  • 验证一次真实的参数更新
术语速查与实践准备
损失
把预测误差变成一个可优化的数。
梯度
损失对参数的局部变化率;更新使用相反方向。
token
分词器产生的离散单位,不一定是一个字或单词。
embedding
由 token ID 查到的可训练向量。

浏览器概念实验可以直接做。运行文中的 PyTorch 代码前,按官方安装说明准备独立环境;完整模型训练的时间与内存按实际数据、模型和硬件测量。

你在这一课要弄清一个问题:参数原本只是一些数字,为什么经过训练后,它们会变成有用的模型?先不用大网络,用两个参数就可以看到整个过程。

先把预测和损失分开

设模型是 prediction = w × x + b。输入 x 是 2,正确答案 y 是 5,初始参数 w 是 1、b 是 0。模型给出的预测是 2,误差是 −3。如果用平方误差作为损失,L 就是 9。

预测回答“模型说什么”,损失回答“这次说得有多差”。损失必须是可用于优化的数值目标,它不是准确率,也不是一个参数。不同任务可以用不同损失,但训练需要把这个目标和参数连接起来。

用链式法则找到更新方向

把计算拆成三步:p = w×x+b,e = p−y,L = e²。反向计算时,先有 dL/de = 2e,再有 de/dp = 1,最后 dp/dw = x、dp/db = 1。

代入当前数值,dL/dw = 2×(−3)×2 = −12,dL/db = −6。这两个负数表示:在当前位置稍微增大 w 或 b,会让损失下降。它们是局部变化率,不是下一次参数应当直接取的值。

梯度下降使用 parameter = parameter − learning_rate × gradient。若学习率是 0.01,更新后 w=1.12、b=0.06,预测变成 2.3,损失变成 7.29。我们已经让模型往正确答案走近了一点。

用 PyTorch 核对这次计算

以下代码在已安装 PyTorch 的环境中可独立运行。输入、标签和初始参数都与手算保持一致。

import torch

w = torch.tensor(1.0, requires_grad=True)
b = torch.tensor(0.0, requires_grad=True)
x, y = 2.0, 5.0

loss = (w * x + b - y) ** 2
loss.backward()
print(loss.item(), w.grad.item(), b.grad.item())

with torch.no_grad():
    w -= 0.01 * w.grad
    b -= 0.01 * b.grad

print(((w * x + b - y) ** 2).item())

第一行输出应为 9、−12、−6;最后的损失接近 7.29。浮点数显示可能有微小误差。no_grad() 让更新参数这一步不进入新的求导图;真正训练多个批次时,还需要清空旧梯度。

这一步怎样延续到语言模型

micrograd 视频把同一条链式法则扩展到计算图和神经网络。你观看时,重点追踪一个参数的梯度,而不是一口气记住所有类和函数。

下一课会把预测目标换成“下一个字符”。参数会更多,损失也会换一种表达,但“前向预测 → 计算损失 → 反向求导 → 更新参数”的结构仍然成立。先确认自己能够解释上述四步,再往下走。

读完之后,给理解一次反馈。

对 L = (w × x + b − y)²,取 x=2、w=1、b=0、y=5,手算梯度后用 PyTorch 核对。

本课参考资料

文章、例子与练习为本站原创讲解;官方视频与延伸资料保留作者来源。

核对日期 2026-10-14
核对实验结果,再留下完成记录。

完成记录与自测结果分别保存,不自动推断掌握程度。