本课模式:三步走——手算一次交叉熵 → 学会读 loss 曲线 → 用缩放定律估算成本。做完你就有了「训练决策回到 loss 上回答」的心智。
📋 本课你将完成
- 手算过一次交叉熵(第 1 步)
- 能通过 train/val loss 判断正常/过拟合/欠拟合
- 用缩放定律公式估算过一次训练成本
- 说出缩放定律对你最实用的三条推论
- 认识四种失败模式并知道先查什么
步骤 1
手算一次交叉熵(15 分钟)
未完成🎯 这一步的目标:理解模型在优化什么——用最小例子亲手算一次。
python3▶ 预期输出(点开对照)
>>>
import numpy as np
true_token = 2 # 真实的下一个 token 是第 2 号
probs = np.array([0.2, 0.3, 0.5]) # 模型预测:第 2 号概率 0.5
loss = -np.log(probs[true_token])
print(f"loss = {loss:.3f}")
# 对比:如果模型很不确定(0.2)
loss2 = -np.log(0.2)
print(f"不确定时 loss = {loss2:.3f}(更大 = 更差)")▶ 预期输出(点开对照)
loss = 0.693 不确定时 loss = 1.609 (loss 越小 = 模型对真实 token 越确定 = 学得越好)
✅ 检查点:你能解释「交叉熵在惩罚什么」以及 loss 的方向。
步骤 2
学会读 loss 曲线(15 分钟)
未完成🎯 这一步的目标:用交互工具建立「曲线长什么样」的直觉——这是训练中最重要的一双眼睛。
▶ 预期输出(点开对照)
(见下方交互实验:切换正常/过拟合/欠拟合/学习率太大四种情况,看曲线形态)
▶ 预期输出(点开对照)
train ↓ / val ↓ = 正常 train ↓ / val ↑ = 过拟合(停或加数据/正则) 两者 flat = 学习率太小 / 数据有问题 / 模型太小 锯齿状 = 学习率太大
✅ 检查点:你能在 4 种曲线形态间正确判断。
步骤 3
用缩放定律估算成本(15 分钟)
未完成🎯 这一步的目标:把算力换算成钱——公式:FLOPs ≈ 6 × 参数量 × token 数。
python3 -c 'params = 0.5e9; tokens = 10e9; flops = 6*params*tokens', 'print(f"FLOPs = {flops:.2e}" )', 'print(f"≈ 租 A100 约 {flops/3.1e14/3600:.1f} 小时" )' # A100 约 312 TFLOPS BF16▶ 预期输出(点开对照)
FLOPs = 3.00e+19 ≈ 租 A100 约 26.9 小时 (0.5B × 10B tokens 一次全量训练 ≈ 27 卡时,按小时租约几十美元)
▶ 预期输出(点开对照)
7B × 140B tokens ≈ 5.9e21 FLOPs ≈ A100 数百小时(数百–数千美元) 记住:真实成本是 3–5 倍(中间实验浪费)——先小后大不只是方法论,是省钱
✅ 检查点:你能为自己的目标规模估算一次成本(公式 + 数字)。
🧪 交互实验 · loss 曲线解读器
四种情况切换着看——训练时你能一眼认出它们,就知道该调什么。
橙 = train loss,蓝 = val loss。先猜每种情况曲线长什么样,再切换对照——这是训练者最重要的直觉练习。
❓ 老师答疑(卡住了先看这里)
❓ 交叉熵为什么不是「正确率」?
正确率只看「选没选对」,交叉熵看「对真实 token 有多确定」。模型给 0.9 和 0.6 都是选对,但 0.9 明显学得更好——交叉熵能区分这种细微差异,梯度信息更丰富。
❓ val loss 为什么不降但 train 降?
过拟合信号:模型在背训练数据,没学到规律。检查:训练数据是否太少、模型是否太大、正则是否缺失。
❓ 缩放定律对我这种小规模有用吗?
非常有用。核心推论:①数据不够时模型再大也白搭;②先小后大是免费安全网(超参/数据配方先在 50M 验证);③小模型训 60% 步数的曲线可预示大模型。全是为你这种条件设计的。
❓ FLOPs 公式 6 是从哪来的?
前向 + 反向 ≈ 2×3 = 6 倍参数量×token 数(每个参数在前后向各被用约 3 次)。是工程估算,精确值随实现略有差异,但量级可靠。
📝 自测清单(全勾才算过)
- 手算过一次交叉熵(第 1 步)
- 能通过 train/val loss 判断正常/过拟合/欠拟合
- 用缩放定律公式估算过一次训练成本
- 说出缩放定律对你最实用的三条推论
- 认识四种失败模式并知道先查什么
全勾 → 节点 06 / 14 完成。未勾 → 回看对应步骤,别急着往前走。