如何速成LLM以伪装成一个AI研究者(3)——预训练,监督微调,强化学习RLHF/DPO
往期回顾
如何速成LLM以伪装成一个AI研究者(1)——循环,卷积,编解码器,注意力,Transformer
如何速成LLM以伪装成一个AI研究者(2)——Pre-LN,KV-Cache优化,MoE
免责声明:作者也是伪装的,有错漏属于正常现象,欢迎评论指正。
如何训练一个LLM
参考资料
2018年,GPT-1论文:Improving language understanding by generative pre-training
2019年,GPT-2论文:Language models are unsupervised multitask learners
2020年,GPT-3论文:Language Models are Few-Shot Learners
一般来说,一个LLM的训练分为 预训练(pre-train) 和 后训练(post-train) 两个阶段。
第一阶段预训练,是在广泛的文本数据上进行自监督训练,培养模型“说人话”的基础能力。具体地,对于语料库 U = ( u 1 , . . . , u n ) U=(u_1,...,u_n) U=(u1,...,un),模型的目标是最大化以下似然:
L 1 ( U ) = ∑ i log P ( u i ∣ u i − k , . . . , u i − 1 ; Θ ) L_1(U)=\sum_i \log P(u_i |u_{i-k},...,u_{i-1};\Theta) L1(U)=i∑logP(ui∣ui−k,...,ui−1;Θ)
其中 Θ \Theta Θ为网络参数, k k k为上下文窗口的大小。可以使用随机梯度下降之类的基础方法来训练模型。
在这一阶段的训练目标是培养一个 会续写的模型 。比如你输入“世界上最大的森林是”,它可能续写“亚马逊雨林”,“位于南美洲”或者“地球之肺”,这些都是人话,不过不一定满足用户的需求。因此,还需要第二阶段,后训练的帮助。
预训练的参数量到底有多大?GPT-1使用了5 GB原始数据,GPT-2为40GB原始数据,GPT-3从45TB原始数据中过滤了570GB数据(共计4990亿 token)。GPT-4则使用了13万亿的token进行预训练。
第二阶段后训练,则是训练模型完成具体任务的能力,一般会使用两种方法:监督学习(SFT, supervised fine-tuning) 和 强化学习(RL, reinforcement learning)。
有时,后训练(post-train) 过程也可以被称为 对齐(alignment)。
对齐 其实是指的一个目标,即使模型和人类的偏好与价值观对齐,在造词炒作大王A÷Anthropic 2021年的论文 A General Language Assistant as a Laboratory for Alignment 中定义了HHH框架,提出了对齐的三大目标:Helpful(有用),Honest(诚实),Harmless(无害)。即包括遵循指令、不编造事实、不输出违法内容等。
而对齐的相关优化完全发生在后训练阶段,故有时会直接把后训练称作对齐。
而在另一些语境下,对齐会仅指对Harmless的优化,包括拒绝回答有害请求,避免歧视和侮辱语言,以及违反法律的表述。需要注意区分词意。
“搞NLP的人一定要会说自然语言。”——沃·兹基硕德
在SFT阶段,模型需要在面向特定任务的,更加高质量、有标签的数据上进行学习。而因为模型已经拥有了预训练阶段培养的通用能力,这些高质量、有标签的数据的需求比预训练的数据量需求要少得多。这部分高质量数据可以是:
- 指令-响应对
- 文本与分类标签
- 文本评分
等等。
在SFT数据为指令-响应对的情况下,SFT阶段做的事情其实和pre-train是差不多的,都是优化概率分布,只不过指令部分不参与loss计算。而如果是有分类标签、文本评分之类的数据,则可以将交叉熵等loss一同进行优化。
pre-train和SFT阶段的算法基本上没有什么花样,决定训练质量的核心因素是数据量 和 数据质量 。 而RL阶段则可以在算法上玩出更多花样。
RL简单来说,就是使用奖励函数给 模型自身 的输出打分,然后根据得分 强化 高分的输出,弱化低分的输出,从而达到最大化奖励的目标。而关于RL和SFT阶段的感性区别,是一个有点看个人的研究理解的问题,经常被面试官拿来当面试题的问题 。以下是作者听说过的一些说法,可供参考:
“蒸别人叫SFT,蒸自己叫RL。”
——解析:SFT的数据源一般来自于强模型输出/人类制造,而RL是一个基于模型自身输出的采样来进行优化的过程。
“SFT是学习新的能力,而RL是加大使用正确能力的概率。”
——解析:由于之前接触过传统RL,所以刚听这句话的时候作者还有些迷惑:我记得使用RL训练模型玩小游戏的过程中,模型经常能产生新的能力呀?但是,在LLM领域,由于pre-train和SFT对模型输出的基本模式的定型作用更大,RL阶段的功能一般不包括让模型像玩小游戏那样,从零知识开始试错以探索新的能力,更多地还是强化高奖励行为,弱化低奖励行为。
“SFT是学习新的能力,而RL是学习能力的组合。”
——解析:但是RL真的完全不会产生新的能力了吗?一篇2025年9月的论文:From f(x) and g(x) to f(g(x)): LLMs Learn New Skills in RL by Composing Old Ones探讨了这个问题。具体地,作者发现假如模型在SFT阶段学会了模仿 f ( x ) f(x) f(x)和 g ( x ) g(x) g(x)输出,RL阶段可以探索出 f ( g ( x ) ) f(g(x)) f(g(x))组合函数要怎么进行。也即RL阶段可以通过组合SFT阶段学会的能力的方式,来产生新的能力。
RL算法
接下来,我们来学习一下RL算法的相关发展。
RLHF vs DPO
首先明确一点,RLHF和DPO的目的都是:提升模型文本输出符合人类偏好的能力。所以如果RL的训练目的是提高解数学题、写代码的正确率这种拥有明确评分标准的任务,是用不到HF(human feedback)的。
RLHF(Reinforcement Learning from Human Feedback,人类反馈的强化学习):根据人类对文本输出的排名或比较训练一个奖励模型,然后使用奖励模型对策略模型的输出打分,然后优化策略模型。一般来说,使用RLHF这个词汇时,配合的RL算法为下文on-policy的RL算法。
online/offline,on-policy/off-policy
在强化学习分类中,online/offline指的是 是否需要一边训练一边实时地收集数据。 on-policy/off-policy 是online强化学习的子分类,指的是 收集的数据是否必须由最新的策略(模型)产生。
DPO是offline的,而下文的PPO族强化学习算法都是online,on-policy的。
训练奖励模型是这样的:对于用户的指令 x x x,输出两个文本 y 1 y_1 y1和 y 2 y_2 y2,让用户评选哪一个更好(一般输出是来自SFT后的模型 π S F T \pi^{SFT} πSFT)。然后我们假设存在一个奖励函数 r ∗ r^* r∗,和奖励分数 r ∗ ( x , y ) r^*(x,y) r∗(x,y),并假定用户认为 y 1 y_1 y1比 y 2 y_2 y2好的概率为:
p ∗ ( y 1 > y 2 ∣ x ) = exp ( r ∗ ( x , y 1 ) ) exp ( r ∗ ( x , y 1 ) ) + exp ( r ∗ ( x , y 2 ) ) = σ ( r ∗ ( x , y 1 ) − r ∗ ( x , y 2 ) ) p^*(y_1>y_2|x)=\frac{\exp (r^*(x,y_1))}{\exp (r^*(x,y_1))+\exp(r^*(x,y_2))}=\sigma(r^*(x,y_1)-r^*(x,y_2)) p∗(y1>y2∣x)=exp(r∗(x,y1))+exp(r∗(x,y2))exp(r∗(x,y1))=σ(r∗(x,y1)−r∗(x,y2))
其中 σ \sigma σ为sigmoid函数,即 σ ( z ) = 1 / ( 1 + e − z ) \sigma(z)=1/(1+e^{-z}) σ(z)=1/(1+e−z)
这个建模叫Bradley-Terry (BT) 模型
我们的目的是训练出一个最符合这个概率分布的奖励模型 r ϕ r_{\phi} rϕ,也就是说,对于一组 D = { x ( i ) , y w ( i ) , y l ( i ) } D=\{x^{(i)}, y_w^{(i)}, y_l^{(i)}\} D={x(i),yw(i),yl(i)}, y w y_w yw表示winner即用户认为更好的输出, y l y_l yl表示loser即用户认为更差的输出,我们的目的是最大化 p ( D ∣ r ) p(D|r) p(D∣r),也即最小化似然函数的负对数,可以得到loss函数:
L ( r ϕ , D ) = − E ( x , y w , y l ) ∼ D [ log p ϕ ( y w > y l ∣ x ) = − E D [ log σ ( r ϕ ( x , y w ) − r ϕ ( x , y k ) ) ] L(r_{\phi}, D)=-E_{(x,y_w,y_l)\sim D}[\log p_{\phi} (y_w>y_l |x)=-E_D [\log \sigma(r_\phi(x,y_w)-r_{\phi}(x,y_k))] L(rϕ,D)=−E(x,yw,yl)∼D[logpϕ(yw>yl∣x)=−ED[logσ(rϕ(x,yw)−rϕ(x,yk))]
r ϕ ( x , y ) r_{\phi}(x,y) rϕ(x,y)一般来说,是从在SFT后的原模型的 π S F T ( y ∣ x ) \pi^{SFT}(y|x) πSFT(y∣x)得到的(通过在Transformer顶部添加一个线性层的方式)。最后,RL过程总体为最大化以下函数:
max π θ E x ∼ D ( E y ∼ π θ ( ⋅ ∣ x ) r ϕ ( x , y ) − β D K L [ π θ ( y ∣ x ) ∥ π r e f ( y ∣ x ) ] ) \max_{\pi_{\theta}} E_{x \sim D}(E_{y \sim \pi_{\theta}(\cdot|x)}r_{\phi}(x,y)-\beta D_{KL}[\pi_{\theta}(y|x) \parallel \pi_{ref}(y|x)]) πθmaxEx∼D(Ey∼πθ(⋅∣x)rϕ(x,y)−βDKL[πθ(y∣x)∥πref(y∣x)])
后半的 π r e f \pi_{ref} πref一般就是SFT后的起始模型 π S F T \pi^{SFT} πSFT,目的是为了防止 π θ \pi_{\theta} πθ偏离起点太远被“训崩”。 β \beta β越大,不准偏离的约束越强。
速通熵,交叉熵,KL散度
熵 表示分布的“平均信息量”。信息量可以理解为发生概率越低的事发生,则信息量越大。比如人们会认为“太阳从东边升起”是一句废话,但是“太阳从西边升起”如果发生了,信息量就会非常大。记 x x x的信息量为 − log p ( x ) -\log p(x) −logp(x),则分布 p p p的熵为 H ( p ) = − ∑ x p ( x ) log p ( x ) H(p)=-\sum_x p(x)\log p(x) H(p)=−∑xp(x)logp(x)
交叉熵 则表示当客观概率分布(事情实际上的发生概率)和主观概率分布(我认为事情的发生概率)不一致时的平均信息量。比如说我在不知情的情况下穿越到了一个太阳从西边升起的异世界,“太阳从西边升起”对我来说是一件信息量非常大的事情,但是对这个世界的原住民来说是一句废话。分布 p , q p,q p,q的交叉熵为 H ( p , q ) = − ∑ x p ( x ) log q ( x ) H(p,q)=-\sum_x p(x)\log q(x) H(p,q)=−∑xp(x)logq(x),这是一个不对称的函数( H ( p , q ) ≠ H ( q , p ) H(p,q)\not= H(q,p) H(p,q)=H(q,p)),且可以证明若固定 p p p,则当 q = p q=p q=p时, H ( p , q ) H(p,q) H(p,q)最小(异世界的原住民 q = p q=p q=p,而我 q ≠ p q\not=p q=p,因此我更容易在异世界感到惊讶)
KL散度 则表示了 q q q和 p p p的相似程度,公式为 D K L ( p ∥ q ) = H ( p , q ) − H ( p , p ) = ∑ x p ( x ) log p ( x ) q ( x ) = E x ∼ p log p ( x ) q ( x ) D_{KL}(p \parallel q)=H(p,q)-H(p,p)=\sum_x p(x)\log \frac{p(x)}{q(x)}=E_{x \sim p} \log \frac{p(x)}{q(x)} DKL(p∥q)=H(p,q)−H(p,p)=∑xp(x)logq(x)p(x)=Ex∼plogq(x)p(x)。这也是一个非对称的函数( D K L ( p ∥ q ) ≠ D K L ( q ∥ p ) D_{KL}(p \parallel q) \not= D_{KL}(q \parallel p) DKL(p∥q)=DKL(q∥p)),且当 p = q p=q p=q时KL散度取到最小值。
DPO(Direct Preference Optimization,直接偏好优化):
相关论文:(2023年,
Stanford University)Direct Preference Optimization:
Your Language Model is Secretly a Reward Model
DPO的Direct,指的是不需要训练奖励模型,而是直接使用人类偏好数据优化策略模型。DPO直接使用以下函数作为loss函数(最小化目标):
L D P O = − log σ ( β log π θ ( y w ∣ x ) π r e f ( y w ∣ x ) − β log π θ ( y l ∣ x ) π r e f ( y l ∣ x ) ) L_{DPO}=-\log \sigma(\beta \log \frac{\pi_{\theta (y_w|x)}}{\pi_{ref} (y_w|x)}-\beta \log \frac{\pi_{\theta (y_l|x)}}{\pi_{ref} (y_l|x)}) LDPO=−logσ(βlogπref(yw∣x)πθ(yw∣x)−βlogπref(yl∣x)πθ(yl∣x))
感性地看,前半段即 π θ \pi_{\theta} πθ相对于 π r e f \pi_{ref} πref“强化”了多少好答案,后半段则是“弱化”了多少坏答案。 β \beta β还是控制偏离度的参数(一般取0.1)。
而理性的数学推导如下。首先从RLHF的优化目标出发:
max π θ E x ∼ D ( E y ∼ π θ ( ⋅ ∣ x ) r ϕ ( x , y ) − β D K L [ π θ ( ⋅ ∣ x ) ∥ π r e f ( ⋅ ∣ x ) ] ) \max_{\pi_{\theta}} E_{x \sim D}(E_{y \sim \pi_{\theta}(\cdot|x)}r_{\phi}(x,y)-\beta D_{KL}[\pi_{\theta}(\cdot|x) \parallel \pi_{ref}(\cdot|x)]) maxπθEx∼D(Ey∼πθ(⋅∣x)rϕ(x,y)−βDKL[πθ(⋅∣x)∥πref(⋅∣x)])
= max π θ E x ∼ D , y ∼ π θ ( ⋅ ∣ x ) ( r ϕ ( x , y ) − β log π θ ( y ∣ x ) π r e f ( y ∣ x ) ) =\max_{\pi_{\theta}} E_{x \sim D, y \sim \pi_{\theta}(\cdot|x)} (r_{\phi}(x,y)-\beta \log \frac{\pi_{\theta}(y|x)}{ \pi_{ref}(y|x)}) =maxπθEx∼D,y∼πθ(⋅∣x)(rϕ(x,y)−βlogπref(y∣x)πθ(y∣x))
= min π θ E x ∼ D , y ∼ π θ ( ⋅ ∣ x ) ( log π θ ( y ∣ x ) π r e f ( y ∣ x ) − 1 β r ϕ ( x , y ) ) =\min_{\pi_{\theta}} E_{x \sim D, y \sim \pi_{\theta}(\cdot|x)} (\log \frac{\pi_{\theta}(y|x)}{ \pi_{ref}(y|x)}-\frac{1}{\beta}r_{\phi}(x,y)) =minπθEx∼D,y∼πθ(⋅∣x)(logπref(y∣x)πθ(y∣x)−β1rϕ(x,y))
= min π θ E x ∼ D , y ∼ π θ ( ⋅ ∣ x ) ( log π θ ( y ∣ x ) π r e f ( y ∣ x ) e x p ( 1 β r ϕ ( x , y ) ) ) =\min_{\pi_{\theta}} E_{x \sim D, y \sim \pi_{\theta}(\cdot|x)} (\log \frac{\pi_{\theta}(y|x)}{ \pi_{ref}(y|x)exp(\frac{1}{\beta}r_{\phi(x,y)})}) =minπθEx∼D,y∼πθ(⋅∣x)(logπref(y∣x)exp(β1rϕ(x,y))πθ(y∣x))
接下来,我们的目标是构造一个可以归一化的分布 π ∗ \pi^* π∗,把以上式子写成 log π θ π ∗ \log \frac{\pi_{\theta}}{\pi^*} logπ∗πθ的形式。故定义 Z ( x ) = ∑ y π r e f ( y ∣ x ) exp ( 1 β r ϕ ( x , y ) ) Z(x)=\sum_y \pi_{ref}(y|x)\exp (\frac{1}{\beta} r_{\phi}(x,y)) Z(x)=∑yπref(y∣x)exp(β1rϕ(x,y)), π ∗ ( y ∣ x ) = 1 Z ( x ) π r e f ( y ∣ x ) e x p ( 1 β r ϕ ( x , y ) ) \pi^*(y|x)=\frac{1}{Z(x)}\pi_{ref}(y|x)exp(\frac{1}{\beta}r_{\phi(x,y)}) π∗(y∣x)=Z(x)1πref(y∣x)exp(β1rϕ(x,y))
则原式 = min π θ E x ∼ D , y ∼ π θ ( ⋅ ∣ x ) log π θ ( y ∣ x ) π ∗ ( y ∣ x ) Z ( x ) = min π θ E x ∼ D , y ∼ π θ ( ⋅ ∣ x ) log π θ ( y ∣ x ) π ∗ ( y ∣ x ) − Z ( x ) =\min_{\pi_{\theta}} E_{x \sim D, y \sim \pi_{\theta}(\cdot|x)} \log \frac{\pi_{\theta}(y|x)}{ \pi^*(y|x)Z(x)}=\min_{\pi_{\theta}} E_{x \sim D, y \sim \pi_{\theta}(\cdot|x)} \log \frac{\pi_{\theta}(y|x)}{ \pi^*(y|x)}-Z(x) =minπθEx∼D,y∼πθ(⋅∣x)logπ∗(y∣x)Z(x)πθ(y∣x)=minπθEx∼D,y∼πθ(⋅∣x)logπ∗(y∣x)πθ(y∣x)−Z(x)
又因为 Z ( x ) Z(x) Z(x)和 π θ \pi_{\theta} πθ完全无关,可以视作常数。所以原式 = min π θ E x ∼ D D K L ( π θ ( ⋅ ∣ x ) ∥ π ∗ ( ⋅ ∣ x ) ) =\min_{\pi_{\theta}}E_{x \sim D} D_{KL}(\pi_{\theta}(\cdot|x) \parallel \pi^*(\cdot|x)) =minπθEx∼DDKL(πθ(⋅∣x)∥π∗(⋅∣x)),当 π θ = π ∗ \pi_{\theta}=\pi^* πθ=π∗时,取得最小值。
此时, π θ ( y ∣ x ) = 1 Z ( x ) π r e f ( y ∣ x ) e x p ( 1 β r ϕ ( x , y ) ) \pi_{\theta}(y|x)=\frac{1}{Z(x)}\pi_{ref}(y|x)exp(\frac{1}{\beta}r_{\phi(x,y)}) πθ(y∣x)=Z(x)1πref(y∣x)exp(β1rϕ(x,y)),故 r ϕ ( x , y ) = β log π θ ( y ∣ x ) π r e f ( y ∣ x ) + β log Z ( x ) r_{\phi}(x,y)=\beta \log \frac{\pi_{\theta}(y|x)}{\pi_{ref}(y|x)}+\beta \log Z(x) rϕ(x,y)=βlogπref(y∣x)πθ(y∣x)+βlogZ(x)
把这个值再代入回 p ∗ ( y 1 > y 2 ∣ x ) = σ ( r ∗ ( x , y 1 ) − r ∗ ( x , y 2 ) ) p^*(y_1>y_2|x)=\sigma(r^*(x,y_1)-r^*(x,y_2)) p∗(y1>y2∣x)=σ(r∗(x,y1)−r∗(x,y2))得到:
p ∗ ( y 1 > y 2 ∣ x ) = σ ( β π θ ( y 2 ∣ x ) π r e f ( y 2 ∣ x ) − β π θ ( y 1 ∣ x ) π r e f ( y 1 ∣ x ) ) p^*(y_1>y_2|x)=\sigma(\beta\frac{\pi_{\theta}(y_2|x)}{\pi_{ref}(y_2|x)}-\beta\frac{\pi_{\theta}(y_1|x)}{\pi_{ref}(y_1|x)}) p∗(y1>y2∣x)=σ(βπref(y2∣x)πθ(y2∣x)−βπref(y1∣x)πθ(y1∣x))
以最大化这个值为目标,就得到了DPO的Loss函数。
传统的PPO要同时维护多个模型,而DPO不需要奖励模型、只需要训练策略模型,硬件开销显著减小,并且因为流程简洁,训练更加稳定。但DPO对数据噪声更加敏感,如果数据的好坏对比不明显,训练效果会显著变差。
On-Policy RL算法
虽然想简要介绍PPO,GRPO,DAPO到GSPO的on-policy系列强化学习算法,但是限于篇幅,让我们下一节再继续吧。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)