把大模型从“会说话的黑箱”拆成可理解的计算链路:文本如何变成向量,向量如何互相看见,最后如何逐 token 生成答案
| 环节 | 它解决什么问题 | 你应该抓住的直觉 | 常见误解 |
|---|---|---|---|
| Tokenization | 把连续文本变成模型可处理的离散编号 | 模型不是直接读字词,而是读 token 序列;细节见 Tokenizer / 词表 | 把 token 等同于汉字、英文单词或语义单位 |
| Embedding | 把 token id 映射成高维向量 | 向量是模型内部的工作语言 | 以为 embedding 本身已经“理解”完整语义 |
| Position | 让模型知道 token 的顺序 | 同样的词在不同位置,作用可能不同;细节见 位置编码 / RoPE | 以为 Transformer 天生知道顺序 |
| Self-Attention | 让每个位置读取其他位置的信息 | 每个 token 都在问:我现在该看谁 | 以为 attention 就等于人类注意力 |
| Feed Forward | 对每个位置做非线性特征变换 | Attention 负责混合信息,FFN 负责加工信息;细节见 MLP / FFN / SwiGLU | 只记住 Attention,忽略 FFN 的容量作用 |
| Logits / Sampling | 给所有候选 token 打分并采样 | 生成不是一次写完,而是一步一步选下一个 | 以为模型内部先有完整答案再输出 |
| 读法 | 链路顺序 | 关键问题 | 继续下钻 |
|---|---|---|---|
| 训练视角 | 文本样本 → chat template / packing → token id → causal mask → forward → logits → next-token loss → 反向传播 | 模型为什么能从大量文本里学到条件概率、格式、模式和部分世界知识? | 语言建模目标 / Batch / Mask / Packing / 优化器 / Loss |
| 推理视角 | 用户消息 → message serialization → token id → prefill → KV cache → decode loop → logits → softmax / sampling → 新 token | 为什么输入越长首 token 越慢,输出越长总耗时越高? | Chat Template / 推理计算 / KV Cache / 解码 / 采样 |
| 工程视角 | 请求上下文 → token 预算 → 截断 / 压缩 → 模型路由 → 参数配置 → 流式返回 → Trace / Eval | 为什么同一个模型在不同上下文、参数、路由和后处理下表现差别很大? | 上下文组装 / 模型路由 / 一次请求的一生 |
底层理解不要把概念散着背。最稳的顺序是:消息先变成 token 序列,token 查表变成向量,位置机制注入顺序,Transformer block 反复混合和加工信息,最后输出 logits;训练时 logits 接 loss,推理时 logits 接采样。大多数 AI 工程问题,最后都能回到这条链路上的某个位置。
Token 是模型的输入颗粒度。你在 Prompt 里写的是人类文本,模型实际处理的是一串 token id。上下文窗口、成本、分块、缓存和生成速度,最终都会回到 token 数量。
| 概念 | 作用 | 可以怎么理解 | 边界 |
|---|---|---|---|
| Input Embedding | 把 token id 查表成向量 | 每个 token 有一组可训练坐标 | 单个 token 向量不等于完整语义 |
| Position Encoding | 给 token 注入顺序信息 | 让模型区分“猫追狗”和“狗追猫” | RoPE / position ids / 长上下文外推 |
| Hidden State | 每层 Transformer 后的位置表示 | 同一个 token 随上下文逐层改变含义 | 不能把它当成固定词典解释 |
| Output Projection | 把最终向量投回词表分数 | 问所有 token:谁最可能是下一个 | 高分不代表事实正确,只代表模型条件概率高 |
模型内部的 token embedding 是训练模型的一部分;RAG 常说的 embedding 通常是把句子、段落或文档编码成检索向量。二者都叫 embedding,但一个服务于模型计算,一个服务于语义检索。
Q 像“我现在想找什么信息”,K 像“我这里有什么特征可被匹配”,V 像“如果你看我,我能提供什么内容”。Attention 先用 Q 和 K 计算相关性,再按权重混合 V;更细的多头、mask、GQA/MQA 和 KV Cache 关系见 QKV / 注意力头机制。
Attention(Q,K,V) = softmax(QK^T / sqrt(d_k)) * V
Decoder-only 大模型生成时,只允许当前位置看见过去 token,不能偷看未来 token。这就是为什么它可以被训练成“预测下一个 token”的机器。
| 模块 | 职责 | 为什么需要 |
|---|---|---|
| LayerNorm / RMSNorm | 稳定每层输入分布 | 深层网络训练更稳定,梯度更可控;细节见 Norm / Residual |
| Attention | 跨位置混合上下文信息 | 让每个 token 的表示受其他 token 影响 |
| Residual Connection | 把原输入绕过子层加回来 | 避免深层网络丢失原信息,帮助梯度传播;细节见 残差流 |
| Feed Forward Network | 对每个位置做非线性变换 | 提供模型容量,完成特征加工和组合;细节见 MLP / FFN / SwiGLU |
| Stacking | 多层重复同类结构 | 低层偏局部模式,高层逐步形成更抽象表示 |
Encoder-only: 适合理解和分类,例如 BERT 路线。
Decoder-only: 适合自回归生成,是多数通用 LLM 的主流路线。
Encoder-Decoder: 适合输入到输出的转换任务,例如早期机器翻译和部分序列到序列模型。
| 参数 / 机制 | 影响 | 适合场景 | 风险 |
|---|---|---|---|
| Temperature | 控制分布尖锐程度 | 低温用于事实、抽取、格式化;高温用于创意 | 温度高更发散,温度低也不保证正确 |
| Top-p / Top-k | 限制候选 token 范围 | 控制随机性,避免极低概率候选 | 限制过强会让输出僵硬 |
| KV Cache | 缓存历史 Key / Value | 长输出和多轮生成加速 | 长上下文显存占用会快速增长 |
| Stop Sequence | 遇到特定片段停止生成 | 结构化输出、工具调用、模板边界 | 配置错误会提前截断或停不下来 |