03-pretraining 章节设计
背景
读者已完成 00-neural_network(神经网络训练基础)、01-llm_basics(语言模型概念)、02-inference(推理流程)的学习,了解了:
- 神经网络训练闭环:预测 → 损失 → 反向传播 → 梯度下降
- Transformer 架构:Attention、Decoder Block、FFN、RMSNorm
- 推理流程:tokenizer → embedding → 多层 decoder block → LM Head → 采样
本章不再重复这些内容,聚焦于预训练阶段独有的概念和流程。
使用 MiniMind Dense 模型作为代码参考,MoE 架构后续单独章节展开。
章节定位
- 概念讲解为主,不要求读者跑代码
- 流水线式组织,沿预训练实际流程展开
- 用 MiniMind 代码片段做参考,帮助理解
章节结构
01-overview.md — 预训练做什么
目标:建立预训练的全局认知
内容:
- 预训练的目标:让模型从海量文本中学习语言的统计规律
- 自回归语言建模:给定前文,预测下一个 token(读者已了解推理中的 token 预测,这里强调"训练"视角)
- 为什么预训练有效:从大量数据中压缩出语言知识
- 预训练 vs 微调 vs 推理的关系(一句话带过,详细展开在后续章节)
- 预训练全流程预览:数据 → 模型 → 训练循环 → 检查点
篇幅:中等(概念为主,不需要太长)
02-data-preparation.md — 数据准备
目标:理解预训练数据从原始语料到训练样本的完整流程
内容:
- 语料来源和选择(网页、书籍、代码等)
- 数据清洗(去重、过滤低质量内容、去隐私信息)
- 分词(读者已了解 BPE 原理,这里聚焦预训练场景的特殊处理)
- 构建训练样本:如何把长文本切成固定长度的训练样本
- 批次构建(batch):多个样本如何组成一个 batch
- MiniMind 的数据处理代码参考
篇幅:中等偏长
03-training-loop.md — 训练循环
目标:理解训练循环中每一步在做什么
内容:
- 从推理到训练:推理流程加上"学习"环节就是训练
- 前向传播:输入一个 batch,得到每个位置的 logits
- 损失函数:交叉熵损失(为什么用交叉熵、怎么计算)
- 关键概念:模型输出的 logits → softmax → 概率分布 → 与真实 token 对比
- 反向传播:梯度如何从损失传回每一层参数
- 优化器:AdamW 的基本思想(不需要推导公式,讲直觉)
- 参数更新:一步梯度下降做了什么
- 一个完整 step 的数据流图
- MiniMind 的训练循环代码参考
篇幅:长(本章核心)
04-training-details.md — 训练细节
目标:理解让训练实际跑起来的关键工程细节
内容:
- 学习率调度:warmup + cosine decay(为什么要 warmup、为什么逐渐衰减)
- 批次大小的权衡:大 batch vs 小 batch、梯度累积(用时间换空间)
- 训练监控:loss 曲线、perplexity
- 过拟合与正则化:dropout、权重衰减
- 分布式训练概述(数据并行的基本思想,不需要深入)
- 混合精度训练(FP16/BF16 为什么能加速)
- 检查点保存和恢复
篇幅:中等偏长
05-summary.md — 总结与实践指引
目标:收束全章,给读者实践入口
内容:
- 预训练全流程回顾(一张图/流程图)
- 关键要点总结
- 如何用 MiniMind 跑一次预训练(命令和配置说明,不展开细节)
- 预训练之后是什么:SFT 微调(预告下一章)
- 进阶阅读推荐
篇幅:短
写作原则
- 使用中文
- 沿用已有章节的写作风格(概念驱动,用类比和具体例子)
- 引用 MiniMind 代码时给出文件路径和关键行号,不需要贴大段代码
- 适当使用配图(训练循环流程图、loss 曲线、学习率调度图等)
- 不重复已覆盖的基础概念,必要时用一句话带过并链接到对应章节
与其他章节的关系
- 前置知识:00-neural_network(训练基础)、01-llm_basics(语言模型概念)、02-inference(推理流程)
- 后续章节:SFT 微调、对齐训练(DPO/PPO/GRPO)、MoE 架构