Arganzheng's Blog

stay hungry, stay foolish

后训练:从 SFT 到可验证奖励(总纲)

Post-Training: From Supervised Fine-Tuning to Verifiable Rewards

内容简介 《后训练:从 SFT 到可验证奖励》是一组共八篇的系列文章,对应《AI 算法工程师学习地图》的第 L5 层。它面向已经理解 Transformer 与预训练(L4,《Transformer 原理与实现》四篇 + 《现代 LLM 结构》十篇)、准备把一个基座模型变成能对话、会推理、符合偏好的模型的读者,讲的是后训练的每一种方法在优化什么目标、改了哪个组件、花多少钱、怎么证明它变好了。 它回答的问题是: 一个只会续写的基座模型,经过哪几步变成能回答问题、能拒绝、能一步步推导数学题的模型?每一步的目标函数是什么,为什么这样写?训完之后,怎么知道它真的变好了而不是学会了讨好评委?1 后训练的方法很多——SFT、RM、PPO、GRPO、DPO、KTO...

预训练(06):系列总结与通关自测

Pretraining: Series Recap and Final Self-Test

五篇正文回答了一个问题:一个基座模型是怎么训出来的,每个训练决定花多少。第一篇在一台笔记本上把一次预训练从原始网页到模型完整跑一遍,第二篇算 tokenizer 与词表,第三篇算算力怎么分给参数与数据,第四篇算 15T token 从哪来、丢掉的是什么,第五篇算超参表里每个数字的来历与训练为什么会崩。五篇合起来,是《现代 LLM 结构》那张成本表的训练侧。 第二到第五篇每篇的第一章都是「先讲明白」——不算账、只用图和小实验把这一篇的对象讲给没接触过的读者(三种切法与 BPE 逐步图、幂律与 iso-FLOP、一篇网页清洗前后与配比曲线、学习率调坏了长什么样与一次真实的 spike);账本从第二章起。本文不讲新内容,做三件事:把五篇压成一张表与五段回顾,把贯穿全系列...

预训练(05):训练配方与稳定性:学习率、batch、调度与 loss spike

Pretraining Recipes and Training Stability: Learning Rate, Batch Size, Schedules and Loss Spikes

前三篇定了 tokenizer、模型多大、数据多少与怎么配。剩下的是怎么训:一张十几行的超参表——峰值学习率、warmup 步数、batch 大小与它的增长计划、调度曲线的形状、AdamW 的两个 β、weight decay、梯度裁剪阈值、初始化标准差——外加几个防止训练崩掉的开关。这张表决定了几千万 GPU 小时是训出一个模型还是训出一条发散的 loss 曲线。 这些数字大多来自 L3 层的深度学习基础(方差传播、Adam 的二阶矩、warmup 的必要性),本篇不重推它们,只做两件事:把公开配方里的每个数字放到同一张表上比较,算出它们隐含的步数、每步时间、checkpoint 大小、一次 spike 的代价;再把”训练不稳定”拆成三个可以单独度量、单独修的机...

预训练(04):预训练数据工程:从 Common Crawl 到 15T token,去重、过滤与配比的账

Pretraining Data Engineering: From Common Crawl to 15T Tokens, the Arithmetic of Deduplication, Filtering and Mixing

第三篇的结论是:算力固定时模型应该更小、数据应该更多,而且唯一 token 至少要有目标数据量的四分之一。Llama 3 的 15T、Qwen3 的 36T 不是从哪里”下载”来的——DCLM 从网页抽出 240T token,筛成 3.8T 的 DCLM-baseline;另一支 FineWeb 在过滤去重后留下 15T,再按教育价值筛出 1.3T 的高分子集。这是两套管线,不是一条 240T → 15T 的漏斗。中间有几十个步骤:URL 过滤、正文抽取、语言识别、启发式规则、模型打分、三个粒度的去重、配比、多阶段课程、污染检测。 这一篇讲这条管线。它是预训练里唯一不在 GPU 上跑的大工程,成本以 CPU 核·小时与工程师月计;它的每个决定——去重的阈值、过滤...

预训练(03):Scaling law:从 Chinchilla 到"过训练",算力怎么分给参数与数据

Scaling Laws: From Chinchilla to Over-Training, Splitting Compute between Parameters and Data

《现代 LLM 结构》第二篇给出了训练一个模型的算力:\(C \approx 6ND\),参数量乘 token 数再乘 6。这个公式把一次预训练的成本压成两个变量的乘积,但没有说怎么分——同样 \(10^{24}\) FLOPs,是 100B 参数训 1.7T token,还是 10B 参数训 17T token?两者的 loss 差多少?训完之后哪个更便宜? Scaling law 回答的就是这个问题。它是过去五年里预训练最重要的一组经验规律:loss 随参数量、数据量、算力各呈幂律下降,幂律的指数决定算力该怎么分,而分法在 2020、2022、2024 各改了一次——Kaplan 说模型要大,Chinchilla 说数据要多,Llama 3 之后的所有模型都在...

