返回 M01~M90 教材库
M01 · 当前课程教材已备 ≠ 学习已完成

M01:从运行环境到梯度更新

模型训练就是把数据变成张量,在计算图上得到损失,再用链式法则求每个参数对损失的影响,最后由优化器更新参数。

2026-08-24Python、Tensor、计算图、反向传播、优化器

内容类型:预习教材(不代表已完成)
日期:2026-08-24
阶段:P1 · AI Model Engineering 90
周次:W1 · 张量、梯度、autograd
节奏:周一概念与阅读
状态:教材已备;学习未完成
标签:Python、Tensor、计算图、反向传播、优化器

一句话定义

模型训练就是把数据变成张量,在计算图上得到损失,再用链式法则求每个参数对损失的影响,最后由优化器更新参数。

学习目标

  1. 能说明 Python、PyTorch 与 CPU/MPS 分别承担什么角色。
  2. 能区分张量的 shape、dtype、device 与 requires_grad。
  3. 能画出 parameter → prediction → loss → gradient → update 的闭环。
  4. 理解反向传播是链式法则的高效复用,而不是神秘的自动调参。

核心知识

环境清单至少包含 Python 版本、包管理方式、PyTorch 版本、可用设备、默认 dtype 和随机种子。CPU 是通用基线;Apple Silicon 上的 MPS 可加速部分张量计算,但算子覆盖、精度和性能未必与 CPU 完全一致,所以“能识别设备”比“强行使用加速”更重要。

张量可以理解为带有规则形状的数字容器。标量是 0 维张量,向量是 1 维,矩阵是 2 维,更高维常用于 batch、sequence、channel 等结构。shape 决定各轴长度;dtype 决定数值表示和精度;device 决定存储及计算位置;requires_grad 决定是否追踪与该张量有关的运算。

计算图记录“结果怎样由输入得到”。叶子节点通常是可训练参数或输入,中间节点是加法、乘法、激活等运算,末端是标量损失。正向传播算出预测和损失;反向传播从损失出发,把局部导数沿图反向相乘并累加。优化器读取参数的梯度,但它与求梯度是两件事:backward 负责计算,step 负责更新。

机制与推导

设单参数模型 ŷ = wx,平方损失 L = (ŷ-y)²。局部关系为 ∂L/∂ŷ = 2(ŷ-y),∂ŷ/∂w = x,因此链式法则给出 ∂L/∂w = 2(ŷ-y)x。若学习率为 η,最简单的梯度下降更新是 w ← w-η∂L/∂w。这个公式揭示训练闭环:参数影响预测,预测影响损失,梯度量化影响方向,学习率控制更新步幅。

多条路径汇入同一参数时,梯度需要相加;同一中间量被多次使用时,计算图能复用正向值并汇总反向贡献。autograd 的价值主要是可靠地组织这些局部求导,而不是改变微积分本身。

最小观察步骤

  1. 记录 Python 与 PyTorch 版本,不安装额外大型模型。
  2. 创建形状分别为 2×3 和 3×1 的张量,预测矩阵乘法结果的 shape。
  3. 令一个标量参数开启梯度追踪,计算平方损失并调用反向传播。
  4. 只观察参数值、损失和梯度;尚未运行时把数值位置留空。
  5. 画出 w、x、ŷ、L 四个节点和反向箭头,标注局部导数。

常见误区

  • 张量不是“只能在 GPU 上运行的数组”;它首先是结构化数值对象。
  • 梯度不是参数应该变成的值,而是损失对参数的局部敏感度。
  • optimizer 不负责创建计算图,也不会自动清空旧梯度。
  • MPS 可用不等于所有任务都更快;小计算的调度成本可能更高。
  • loss 下降只说明目标函数被优化,不能单独证明模型有用或可信。

场景连接

在交易风险模型中,一条特征经过权重形成风险分数,再进入损失函数。梯度表示“若微调该权重,训练损失将怎样变化”。这帮助区分模型训练机制与业务规则:梯度能优化可微目标,却不能自动决定漏报与误报哪个更昂贵。

自检问题

  1. backward 与 optimizer.step 的职责有何不同?
  2. 为什么训练通常要求损失最终是标量?
  3. 两条计算路径共同依赖参数 w 时,w 的梯度怎样形成?
  4. shape、dtype、device 中哪一项不匹配最可能直接导致运行错误?

专业课程对齐

  • PyTorch Autograd 教程:对应“自动微分、计算图与梯度累积”。阅读时把 requires_gradgrad_fnbackward()no_grad() 分别放回 parameter → prediction → loss → gradient 链路,不要只记 API。
  • MIT 6.S191:对应导论中的神经网络训练闭环。重点观察线性变换、损失函数、反向传播和梯度下降如何连接成一次参数更新。
  • Stanford CS229 Materials:选读监督学习与优化基础,用来补齐经验风险、梯度下降和向量化记号。

深入学习提示

先精读 PyTorch autograd 页面并手画 w → y_hat → loss 的计算图,再看 6.S191 的训练流程;CS229 只选读对应公式。代码观察点是叶子张量的 .grad 何时出现、连续两次 backward() 为何会累积,以及 zero_grad() 清理的究竟是什么。公式上亲手验证 L=(wx-y)^2dL/dw=2(wx-y)x。反例要比较:把参数 requires_grad=False、在 no_grad() 内计算、shape 不匹配、忘记清梯度,这四种失败分别发生在图构建、梯度记录、前向计算还是更新阶段。

学后填写区

  • 实际环境:____
  • 我画出的训练闭环:____
  • 最不清楚的概念:____
  • 是否需要回看链式法则:____
  • 实际学习日期与用时:____
学完后,请把自己的理解、练习结果和仍不确定的问题写入文末“学后填写区”,再到唯一进度账本更新状态。预先阅读后续教材不会自动增加完成数。