From 6dd4815b1e86301c1c48ab63fb9cafe13b2ce102 Mon Sep 17 00:00:00 2001 From: KMnO4-zx <1021385881@qq.com> Date: Tue, 17 Jun 2025 12:21:31 +0800 Subject: [PATCH] =?UTF-8?q?docs(chapter4):=20=E4=BF=AE=E6=AD=A3=E5=A4=A7?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=E6=A8=A1=E5=9E=8B=E7=AB=A0=E8=8A=82=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E5=85=AC=E5=BC=8F=E6=A0=BC=E5=BC=8F=E5=92=8C=E7=A9=BA?= =?UTF-8?q?=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 统一公式前后空格格式,提高文档可读性 --- docs/chapter4/第四章 大语言模型.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/chapter4/第四章 大语言模型.md b/docs/chapter4/第四章 大语言模型.md index 3506ce6..911e7b2 100644 --- a/docs/chapter4/第四章 大语言模型.md +++ b/docs/chapter4/第四章 大语言模型.md @@ -339,9 +339,9 @@ RM,Reward Model,即奖励模型。RM 是用于拟合人类偏好,来给 LL 1. 从 SFT 之后的 LLM 初始化两个模型分别作为 Actor Model 和 Ref Model;从训练的 RM 初始化两个模型分别作为 Reward Model 和 Critic Model; 2. 输入一个 Prompt,Actor Model 和 Ref Model 分别就 Prompt 生成回复; -3. Actor Response 和 Ref Response 计算 KL 散度:$r_{KL} = -\theta_{KL}D_{KL}(\pi_{PPO}(y|x)||\pi_{base}(y|x))$其中,$\pi_{PPO}(y|x)$即为 Actor Model 的输出,而 $\pi_{base}(y|x)$即为 Ref Model 的输出,$\theta_{KL}D_{KL}$即是计算 KL 散度的方法; +3. Actor Response 和 Ref Response 计算 KL 散度: $r_{KL} = -\theta_{KL}D_{KL}(\pi_{PPO}(y|x)||\pi_{base}(y|x))$ 其中, $\pi_{PPO}(y|x)$ 即为 Actor Model 的输出,而 $\pi_{base}(y|x)$ 即为 Ref Model 的输出, $\theta_{KL}D_{KL}$ 即是计算 KL 散度的方法; 4. Actor Response 分别输入到 Reward Model 和 Critic Model 进行打分,其中,Reward Model 输出的是回复对应的标量奖励,Critic Model 还会输出累加奖励(即从i位置到最后的累积奖励); -5. 计算的 KL 散度、两个模型的打分均输入到奖励函数中,计算奖励:$loss = -(kl_{ctl} \cdot r_{KL} + \gamma \cdot V_{t+1} - V_{t}) \log P(A_t|V_t)$,这里的 $kl_{ctl}$ 是控制 KL 散度对结果影响的权重参数,$\gamma$ 是控制下一个时间(也就是样本)打分对结果影响的权重参数,$V_t$ 是 Critic Model 的打分输出,$A_t$ 则是 Reward Model 的打分输出; +5. 计算的 KL 散度、两个模型的打分均输入到奖励函数中,计算奖励: $loss = -(kl_{ctl} \cdot r_{KL} + \gamma \cdot V_{t+1} - V_{t}) \log P(A_t|V_t)$ ,这里的 $kl_{ctl}$ 是控制 KL 散度对结果影响的权重参数, $\gamma$ 是控制下一个时间(也就是样本)打分对结果影响的权重参数, $V_t$ 是 Critic Model 的打分输出, $A_t$ 则是 Reward Model 的打分输出; 6. 根据奖励函数分别计算出的 actor loss 和 critic loss,更新 Actor Model 的参数和 Critic Model 的参数;注意,Actor Model 和 Critic Model 的参数更新方法是不同的,此处就不再一一赘述了,感兴趣的读者可以深入研究强化学习的相关理论。 在上述过程中,因为要使用到四个模型,显存占用会数倍于 SFT。例如,如果我们 RM 和 LLM 都是用 7B 的体量,PPO 过程中大概需要 240G(4张 80G A100,每张卡占用 60G)显存来进行模型加载。那么,为什么我们需要足足四个模型呢?Actor Model 和 Critic Model 较为容易理解,而之所以我们还需要保持原参数不更新的 Ref Model 和 Reward Model,是为了限制模型的更新不要过于偏离原模型以至于丢失了 Pretrain 和 SFT 赋予的能力。