从零构建大语言模型(LLMs from Scratch 中文版)
本书翻译整理自 Sebastian Raschka 的《Build a Large Language Model (From Scratch)》官方代码仓库(LLMs-from-scratch),从零开始用 PyTorch 手写一个 GPT 类大语言模型:理解 LLM、处理文本、注意力机制、实现 GPT、预训练、微调分类、指令微调。
📖 本书大纲
从零构建大语言模型:手写一个 GPT
本书内容翻译整理自开源项目 LLMs-from-scratch(作者 Sebastian Raschka,书籍《Build a Large Language Model (From Scratch)》的官方代码仓库,Manning 出版,ISBN 9781633437166)。
原创来源声明:本书内容基于 rasbt/LLMs-from-scratch 仓库逐章翻译整理而成,正文对应各章节 Jupyter Notebook 中的说明文字与代码,附录对应仓库的 appendix-A 至 appendix-E。代码版权归原作者所有。原书:Build a Large Language Model (From Scratch)。
这本书是给谁看的
这本书写给想真正搞懂大语言模型(LLM)怎么工作的开发者。不是泛泛了解,而是从零开始、一步步用 PyTorch 手写一个 GPT 类模型,把它跑起来。
- 最重要的前置知识是扎实的 Python 功底。有了这个,你就有条件探索 LLM 的世界、理解书里的概念和代码。
- 如果你有一些深度神经网络的经验,某些概念会更容易理解,因为 LLM 就建立在这些架构之上。
- 本书用 PyTorch 从零实现代码,不使用任何外部 LLM 库。不要求你先精通 PyTorch,但熟悉 PyTorch 基础会有帮助。如果你是 PyTorch 新手,附录 A 提供了简明入门。
这本书想回答的问题
ChatGPT 背后的大语言模型到底是怎么工作的?
这个仓库/这本书的方法,是从零开始、一步一步写一个"小而可用"的教育模型,它镜像了 ChatGPT 背后大规模基础模型的训练方法。代码量不大,但每个环节你都亲手写过:数据怎么变成 token、注意力怎么算、GPT 架构怎么搭、怎么预训练、怎么微调。
章节导航
第 1 章 理解大语言模型
本章没有代码。建立对 LLM 的整体认知:
- 什么是大语言模型(LLM),为什么现在这么火
- LLM 的架构基础:Transformer
- 从"预训练"到"微调"的 LLM 开发生命周期
- LLM 是怎么工作的:token、上下文、自监督学习
- 本书的阅读建议与学习路径
第 2 章 处理文本数据
从原始文本到模型能吃的数字:
- Tokenizer:把文本切成 token
- 从 token 到 token ID:词表构建
- Byte Pair Encoding(BPE)分词
- 滑动窗口数据加载器:input-target 对
- Embedding:把 token ID 变成向量
- 位置编码:给模型注入位置信息
第 3 章 编码注意力机制
注意力是 Transformer 的核心。这一章手写全部注意力变体:
- 从"自注意力"到"带因果掩码的自注意力"
- 注意力权重的缩放(为什么除以根号 d)
- 用 Dropout 做正则化
- 多头注意力(Multi-Head Attention)
- 实现完整的多头注意力类
- 带权重绑定的因果注意力
第 4 章 从零实现一个 GPT 模型
把前面的积木搭成一个真正的 GPT:
- GPT 架构总览:层、归一化、GELU、残差连接
- Layer Normalization
- GELU 激活函数
- Feed Forward 网络
- 短序列上的 GPT 模型配置(GPT-2 小模型)
- 生成文本:从概率采样到温度缩放
- 保存和加载模型权重
第 5 章 在无标注数据上预训练
让模型真正"学会说话":
- 评估生成式文本模型的损失
- 训练循环:计算损失、反向传播、更新权重
- 解码策略:温度、top-k
- 学习率调度:线性预热 + 余弦退火
- 过拟合与正则化
- 保存和加载训练状态
- 用 OpenAI 的 GPT-2 权重做对比
- 预训练一个小 GPT 模型
第 6 章 微调:文本分类
把一个生成模型变成分类器:
- 不同微调方式概览
- 准备数据集(IMDb 影评)
- 创建数据加载器
- 用预训练权重初始化模型
- 给 GPT 加分类头
- 微调分类模型
- 准确率评估
- 推理与测试
第 7 章 微调:指令微调
让模型学会"听指令":
- 指令微调与预训练的区别
- 准备指令微调数据集
- 组织数据为输入-输出对
- 用 masked loss 忽略 padding
- 微调模型遵循指令
- 与 Ollama 上的 Llama 3 对比评估
- 通过加载训练好的权重进行推理
附录(延伸阅读)
原仓库还包含以下附录内容,本书未展开翻译,可在原仓库查看:
- 附录 A PyTorch 入门:Tensor、autograd、nn.Module、训练简单网络、DDP 多 GPU 脚本
- 附录 B 参考文献与延伸阅读:按章节整理的推荐阅读清单
- 附录 C 练习题解答:各章练习题的参考解答
- 附录 D 给训练循环加料:梯度裁剪、EMA、学习率调度器比较等训练增强
- 附录 E 参数高效微调:LoRA:低秩适配微调
每章的写法
每一章都保持统一骨架,方便按需查阅:
- 本章要做什么:一句话说清这章完成什么
- 英文原文 → 中文翻译:逐段翻译 notebook 正文,尽量不改内容
- 代码:保留原始 Python 代码(附在译文之后)
- 关键概念:每章末尾提炼核心名词
- 练习题:对应原仓库的 exercise-solutions
翻译说明
- 基本原文翻译:正文严格对照仓库 notebook 的 markdown 单元格逐段翻译,尽量不改动内容与结构
- 代码保留原样:Python 代码不做改写,保留原始实现
- 出处注明:每章标注对应的仓库路径与原始 notebook 文件名
- 术语统一:token、embedding、attention、fine-tuning 等术语全书统一译法,首现处给出英文原文
📑 章节目录
第 1 章 理解大语言模型
本章没有代码。建立对 LLM 的整体认知:LLM 是什么、Transformer 架构基础、从预训练到微调的 LLM 开发生命周期。
第 2 章 处理文本数据
从原始文本到模型能吃的数字:Tokenizer、BPE 分词、滑动窗口数据加载器、token 嵌入、位置编码。
第 3 章 编码注意力机制
注意力是 LLM 的引擎。本章手写全部注意力变体:自注意力、因果注意力、多头注意力。
第 4 章 从零实现一个 GPT 模型来生成文本
把前面的积木搭成一个真正的 GPT:LayerNorm、GELU、FeedForward、残差连接、Transformer 块、GPT 模型、文本生成。
第 5 章 在无标注数据上预训练
让模型真正学会说话:评估损失、训练循环、温度与 top-k 解码、保存加载权重、加载 OpenAI 预训练权重。
第 6 章 微调:文本分类
把一个生成模型变成分类器:准备数据集、创建数据加载器、加载预训练权重、加分类头、计算损失与准确率、微调、推理。
第 7 章 微调:指令微调
让模型学会听指令:指令微调简介、准备指令数据集、组织训练批次、masked loss、微调、提取保存响应、用 Llama 3 评估。