☰
大语言模型训练全流程指南:How to Train Your GPT详解反向传播、交叉熵损失与AdamW优化器
2026/9/27 0:19:41 网站建设 项目流程

大语言模型训练全流程指南:How to Train Your GPT详解反向传播、交叉熵损失与AdamW优化器

【免费下载链接】how-to-train-your-gptBuild a modern LLM from scratch. Every line commented. Explained like we are five.项目地址: https://gitcode.com/gh_mirrors/ho/how-to-train-your-gpt

How to Train Your GPT是一个"从零构建现代大语言模型"的开源教程,用 12 章 + 28 篇专题讲解,把 LLM 训练全流程讲得像给五岁孩子讲故事。本文带你吃透其中大语言模型训练最核心的三件套:反向传播、交叉熵损失、AdamW 优化器——正是它们让模型从"乱猜"变成"会说话"。

一、训练到底在做什么?一句话讲透大语言模型训练

训练大语言模型,本质是教机器接龙:

  1. 给模型看一句话:"The cat sat on the ___"
  2. 让它猜下一个词
  3. 猜对了 → 表扬;猜错了 → 扣分
  4. 模型据此微调内部参数,下次猜得更准
  5. 对几十亿句话重复几十亿次

对应的就是经典的训练循环:取一批数据 → 前向预测 → 算损失 → 反向传播 → 更新权重。模型里有上亿个"旋钮"(参数),训练就是找到每个旋钮该往哪拧。

想先看全局?阅读 chapters/00_overview.md,那里有整条流水线的鸟瞰图。

二、交叉熵损失:如何量化模型"猜得有多错"

大语言模型训练最常用的损失函数是交叉熵损失(Cross-Entropy Loss)。它的核心公式只有一行:

Loss = -log(正确答案的概率)

以 "mat" 为正确答案为例,三种情况一目了然:

模型给 "mat" 的概率交叉熵损失直观解读
P = 0.95-log(0.95) ≈0.05又准又自信,几乎不扣分 ✅
P = 0.45-log(0.45) ≈0.80半信半疑,扣一些分
P = 0.01-log(0.01) ≈4.61严重错误,重罚 🔥

它比"错误率"好在梯度信号是平滑且自适应的:错得越离谱,梯度越强,模型从大错误中学得最快。这就是大语言模型训练目标函数的数学本质——让正确答案的概率最大化。

一个有趣的起点:随机模型在 GPT-2 的 50257 词表上"均匀瞎猜",初始损失约为 ln(50257) ≈10.8,所有损失曲线都从这里出发。

📖 公式细节与-log的由来:chapters/08_training.md;代码实现仅一行:main.py#L188 的F.cross_entropy。

三、反向传播:从损失一路"追问"到每个参数

交叉熵损失告诉你"错在哪、错多少",**反向传播(Backpropagation)**则回答"每个参数该怎么改"。

3.1 链式法则:烤蛋糕的比喻

想象蛋糕太甜了。要降糖,但你不知道:减 1 克糖 → 甜度降多少?甜度降一点 → 蛋糕评分升多少?两者相乘,就知道减 1 克糖对评分的总影响——这正是链式法则:

参数对损失的影响 = 各层影响逐层相乘

反向传播就是把这个乘法从损失出发、逐层反推到所有参数,计算每个参数对错误的"贡献度"。

3.2 一个直觉视角

训练代码里只有两行:

  • loss = F.cross_entropy(...)→ "我们错了多少?"
  • loss.backward()→ "搞清楚为什么错"

执行完后,每个参数都带上了grad(梯度)——比如"把 cat 这个词的某个向量分量调大 0.001,损失会下降 0.000342"。1.2 亿个旋钮,每个都有了明确的拧动方向。

四、AdamW优化器:大语言模型训练的标准配置

有了梯度,还差最后一步:步长多大?往哪迈?朴素梯度下降"每个参数、每步都用同样步长",又慢又容易震荡。AdamW 用三大改进解决了这个问题:

