Flyingrtx / 大模型原理

第 01 章 · 大模型全景

从文字到下一个词

沿着一次真实的计算路径,拆开语言模型。

01先明确模型究竟在解决什么问题

给定一段前文,语言模型输出的是词表上“下一个词元”的条件概率分布。例如输入“我 喜欢 吃”,模型会同时为“苹果”“手机”和其他候选词打分,而不是直接从数据库取出一条回答。词元可以是一个字、子词或词的一部分,不一定是中文里的一个词。

整段文本的概率可以按链式法则分解为逐位置的条件概率。训练时,正确的后继词元直接来自原始文本;推理时,模型必须使用自己刚刚生成的词元继续预测。

02一次前向计算的完整路径

分词器把文本编码成整数序列。嵌入层用这些整数查表得到向量,位置机制补充顺序信息;多个 Transformer 块反复交换并变换信息。最后,输出层把末尾位置的表示映射为词表大小的分数,softmax 再把分数归一化。

设批大小为 B,序列长度为 T,词表大小为 V,隐藏维数为 d。输入编号形状是 [B,T],隐藏状态是 [B,T,d],最终分数是 [B,T,V]。形状是理解实现的第一条线索。

03训练与生成使用同一个网络,但工作不同

训练把真实序列右移一位构造目标,利用因果遮罩同时计算多个位置的预测,并反向更新参数。生成通常只取最后一个位置的概率,选择一个词元接到序列末尾,然后重复前向计算。

因此,“模型能算出概率”和“模型已经学会语言”是两回事。未训练网络也能输出合法概率,但这些概率还没有通过语料学习到有用的规律。

P(x₁…xₜ) = ∏ₜ P(xₜ | x₁…xₜ₋₁)

04本教程如何逐步搭起来

先建立文本、向量和预测目标,再研究注意力与 Transformer,最后连接训练、生成及后训练。右侧各实验使用小规模数据,便于追踪数字;涉及简化模型时,会明确它保留了哪一步、没有实现哪一步。

本章实验把“我 喜欢 吃 苹果”拆成输入和目标,给出均匀预测的交叉熵基线。它检查训练数据如何对齐,不冒充完整模型的训练结果。

自检:生成一个词元之后,为什么还需要再做一次预测?

因为下一次条件概率所依赖的前文已经改变。自回归模型把新词元加入上下文,再预测它之后的词元;一次前向计算并没有预先决定整段回答。

参考与延伸阅读

Raschka · 从零构建大语言模型 ↗Karpathy · Zero to Hero ↗
01文字 / 词元我 · 喜欢 · 吃02嵌入[0.2, 0.7, −0.3]03Transformer信息交换 × 多层04概率 / 采样词表概率 → 采样
沿计算路径开始
文字 → 词元 → 向量 → Transformer → 概率 → 下一个词
01 / 15