Skip to content

MiniMind从零理解 LLM 训练

开源教程 · 对照实验 · 可执行代码

📚 学习模块

🧱 基础组件 (Foundation)

01 归一化

核心问题: 为什么需要归一化?Pre-LN vs Post-LN? 时长: 1小时 | 状态: ✅ 完成

开始学习 →


02 位置编码

核心问题: 为什么选择 RoPE?如何实现长度外推? 时长: 1.5小时 | 状态: ✅ 完成

开始学习 →


03 注意力机制

核心问题: QKV 的直觉是什么?为什么需要多头? 时长: 2小时 | 状态: ✅ 完成

开始学习 →


04 前馈网络

核心问题: FFN 存储了什么知识?为什么需要扩张? 时长: 1小时 | 状态: ✅ 完成

开始学习 →

🏗️ 架构组装 (Architecture)

残差连接与 Transformer Block

核心问题: 如何将组件组装成完整的 Transformer? 时长: 2.5小时 | 状态: 📋 规划中

查看内容 →

🚀 快速开始

30分钟快速体验

通过 3 个关键实验理解核心设计

每个实验只需 5-10 分钟,在 CPU 上即可运行,快速掌握 LLM 训练的核心秘密

Step 01
5 分钟

为什么需要归一化?

观察梯度消失现象,理解 RMSNorm 如何稳定训练过程

归一化模块
开始实验
Step 02
10 分钟

为什么用 RoPE?

对比绝对位置编码,理解旋转位置编码在外推性上的优势

位置编码模块
开始实验
Step 03
5 分钟

为什么需要残差连接?

实验验证深层网络训练的梯度流问题,见证残差连接的威力

残差连接模块
开始实验

💻 运行实验

bash
git clone https://github.com/joyehuang/minimind-notes.git
cd minimind-notes
source venv/bin/activate
bash
# 实验: 为什么需要归一化?
cd modules/01-foundation/01-normalization/experiments
python exp1_gradient_vanishing.py

# 你会看到:
# ❌ 无归一化: 梯度消失
# ✅ 有 RMSNorm: 梯度稳定
bash
# 理解背后的原理
cat modules/01-foundation/01-normalization/teaching.md

💡 教学特色

🎯 原理优先,而非命令复制

不是告诉你"运行这个命令就能训练模型",而是让你理解"为什么要这样设计"

🔬 对照实验验证

每个设计选择都通过实验回答两个问题:

  • 不这样做会怎样?
  • 其他方案为什么不行?

💻 可在普通笔记本运行

所有实验基于 TinyShakespeare (1MB) 或 TinyStories (10-50MB) 无需 GPU,每个实验 < 10 分钟

🔗 相关资源

📦 原项目jingyaogong/minimind

🗺️ 学习路线完整路线图

💻 代码示例可执行示例

📝 学习笔记学习日志 · 知识库

基于 MiniMind 项目的学习笔记