改进直觉默认值
动量 Momentum像滚下山坡的球,记住方向、攒足冲量,过滤噪声β₁ = 0.9
自适应学习率每个参数有自己的步长:常动的参数小步走,少动的参数大步走β₂ = 0.95
解耦权重衰减独立地把权重缓缓拉向零,防止过大、抑制过拟合weight_decay = 0.1

"W"指 decoupled(解耦)权重衰减——它独立于梯度计算,这才是它比普通 Adam 泛化更好的关键。GPT-3、LLaMA 以及所有主流大语言模型都用它训练。

4.1 一个工程细节:两组参数

并非所有参数都该被"拉向零"。本项目把参数分成两组(main.py#L304-L317):

  • 衰减组(weight_decay = 0.1):线性层权重、词嵌入
  • 不衰减组(weight_decay = 0):偏置、RMSNorm 权重——它们是"调音量旋钮",压成零模型就废了

常用超参数(LLaMA 同款,久经考验):lr=3e-4、betas=(0.9, 0.95)、eps=1e-8。

📖 AdamW 六步工作原理详解:explanations and examples WIP/adamw.md

五、训练流程完整速览:数据、混合精度与学习率调度

把前三节拼起来,一条完整的训练流水线还包括这些"工程护城河":

环节作用本项目做法
数据准备文本切块,输入与目标错位 1 位(预测下一个 token)WikiText-103,序列长 128~1024
混合精度前向用 bfloat16,显存减半、速度翻倍,主权重仍用 float32 保精度torch.amp.autocast
梯度累积显存放不下大 batch 时,多次小 batch 累加梯度再更新,等价于大 batchgrad_accum_steps=2
梯度裁剪防止个别"坏样本"引发梯度爆炸max_norm=1.0
余弦学习率调度先 warmup 稳住开局,再沿余弦曲线平滑降速收尾,精确"软着陆"explanations and examples WIP/cosine_warmup.md

六、看懂损失曲线:大语言模型训练健康的唯一体检报告

训练时每 100 步记录一次损失并绘图,这张图就是模型的"心电图":

上图为项目 main.py 训练结束时自动生成的损失曲线,从约 11 平滑下降到 5.6——一条理想的大语言模型训练曲线:早期快速下降(学会标点、常用词),后期缓慢走低(掌握主谓一致等细微规律)。

曲线异常速查表(完整版含 8 种模式):

曲线形态诊断对策
📉 平滑下降健康,正常学习继续训练
➡️ 横在 10.8 不动几乎必是 bug检查optimizer.step()、数据对齐
⚡ 周期性尖刺梯度爆炸加/收紧梯度裁剪,降学习率
📈 训练降、验证升过拟合,在"背答案"早停、加 dropout、增大 weight_decay
❌ 变 NaN数值溢出大幅降低学习率、检查混合精度

📖 八种损失曲线形态图解:explanations and examples WIP/how_to_read_loss.md

七、动手实践:从零跑通你的第一个 GPT

本教程所有代码逐行注释,最小配置在 CPU 上几分钟即可跑完:

  • 🚀完整可运行脚本:main.py —— 模型定义 + 训练循环 + 文本生成,一个文件从头到尾
  • 📚训练章节:chapters/08_training.md —— 数据加载、优化器、调度器、检查点保存
  • 📓交互式练习:notebooks/08_training.ipynb
  • 🧩架构总表:chapters/11_glossary.md —— AdamW、RoPE、SwiGLU 等技术出处对照
  • 🎯下一步训练:训练完还可以尝试 fine-tuning/README.md 里的 LoRA 微调

写在最后

大语言模型训练全流程并不神秘:交叉熵损失定义"错多少",反向传播算出"每个参数该改多少",AdamW决定"迈多大一步"——三者配合,再辅以混合精度、梯度裁剪、余弦调度这些工程技巧,就让上亿参数的小模型一步步学会"猜下一个词",最终开口说话。

顺着本教程,你写下的每一行代码,用的都是 LLaMA、Mistral 等现代大语言模型同款公开技术。动手跑一次,胜过读十篇文章。

【免费下载链接】how-to-train-your-gptBuild a modern LLM from scratch. Every line commented. Explained like we are five.项目地址: https://gitcode.com/gh_mirrors/ho/how-to-train-your-gpt

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询