预训练(02):分词与词表:BPE、词表大小与 token 效率

Tokenizers and Vocabulary: BPE, Vocabulary Size and Token Efficiency

《现代 LLM 结构:从 GPT-2 到今天的演进》把一个 LLM 的成本算成了 token 的函数:每个 token 多少 FLOPs、多少字节 KV、prefill 多长、decode 多久。”token 数”在所有公式里都是自变量——它从哪来,那八篇一直没有问。它来自 tokenizer。 本系列是那张成本表的训练侧:对象从”模型作为一个计算对象的结构”转到”这个模型是怎么训出来的”——分词与词表、scaling law、数据工程、训练配方。方法不变:写出公式,代入真实模型的数字,解释数字对系统意味着什么。tokenizer 排在端到端那一篇之后、其余各篇之前,因为它同时决定成本表的两端:词表大小 \(V\) 直接进参数量与 lm_head 的 FLOPs,...

预训练(01):一次预训练是怎么跑起来的:从两个网页文件到一个会续写英文的模型

Pretraining End to End: From Two Common Crawl Files to a Model That Writes English, on a Laptop

后面四篇各讲预训练的一个环节——分词、scaling law、数据、配方——每篇都会把公式代进 Llama 3 和 DeepSeek-V3 的数字。但如果你从来没有见过一次预训练从头到尾是什么样,那些数字就没有地方放。所以这一篇先走一遍:在一台 MacBook 上,从两个 Common Crawl 的原始网页文件出发,过滤、去重、训 tokenizer、打包、选模型大小、定配方、训练、评测,最后得到一个会续写英文的小模型。每一步都回答三个问题:做什么、为什么要做、做完之后剩下多少——文档数、字节数、token 数、参数量、loss。每一步末尾指向后面展开它的那一篇。 它与《Transformer 原理与实现》第四篇(nanoGPT 训莎士比亚)的区别:那一篇的数据...

预训练:从 tokenizer 到训练配方(总纲)

Pretraining: Tokenizers, Scaling Laws, Data Pipelines and Training Recipes

内容简介 《预训练:从 tokenizer 到训练配方》是一组共五篇正文加一篇总结的系列文章,面向要做或要读懂一次预训练的算法工程师,以及要为一次预训练做容量与 I/O 规划的训练基础设施工程师。第一篇先在一台笔记本上把一次预训练从原始网页到能续写英文的模型完整走一遍,让后面四篇的每个公式与数字都有落脚的地方。它是《现代 LLM 结构:从 GPT-2 到今天的演进》那张成本表的训练侧:那十篇把 token 数、参数量、数据量当作给定的输入,算出模型每一步算多少、读多少、存多少;本系列讲这几个输入各自是怎么定下来的——tokenizer 决定 token 数,scaling law 决定参数量与数据量的分配,数据管线决定有多少 token 可用、怎么配,训练配方决定...

现代 LLM 结构:系列总结与通关自测

Modern LLM Architecture: Series Recap and Final Self-Test

十篇正文从 GPT-2 到今天的模型,回答现代 LLM 改了什么、为什么、花了什么——01 先读 Llama / DeepSeek / VLM 的真实配置并数出参数量,02 把参数量换成算量、字节与时间(后面所有专项共用的尺子),03–10 再逐项展开位置外推、attention 与 KV、长上下文结构、MoE、MTP、投机解码、多模态与浮点格式。量化与 LoRA 已并入算法地图的《高效推理与压缩》与《LoRA 专题》。完整路线见系列总纲。 本文不讲新内容,做三件事:把十篇正文压成一张表并逐篇回顾,把贯穿全系列的几条线拎出来,然后给一套三段式的通关自测——判断与计算、跨篇综合、面试题。各篇末尾的自测检验的是”这一篇读懂了没有”,这里检验的是”十篇能不能连起来用”。...

现代 LLM 结构(10):浮点格式、数值稳定性与混合精度

Floating-Point Formats, Numerical Stability and Mixed Precision

本篇在系列中的位置。 现代 LLM 结构系列的最后一篇。前面所有的字节数都默认每个数 2 字节,本篇讲这 2 字节里存了什么、换成 FP16 / FP8 会在哪里出数值问题、混合精度训练为什么能工作。它是两条线的交接处:训练状态的字节数接到《预训练》与《大规模训练工程》;把权重、激活与 KV 压到更少的位(量化)在算法地图的《高效推理与压缩》第 03 篇起。完整地图见总纲。 第四篇的 train.py 里有两行一直没解释:torch.amp.autocast(dtype=bfloat16) 与 GradScaler(enabled=(dtype == "float16"))——为什么训练要用两种精度、为什么 fp16 需要一个放大器而 bf16 不需要。前...

×