数学与实现补充
从自动求导到小型语言模型的实践支线
沿着对象与状态理解本章
训练的一批数据里,输入和正确后继已经给定,因此可以对多个位置一起计算预测误差,但因果mask仍禁止偷看未来。读训练公式时先分清前向、损失、反向与更新;backward并不意味着参数已经改变。
下方图解的固定输入在“输入与适用条件”中声明。它用于解释本章机制,不与本章其他独立例子的数值暗中接续。
训练:给每个位置一道“下一项”题
为什么训练看完整句,生成却只能往前走?
训练时答案放在试卷的评分区,所以各位置的题目可以同时准备;mask负责不让模型读到自己的答案。生成时后续Token还未决定,下一题的前缀依赖本题选择。两者共享因果预测目标,但已知信息不同。
输入与适用条件:标签对齐使用5项序列;单位置交叉熵与PAD平均分别是明确独立的小例,不假称那些概率来自对齐图的模型。
1 / 5 · 把输入和目标错开一格
窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。
完整教学序列为“我/爱/学习/!/EOS”。输入用前四项,目标用后四项。每个输入位置预测的是其后一个真实Token。
输入=[1,2,3,5];目标=[2,3,5,6]默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。
为什么需要
用清晰的预测任务,把参数更新与语言序列关系连接。
怎样实现
正确移动标签、限制可见性、屏蔽无效目标、按有效数归一化。
可能的代价与误解
偷看未来会产生漂亮但虚假的训练成绩;训练样本重复或泄漏也会高估泛化。
如何判断是否做对
用极小固定序列验证每个输入位置和目标位置,再验证PAD不影响有效损失。
必要数学与实现基础
向量、矩阵、条件概率、对数、导数和链式法则是理解小型语言模型的入口。深度学习教材提供基础,CS336和从零实现课程把概念接到模型。无需先学完全部数学才实验,但每个公式都应能解释量的含义。[S191][S005][S193]
向量表示特征,矩阵做变换,点积计算相容性,softmax归一化分数,负对数似然惩罚真实目标概率过低。运算角色不意味着每个维度都对应人能命名的概念。
一次梯度更新
原创例子:y=wx+b、L=(y-t)^2。x=2、t=5、w=1、b=0时,y=2、L=9;梯度dL/dw=-12、dL/db=-6。学习率0.1更新后w=2.2、b=0.6,恰好y=5。这是特定数值巧合,不代表梯度下降一轮总能最优。
自动求导按计算图传播梯度,不替你判断损失目标正确。计算梯度与优化器更新参数不同;推理通常不需要训练所用梯度图。[S194]
从字符模型连接完整链路
原创实验可用自有短文本建立字符词表,构造输入与右移目标,训练小型自回归模型,再采样。字符级便于教学,不是现代子词Tokenizer的完整替代。
Token张量常为B×T,Embedding后B×T×D,注意力在序列位置间计算,输出每个位置对词表的分数。因果Mask和目标右移防止偷看答案。nanoGPT提供简洁实现入口,本书未声称训练或复现其成绩。[S192]
数据切分与泛化
训练集更新参数,验证集选配置,测试集做较独立评价。反复看测试改模型会使它变成开发数据。相邻或近重复内容随机切分可能泄漏,应按文档、时间或来源考虑。[S023][S005]
原创例子:README旧版训练、新版测试,可能大量重合,不能证明新项目泛化。只跑通pipeline也不等于理解目标对齐和过拟合。[S001]
五个完成标准
指出Tokenizer输出;追踪Embedding和注意力维度;手算softmax;解释损失;说明推理为何不更新权重。随后做控制实验:去Mask是否泄漏,打乱目标会怎样,小数据是否过拟合,温度改变分布还是事实验证。
配套实验无需API,帮助隔离机制,不代替真实模型评测。底层知识最终服务工程诊断:缓存不是记忆,压缩不是训练,工具结果只是新增输入,长窗口不是约束保证。
自检:训练损失下降测试变差?可能过拟合或分布差异,不能直接叫更聪明。小实验能证明商业Agent质量?不能,只能解释局部机制。
逐项中文讲义
保留拓展阅读目录编号与A/B/C优先级;每项包括机制解释、边界与原创练习。
B16.1 · 从自动求导到语言模型
对应资料:Neural Networks Zero to Hero
Zero to Hero从基础神经网络与自动求导逐步连接到语言模型,适合通过实现理解计算图、训练与生成。课程内容不等于使用Agent前必须完成的全部前置条件。
先掌握一条完整链:输入、运算、损失、梯度、更新、评价,再扩展模型结构。只复制训练代码容易忽略目标对齐与数据问题。
自动求导从计算图传播什么
输入与条件。y=(2w−10)^2,w=1。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1前向 | 2w−10=−8,y=64 | 保存必要中间量。 |
| 2局部导数 | dy/dz=2z=−16,dz/dw=2 | 链式相乘。 |
| 3梯度 | dy/dw=−32 | 优化器再决定怎样更新w。 |
把过程连起来。求导与更新是分开的步骤;这里不是模型自己“知道错在哪”的语言判断。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:手算一个标量模型的梯度,再用有限差分核对,说明误差来自哪里。
完成标准是能解释每步运算与训练目标,而不是只看到损失下降曲线。
拓展阅读目录事实依据 [S191] · 练习与工程推导为本书独立编写。
B16.2 · 最小GPT训练系统
对应资料:nanoGPT
nanoGPT以较简洁实现连接数据、GPT模型、训练与采样。它适合源码学习,但本书没有声称下载、训练或复现其性能。
阅读时应固定版本,追踪输入形状、因果掩码、目标右移与生成循环。训练代码和推理代码承担不同工作。
最小GPT训练也要正确移动标签
输入与条件。序列[A,B,C,D]。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1输入 | [A,B,C] | 每位置只能看过去。 |
| 2标签 | [B,C,D] | 预测下一个而非当前位置自己。 |
| 3错误反例 | 标签也用[A,B,C] | 可能学复制,损失低却不具备目标能力。 |
把过程连起来。从小模型做起也不能省掉因果与监督对齐。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:在纸上列出一个批次的输入与目标,检查是否发生未来信息泄漏,再说明推理时为何没有梯度更新。
完成标准是能够定位关键组件,不要求先训练出具有实用规模的模型。
拓展阅读目录事实依据 [S192] · 练习与工程推导为本书独立编写。
B16.3 · 从零训练的实践路线
对应资料:Stanford CS336
再次进入CS336实践支线时,重点是把模型、数据和系统实验组织成可复现过程。配置、版本和评价条件与代码同样重要。
训练异常可能来自数据、优化、精度或实现,不应首先假定需要更大模型。小实验有助于隔离变量。
一个可运行训练系统的检查顺序
输入与条件。模型输出突然NaN。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1输入层 | 检查ID范围与空batch | 先排数据错误。 |
| 2数值层 | 检查softmax全mask、除零、溢出 | 找首个非有限值。 |
| 3训练层 | 再查梯度、学习率、更新 | 不要一开始就扩大模型或换数据集。 |
把过程连起来。分层检查比随机调参更容易定位真正原因。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:设计一次只改变学习率的比较,固定数据与随机设置,记录训练及验证变化。
完成标准是能够提出并检验因果假设,而不是同时改动许多参数后只保留最好一次结果。
拓展阅读目录事实依据 [S005] · 练习与工程推导为本书独立编写。
B16.4 · 模型生态的实际使用
对应资料:Hugging Face LLM Course
Hugging Face工具生态帮助加载模型、Tokenizer与数据,并组织训练和推理。高层接口降低使用门槛,但不应掩盖底层输入输出含义。
同一pipeline名称可能使用不同模型和配置,结果需结合实际资源解释。库版本与模型文件也应记录。
Tokenizer与模型权重必须匹配
输入与条件。模型词表中ID2是“爱”,却用另一Tokenizer把2当“你”。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1形状 | ID仍在合法范围 | 程序不会一定报错。 |
| 2语义 | 查到了错误词表行 | 输入被系统性误解释。 |
| 3版本 | 绑定Tokenizer、模板和权重 | 不能只验证张量大小。 |
把过程连起来。数值合法不保证符号映射正确。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:把一次高层调用拆成编码、模型前向和后处理,检查每层形状与输出类型。
完成标准是能在高层接口失败时找到对应层,而不是只能反复修改自然语言Prompt。
拓展阅读目录事实依据 [S001] · 练习与工程推导为本书独立编写。
C16.5 · 数学、概率与优化基础
对应资料:Deep Learning Book
深度学习教材提供线性代数、概率、优化和网络基础。对本课程,最重要的是理解矩阵变换、条件概率、损失与链式法则之间的联系。
数学公式应能转成具体计算与维度检查。符号记忆不能替代理解,也不必为掌握全部理论而停止实际实验。
指数和对数必须说明底数
输入与条件。给概率p=0.5,交叉熵用自然对数。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1自然对数 | −ln0.5≈0.693147 | 单位为nat。 |
| 2二进制对数 | −log2(0.5)=1 | 单位为bit。 |
| 3比较 | 两者只差固定比例 | 不能把0.693和1当模型表现差异。 |
把过程连起来。数学定义和单位是算例准确性的一部分。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:手算softmax、交叉熵和一个简单梯度,解释数值变化对应什么学习信号。
完成标准是能读懂小模型核心公式,并知道哪些结论依赖特定假设。
拓展阅读目录事实依据 [S193] · 练习与工程推导为本书独立编写。
C16.6 · 张量、自动求导与模型训练
对应资料:PyTorch Documentation
PyTorch通过张量与自动求导支持模型实现。自动求导计算梯度,优化器更新参数,两者不是同一动作;推理通常不需要保存同样的训练图。
框架不会判断你的损失是否表达正确业务目标,也不会自动避免数据泄漏。维度、目标和训练/验证模式仍需检查。
梯度默认会累积,为什么要清零
输入与条件。同一参数两次backward各贡献2。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1第一次 | grad=2 | 已有累积。 |
| 2不清零第二次 | grad=4 | 是求和,不是自动替换。 |
| 3训练选择 | 需要梯度累积就按正确分母使用;普通下一步则清零 | 避免意外放大学习步长。 |
把过程连起来。API行为必须与训练意图一致。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:用本书无需依赖的标量实验先验证梯度,再在合适环境中迁移到张量库,比较结果。
完成标准是理解框架负责什么、开发者负责什么。本包不依赖某个当前PyTorch版本即可阅读和运行基础实验。
拓展阅读目录事实依据 [S194] · 练习与工程推导为本书独立编写。