Skip to content

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 架构