Arganzheng's Blog

stay hungry, stay foolish

后训练(02):偏好数据与奖励模型:Bradley-Terry、pairwise loss 与 reward hacking

Preference Data and Reward Models: Bradley-Terry, Pairwise Loss and Reward Hacking

SFT 之后的模型会按格式回答,但它只见过”好的回答长什么样”,没见过”两个回答哪个更好”。要让它继续变好,需要一个能对任意回答打分的东西——不是人(太慢、太贵,且 RL 每步要打几千个分),而是一个模型:输入 prompt 与回答,输出一个标量,越大越好。这个模型叫奖励模型(Reward Model,RM),它是 RLHF 三件套里的”奖励”,后面的 PPO、GRPO 直接用它,DPO 把它折进 loss 里,拒绝采样用它选数据,Arena 用它的数学给模型排名。 RM 的原理简单到一句话能说完:它是一个逻辑回归,特征是回答、标签是”A 好于 B”。难的全在数据与它的失效方式上——人对”哪个更好”只有七成一致,训出来的 RM 准确率也就七成;而 RL 的策略会像...

后训练(01):SFT:指令数据、chat template、loss mask 与参数高效微调

Supervised Fine-Tuning: Instruction Data, Chat Templates, Loss Masking and Parameter-Efficient Fine-Tuning

预训练结束时的模型是一个续写器:给它一段文字,它给出最可能的下一段文字。问它”法国的首都是哪里”,它可能回答”巴黎”,也可能续写成一道选择题的另外三个选项,或者一篇关于欧洲首都的文章。它有知识,没有格式——不知道什么时候该停、谁在说话、什么算”回答”。 监督微调(Supervised Fine-Tuning,SFT)解决的就是格式问题:用几千到几百万条”对话 → 回答”的示范继续训练,交叉熵 loss 不变,只是数据变成了对话。它是后训练流水线的第一步,也是三件套(策略、奖励、参考)里最简单的一步——只有策略,奖励就是标注好的目标序列。但它的每个工程细节都会传给后面每一步:模板一旦定下,奖励模型、DPO、RL 的数据都要用它;loss mask 的做法在多轮 Ag...

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

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

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

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

Pretraining: Series Recap and Final Self-Test

五篇正文回答了一个问题:一个基座模型是怎么训出来的,每个训练决定花多少。第一篇在一台笔记本上把一次预训练从原始网页到模型完整跑一遍,第二篇算 tokenizer 与词表,第三篇算算力怎么分给参数与数据,第四篇算 15T token 从哪来、丢掉的是什么,第五篇算超参表里每个数字的来历与训练为什么会崩。五篇合起来,是《Transformer 与 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 不是从哪里”下载”来的——公开网页抽出正文后约有 240T token,其中能进训练集的只有百分之几,再经过模型打分留下的”高质量”部分不到 1%。从 240T 到 15T 之间是一条几十个步骤的管线:URL 过滤、正文抽取、语言识别、启发式规则、模型打分、三个粒度的去重、配比、多阶段课程、污染检测。 这一篇讲这条管线。它是预训练里唯一不在 GPU 上跑的大工程,成本以 CPU 核·小时与工程师月计;它的每个决定——去重的阈值、过滤的严格程度、各来源的配比——都直接改变 loss,且改变的幅度常常大于结构上的...

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

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

《Transformer 与 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

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

预训练(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 与 LLM》第四篇(nanoGPT 训莎士比亚)的区别:那一篇的数据...

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

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

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

×