内容概览
这份教程通过从零构建一个字符级莎士比亚语言模型,拆解 ChatGPT 背后的核心机制。首先,文本被编码为整数序列,并按训练集与验证集切分;训练时从数据中随机抽取固定上下文长度的批次,让模型同时学习多个“根据历史预测下一个字符”的样本。最简单的 Bigram 模型只能依据当前字符预测下一字符,因此作者逐步引入位置编码、自注意力、多头注意力和逐 token 前馈网络,使不同位置能够按内容相关性交换信息。为了让更深的网络可以稳定优化,又加入残差连接、Pre-Norm 层归一化及 Dropout。模型扩大到约一千万参数后,验证损失降至约 1.48,并能生成形式上接近莎士比亚、但语义仍不连贯的文本。最后,教程将这个小模型映射到 GPT:二者都采用仅解码器 Transformer,但真实 ChatGPT 先以海量互联网文本完成预训练,再通过监督微调、偏好排序、奖励模型和强化学习,从文档补全器转变为可交互的助手。
更多内容
核心概念
教程中用于理解字符级 Transformer 与 GPT 的关键术语。
- 语言模型:对字符、子词或其他 token 的序列关系进行建模,并根据已有序列预测后续元素的模型。
- Tokenization:依据既定词表,将原始字符串转换为整数序列,并支持从整数序列还原文本的过程。
- Block size:模型用于预测下一 token 的最大上下文长度;生成长度超过该值时,需要截断较早的上下文。
- Self-attention:query、key 和 value 都来自同一组输入节点的注意力机制,用于节点之间的数据相关通信。
- Cross-attention:query 来自当前序列,而 key 和 value 来自外部编码结果,用于将另一来源的信息注入当前节点。
- Decoder-only Transformer:仅保留带因果掩码的解码器 block,通过自回归方式生成序列的 Transformer。
- Residual connection:将模块变换后的结果与原输入相加,为前向信息和反向梯度提供直接路径。
- Layer normalization:对单个 token 的特征维度进行归一化,以改善深层网络的优化稳定性。
关键技术细节
数据、张量形状、训练配置和模型结构中的具体实现信息。
- Tiny Shakespeare 数据约为 1 MB、约一百万个字符,字符级词表包含 65 个符号;数据按前 90% 训练、后 10% 验证进行切分。
- 训练批次中的输入和目标分别为 X=data[i:i+block_size] 与 Y=data[i+1:i+block_size+1],使每个位置都预测对应的下一字符。
- 模型输入张量形状为 B×T,嵌入后变为 B×T×C;计算交叉熵前,logits 被展平为 B·T×C,targets 被展平为 B·T。
- 因果注意力分数由 QKᵀ 计算,除以 head_size 的平方根后,用下三角掩码把未来位置设为负无穷,再经过 softmax 并与 V 相乘。
- 位置嵌入表大小为 block_size×n_embed;token 嵌入与位置嵌入相加后进入 Transformer block。
- 扩大后的示例配置使用 batch size 64、block size 256、embedding dimension 384、6 个注意力头、6 层 Transformer block 和 0.2 Dropout。
- 该字符级模型约有一千万参数,在 A100 GPU 上训练约 15 分钟后,验证损失达到约 1.48;生成文本具备莎士比亚式表面结构,但缺乏连贯语义。
- 教程称 GPT-3 最大模型有 1750 亿参数并训练于约 3000 亿 token;相比之下,示例语料换算为 GPT 子词词表后约为 30 万 token。
综合洞察
从完整实现路径中可以推导出的结构性认识。
- Transformer 的关键突破不是让所有 token 无差别共享信息,而是让通信对象和强度由当前数据决定,同时用连接掩码约束允许的信息流方向。
- 模型能力的提升来自三类因素协同:注意力扩大可用上下文,前馈层增加逐 token 计算能力,残差与归一化则保证更深结构可以被有效训练。
- 从字符级玩具模型到 ChatGPT,核心数学结构可以近似保持不变;真正拉开能力差距的是模型与数据规模、分词方式、分布式训练基础设施及后训练流程。
- 预训练主要学习语言与世界文本中的统计规律,助手身份则由后训练塑造;因此“会续写”和“会遵循用户意图”是两个不同的训练目标。