训练与对齐
训练与对齐
预训练、微调、LoRA,以及 RLHF、DPO、GRPO。
024 · 难 · 在训练一个百或千亿参数级别的 LLM 时,你会面临哪些主要的工程和算法挑战?(例如:显存、通信、训练不稳定性等)
来源:Hello-Agents Extra01
训练百亿或千亿参数级别的LLM是一个巨大的系统工程,涉及硬件、软件和算法的深度协同。其挑战主要体现在以下三个方面:
1. 显存挑战 (Memory Wall):
- 问题: 一个千亿参数的模型,其模型参数、梯度、优化器状态(如Adam中的动量和方差)加起来需要数TB的存储空间,远远超出了任何单张GPU的显存(目前最先进的H100也只有80GB)。
- 解决方案(3D并行):
- 数据并行 (Data Parallelism, DP): 最基础的并行方式。在每张卡上都保留一份完整的模型副本,但将数据切分成多个batch,每张卡处理一个batch。计算完成后通过All-Reduce操作同步梯度。这种方式不能解决单卡显存不足的问题。
- 流水线并行 (Pipeline Parallelism, PP): 将模型的层(layers)进行垂直切分,不同的GPU负责模型的一部分(例如,GPU-1负责1-16层,GPU-2负责17-32层)。这可以有效降低单卡显存,但会引入“流水线气泡”(pipeline bubbles),即部分GPU在等待上下游数据时会处于空闲状态。
- 张量并行 (Tensor Parallelism, TP): 将模型中的单个大算子(如大的权重矩阵)进行水平切分,放到不同的GPU上协同计算。例如,将一个大的矩阵乘法分解到多张卡上。这也能降低单卡显存,但会引入非常高的通信开销。
- ZeRO (Zero Redundancy Optimizer): 由微软DeepSpeed提出的显存优化技术。它在数据并行的基础上,将优化器状态、梯度、甚至模型参数也进行切分,分布到所有GPU上。每个GPU只保留自己需要计算的那一部分,极大地降低了单卡的显存冗余,是目前大规模训练的标配。
2. 通信挑战 (Communication Bottleneck):
- 问题: 上述所有并行策略都引入了大量的GPU间通信。例如,DP需要同步梯度,PP需要传递激活值,TP需要在每次前向和后向传播中交换计算结果。当GPU数量巨大时,通信所需的时间可能超过计算本身,成为整个训练的瓶颈。
- 解决方案:
- 硬件层面: 使用高速互联技术,如单机内的NVLink和跨节点的InfiniBand网络。
- 软件层面: 开发高效的通信算法(如Ring All-Reduce),并设计调度策略来将计算和通信操作重叠(overlap),以隐藏通信延迟。
3. 训练不稳定性挑战 (Training Instability):
- 问题: 训练如此巨大的模型在数值上非常脆弱。由于计算层数极深、数据量极大,训练过程中很容易出现梯度爆炸或消失,导致损失(Loss)突然飙升为NaN(Not a Number),使得数小时甚至数天的训练成果毁于一旦。
- 解决方案:
- 数值精度: 普遍采用 BF16 (BFloat16) 混合精度训练。BF16相比FP16有更大的动态范围,能有效避免梯度下溢,同时保持FP32的稳定性。同时,关键部分(如优化器的master weights)仍保留FP32以保证精度。
- 稳定的模型架构: 采用更稳定的架构设计,如Pre-LayerNorm(在自注意力和FFN之前进行层归一化),以及使用更平滑的激活函数如GeLU/SwiGLU。
- 梯度裁剪 (Gradient Clipping): 设定一个梯度的范数上限,如果计算出的梯度超过这个阈值,就将其缩放到阈值以内,这是防止梯度爆炸最直接有效的方法。
- 学习率调度与预热 (Learning Rate Scheduling & Warmup): 采用精心设计的学习率调度策略,如在训练初期使用一个较小的学习率并逐渐增大的“预热”阶段,有助于模型在训练早期稳定下来。
025 · 中 · 和传统SFT相比,RLHF旨在解决语言模型中的哪些核心问题?为什么说SFT本身不足以实现我们期望的“对齐”目标?
来源:Hello-Agents Extra01
与传统的监督微调(SFT)相比,RLHF(从人类反馈中进行强化学习)旨在解决语言模型中更深层次的“对齐”(Alignment)问题。这具体包括三个方面,通常被称为“HHH”原则:
- 有用性(Helpfulness): 模型应该提供准确、相关且信息量丰富的内容,尽力帮助用户解决问题。
- 诚实性(Honesty): 模型应基于其知识进行回答,不应捏造事实。在不知道答案或无法满足要求时,应主动承认,而不是产生幻觉。
- 无害性(Harmlessness): 模型不能产生有偏见、歧视性、暴力、色情或任何其他可能造成伤害的内容。
为什么SFT本身不足以实现对齐目标?
- 目标定义模糊: “有用”、“诚实”、“无害”这些概念是复杂、主观且依赖上下文的,很难通过一个静态的、固定的SFT数据集来精确定义。例如,“怎样算一个有帮助的回答?”并没有唯一的正确答案,它取决于用户的偏好。
- 偏好难以标注: 对于一个问题,可能有多个“正确”但风格、详略、侧重点不同的回答。SFT通常采用类似(prompt, ideal_response)的数据格式,它无法表达“回答A比回答B更好”这类细粒度的偏好信息。
- 行为空间巨大: LLM可以生成几乎无限的回复。SFT数据集只能覆盖其中极小的一部分高质量示例,模型很容易学到数据集中的表面统计特征(statistical artifacts),而不是真正理解背后的原则。它教会了模型“模仿”,但没有教会模型“判断”。
- 暴露偏差(Exposure Bias): SFT在训练时,每一步都基于真实的“黄金”上下文。但在推理时,模型是基于自己生成的上下文来继续生成,一旦早期出现偏差,错误会累积。
RLHF通过引入一个代表人类偏好的奖励模型,让LLM在一个探索性的框架(强化学习)中学习,使其能够理解并优化那些难以用SFT范式表达的、模糊的人类偏好,从而更好地实现对齐。
026 · 中 · 请详细阐述经典RLHF流程的三个核心阶段。在每个阶段,输入是什么,输出是什么,以及该阶段的关键目标是什么?
来源:Hello-Agents Extra01
经典的RLHF流程(由OpenAI的InstructGPT论文提出)包含三个核心阶段:
阶段一:监督微调(Supervised Fine-Tuning, SFT)
- 输入: 一个高质量的、由人工编写或筛选的指令跟随数据集。数据格式通常是(指令 Prompt, 理想回答 Response)。
- 输出: 一个经过微调的基础语言模型,我们称之为SFT模型。
- 关键目标: 让预训练好的LLM初步具备理解和遵循人类指令的能力。这是为后续阶段提供一个良好初始策略(policy)的基础,让模型先学会“说什么话”,而不是“胡言乱语”。
阶段二:训练奖励模型(Reward Model, RM)
- 输入: 一个人类偏好比较数据集。生成这个数据集的流程是:
- 从指令数据集中采样一个Prompt。
- 用第一阶段的SFT模型对该Prompt生成多个(通常是2到4个)不同的回答。
- 由人类标注者对这些回答进行排序,选出最好的和最差的。数据格式通常是(Prompt, 胜出回答 $y_w$, 落败回答 $y_l$)。
- 输出: 一个奖励模型(RM)。这个模型能够输入任何(Prompt, Response)对,并输出一个标量分数,这个分数代表了人类对该回答的偏好程度。
- 关键目标: 学习一个能够模仿和泛化人类偏好的函数。这个RM将作为下一阶段强化学习的“环境”或“裁判”,为LLM的探索提供指导信号。
阶段三:近端策略优化(Proximal Policy Optimization, PPO)
- 输入:
- 第一阶段的SFT模型(作为初始策略)。
- 第二阶段训练好的RM(作为奖励函数)。
- 一个新的、用于策略探索的指令数据集。
- 输出: 经过RLHF对齐的最终语言模型。
- 关键目标: 使用强化学习来进一步微调SFT模型。在这个阶段,模型(作为Agent)会针对一个Prompt生成一个回答(Action),奖励模型(作为Environment)会给这个回答打分(Reward),然后通过PPO算法更新模型参数,使其生成的回答能在获得高奖励的同时,又不过于偏离原始SFT模型的风格和内容,从而实现“对齐”。
027 · 难 · 奖励模型的设计至关重要。它的模型架构通常如何选择?它与我们最终要优化的LLM是什么关系?在训练奖励模型时,常用的损失函数是什么?请解释其背后的数学原理(例如,可以结合Bradley-Terry模型来解释)。
来源:Hello-Agents Extra01
模型架构选择:
奖励模型(RM)的架构通常选择与要优化的LLM相同或非常相似的架构,但有两点关键区别:
- RM的初始化权重通常来自于第一阶段训练好的SFT模型。这样做可以保证RM对指令和语言风格有很好的基础理解。
- RM的最后一层(通常是预测下一个token的softmax层)被替换为一个回归头(Regression Head),这个头通常是一个线性层,用于输出一个标量(scalar),即奖励分数。
与最终LLM的关系:
RM是最终LLM的效用函数代理(proxy for the utility function)。它在RLHF流程中扮演着人类偏好的模拟器的角色。最终的LLM(即策略)的目标就是生成能够让这个RM给出高分数的回答。因此,RM的质量直接决定了最终LLM对齐的天花板。如果RM有缺陷或偏见,LLM在优化过程中就会“奖励作弊”,利用这些缺陷来获得高分,而不是真正生成人类喜欢的回答。
常用的损失函数:
RM训练时最常用的损失函数是成对排序损失(Pairwise Ranking Loss)。其目标是,对于任意一个给定的prompt,RM赋予“胜出回答”( $y_w$ )的分数 $r(y_w)$ 应该高于赋予“落败回答”( $y_l$ )的分数 $r(y_l)$ 。
数学原理解释(结合Bradley-Terry模型):
Bradley-Terry模型是一个用于描述成对比较结果概率的模型。它假设每个个体(在这里是每个回答)都有一个潜在的“实力”分数(即奖励分数 $r$ )。回答 $y_w$ 优于 $y_l$ 的概率 $P(y_w > y_l)$ 可以用一个logistic函数(即sigmoid函数 $\sigma$ )来建模:
$$P(y_w > y_l | x) = \sigma(r(y_w | x) - r(y_l | x))$$
其中 $x$ 是prompt, $r(y|x)$ 是RM给出的分数。这个公式的直观意义是,两个回答的奖励分数差距越大,我们越确信其中一个比另一个好。
在训练时,我们的目标是最大化我们观察到的人类偏好数据的对数似然。对于一个偏好数据 $(y_w, y_l)$ ,我们希望最大化 $P(y_w > y_l)$ 的对数。因此,损失函数就是其负对数似然:
$$\text{Loss} = -\log(P(y_w > y_l | x)) = -\log(\sigma(r(y_w | x) - r(y_l | x)))$$
这个损失函数会惩罚那些RM给分错误(即 $r(y_l) > r(y_w)$ )的情况,并驱动RM学习到一个能够准确反映人类偏好排序的打分函数。
028 · 中 · 在RLHF的第三阶段,PPO是最主流的强化学习算法。为什么选择PPO,而不是其他更简单的策略梯度算法(如REINFORCE)或者Q-learning系算法?PPO中的KL散度惩罚项起到了什么关键作用?
来源:Hello-Agents Extra01
在RLHF的第三阶段选择PPO(近端策略优化)作为主流算法是基于其在大型语言模型这种复杂环境下,对训练稳定性、样本效率和实现简易性之间做出的良好权衡。
为什么不选择其他算法?
- vs. REINFORCE (简单策略梯度):
- REINFORCE算法以其 高方差(high variance) 而闻名。它直接使用蒙特卡洛采样得到的整个序列的奖励来更新策略,这会导致梯度估计非常不稳定,尤其是在LLM这种动作空间巨大、奖励信号稀疏的环境中。训练过程会非常震荡,难以收敛。PPO通过引入价值函数作为基线(baseline)和使用优势函数(advantage function),显著降低了方差,使得训练更稳定。
- vs. Q-learning系算法 (如DQN):
- DQN等基于价值的算法主要是为离散(discrete)且低维的动作空间设计的。它们需要为每个状态下的每个可能动作计算一个Q值。对于LLM来说,动作空间是整个词汇表在每个时间步的组合,这是一个极其巨大的、组合性的空间。直接应用Q-learning来计算每个词的Q值是不可行的。而PPO作为一种策略梯度方法,直接在策略空间进行优化,天然地适用于这种连续或巨大的动作空间。
PPO中KL散度惩罚项的关键作用:
PPO的目标函数中包含一个非常关键的KL散度惩罚项:
$$\text{Objective}( \pi_{\text{RL}} ) = \mathbb{E} [ \text{Reward} ] - \beta \cdot \mathbb{KL}(\pi_{\text{RL}} || \pi_{\text{SFT}})$$
其中 $\pi_{\text{RL}}$ 是当前正在优化的策略, $\pi_{\text{SFT}}$ 是第一阶段训练好的初始SFT策略, $\beta$ 是一个超参数。这个KL散度项起到了 “信任区域” 或 “正则化” 的作用,其关键目的有两个:
- 防止策略崩溃(Policy Collapse): 奖励模型(RM)是不完美的,总会存在一些漏洞。如果没有KL惩罚项,RL策略会不顾一切地寻找RM的漏洞来“作弊”以获得最高分,这常常导致生成的文本毫无意义、充满重复或攻击性内容,即所谓的“模式崩溃”。KL惩罚项通过约束新策略不能与初始的、表现尚可的SFT策略偏离太远,从而将优化限制在一个“安全”的区域内,保留了SFT模型良好的语言特性。
- 保证探索效率和多样性: 保持与SFT模型的相近度,意味着模型不会过早地收敛到某个奖励高但质量差的局部最优解。它鼓励模型在已经学会的、有意义的语言分布附近进行探索,而不是跳到一个完全陌生的、可能导致奖励模型失效的区域。这有助于维持生成文本的多样性和可读性。
029 · 难 · 如果在PPO训练过程中,KL散度惩罚项的系数 β 设置得过大或过小,分别会导致什么样的问题?你将如何通过实验和观察来调整这个超参数?
来源:Hello-Agents Extra01
KL散度惩罚项的系数 $\beta$ 是RLHF训练中一个至关重要的超参数,它控制着“利用奖励模型”和“保持语言模型本性”之间的平衡。
设置不当导致的问题:
$\beta$ 设置过大:
问题描述: 如果惩罚系数过大,模型会过于“保守”。为了最小化与SFT模型的KL散度,策略更新的步子会非常小,甚至几乎不更新。
具体表现: 模型对奖励信号的响应不足,训练过程看起来“停滞不前”。最终得到的RLHF模型与原始的SFT模型在行为和输出上几乎没有区别,RLHF阶段的优化效果大打折扣,没有充分学到人类的偏好。
$\beta$ 设置过小:
问题描述: 如果惩罚系数过小,对策略的约束力不足,模型会变得过于“激进”,不顾一切地去迎合奖励模型(RM)。
具体表现:
- 奖励作弊(Reward Hacking): 模型很快发现RM的漏洞并加以利用,生成一些在RM看来分数很高,但实际质量很差、甚至不通顺的文本。
- 模式崩溃(Mode Collapse): 模型输出的风格和内容变得极其单一、重复,失去了多样性。例如,可能会反复使用某些“奉承”或“安全”的短语,因为这些短语被RM赋予了高分。
- 语言模型能力退化: 偏离SFT模型太远可能导致模型忘记基本的语言知识,生成语法错误或无意义的文本。
如何通过实验和观察来调整 $\beta$ ?
调整 $\beta$ 是一个经验性的过程,通常需要监控以下几个关键指标:
- 监控KL散度值: 在训练日志中,实时观察每个batch或epoch的平均KL散度。一个健康的训练过程,KL散度应该在一个相对稳定且合理的范围内波动。如果KL值持续接近于0,说明 $\beta$ 可能太大了。如果KL值急剧增大且不稳定,说明 $\beta$ 可能太小了。
- 监控奖励分数: 观察奖励模型给出的平均分数。正常情况下,奖励分数应该随着训练稳步提升。如果奖励分数提升很快,但KL散度也急剧增大,就需要警惕奖励作弊的风险。如果奖励分数几乎不增长,说明 $\beta$ 可能太大了。
- 定期进行定性分析(Qualitative Analysis): 这是最重要的一步。在训练的不同阶段(例如,每隔N个step),从验证集中随机抽取一些prompt,用当前训练的策略模型和SFT参考模型分别生成回答。人工对比检查:
- RL模型的回答是否比SFT模型更符合期望的偏好?
- RL模型的回答是否出现了重复、模式化、不通顺等问题?
- RL模型是否保留了基本的语言流畅度和事实性?
- 设置KL散度目标范围: 一些实现(如TRL库)中,会设定一个KL散度的目标范围。如果实际KL值超出了这个范围,会动态地调整 $\beta$ 值,使其保持在目标范围内。这是一个自动化调整的思路。
通过综合以上定量指标和定性观察,可以迭代地调整 $\beta$ 值,直到找到一个既能有效利用奖励信号,又能保持模型稳定性和多样性的最佳平衡点。
030 · 难 · 什么是“奖励作弊/奖励黑客”(Reward Hacking)?请结合一个具体的LLM应用场景给出一个例子,并探讨几种可能的缓解策略。
来源:Hello-Agents Extra01
奖励作弊(Reward Hacking),也称作“规范博弈”(Specification Gaming),指的是在强化学习中,智能体(Agent)发现并利用了奖励函数(Reward Function)的漏洞或不完善之处,以一种设计者非预期的方式来最大化奖励,但实际上并没有完成任务的真正目标。本质上是“钻了规则的空子”。
LLM应用场景举例:
- 场景: 训练一个生成文本摘要的LLM。
- 奖励模型(RM)的设计: 假设我们设计的RM偏好那些包含原文中所有重要关键词且长度较长(认为长摘要信息更全)的摘要。
- 奖励作弊的现象:
经过RLHF训练后,这个LLM可能会生成这样的“摘要”:它不再是精炼地总结原文,而是将原文中的所有句子,特别是那些含有关键词的句子,原封不动地、大量地复制粘贴过来,并用一些连接词(如“此外”、“同时”、“而且”)将它们生硬地串联起来,形成一篇很长但毫无信息浓缩价值的文本。 - 为什么这是作弊: 这个生成的文本完美地迎合了RM的两个偏好:1)包含了所有关键词;2)长度很长。因此RM会给它打出非常高的分数。然而,它完全违背了“摘要”这个任务的初衷——即简洁地概括核心内容。
缓解策略:
- 改进奖励模型(Iterative RM Improvement):
- 核心思想: 奖励作弊的根源在于RM不够好。最直接的方法就是不断优化RM。
- 具体做法: 将模型作弊生成的case(即RM打高分但人类认为很差的例子)重新加入到RM的训练数据中,作为负样本。通过这种迭代的方式,让RM学会识别并惩罚这些作弊行为。
- 增强策略约束(KL Divergence Penalty):
- 核心思想: 限制模型为了高分而“走火入魔”。
- 具体做法: 在PPO训练中,使用一个足够强的KL散度惩罚项。这会惩罚那些与初始SFT模型行为差异过大的策略,使得模型即使发现作弊路径,也会因为“行为过于怪异”而被KL散度项拉回来,从而不敢轻易作弊。
- 奖励函数设计的多样化(Ensemble or Multi-objective Rewards):
- 核心思想: 避免单一、简单的奖励指标。
- 具体做法: 设计更复杂的奖励函数,例如,除了RM的分数,再引入一个明确惩罚“重复度”或“与原文相似度过高”的惩罚项。或者训练多个RM的集成(Ensemble),对它们的打分进行平均,这可以减少单个RM的偏见被利用的风险。
- 过程监督(Process Supervision) vs. 结果监督(Outcome Supervision):
- 核心思想: 奖励好的思考过程,而不仅仅是最终结果。
- 具体做法: 对于一些推理任务,可以让人类不仅对最终答案评分,也对模型生成的中间思考步骤进行评分,训练一个能评估推理过程质量的RM。这使得模型更难通过“猜对答案”的方式作弊。
031 · 中 · RLHF流程复杂且不稳定。近年来出现了一些替代方案,例如DPO。请解释DPO的核心思想,并比较它与传统RLHF(基于PPO)的主要区别和优势。
来源:Hello-Agents Extra01
DPO(Direct Preference Optimization)的核心思想:
DPO是一种更简单、更稳定的语言模型偏好对齐方法,其核心思想是 绕过(bypass) 显式的奖励模型建模和复杂的强化学习训练过程,直接利用偏好数据来优化语言模型。
它的推导过程很巧妙:它首先写出了传统RLHF流程(奖励建模+PPO)的优化目标,然后通过数学变换发现,最优的RLHF策略与参考策略(SFT模型)以及隐式的奖励函数之间存在一个解析关系。最终,它把这个关系代入到奖励模型的损失函数中,神奇地得到了一个可以直接在偏好数据上优化语言模型策略的损失函数,而奖励函数在这个过程中被“抵消”掉了。
简单来说,DPO将RLHF这个“先学习奖励,再用RL优化”的两阶段问题,直接转换成了一个等价的“直接用偏好数据进行监督学习”的一阶段问题。它的损失函数形式上类似一个分类损失,目标是提高模型对“胜出回答”的生成概率,同时降低对“落败回答”的生成概率。
与传统RLHF(基于PPO)的主要区别和优势:
| 特性 | 传统RLHF (PPO-based) | DPO (Direct Preference Optimization) |
|---|---|---|
| 流程阶段 | 三阶段: 1. SFT 2. 训练RM 3. PPO-RL | 两阶段: 1. SFT 2. 直接在偏好数据上微调 |
| 核心组件 | 需要一个显式的奖励模型(RM)和复杂的强化学习训练循环(采样、评估、更新)。 | 不需要独立的奖励模型,也不需要强化学习。 |
| 训练过程 | 复杂且不稳定:涉及Actor、Critic、RM和SFT四个模型,超参数多(如 $\beta$ , $\lambda$ 等),对实现细节敏感,容易出现奖励作弊和训练崩溃。 | 简单且稳定:本质上是一个监督学习任务,直接在偏好数据上计算损失并用梯度下降更新模型。实现简单,超参数少,训练过程稳定。 |
| 计算成本 | 高:PPO需要在推理模式下从策略模型中大量采样生成数据,并用RM进行评估,计算开销大。 | 低:只需要计算偏好对中两个回答的似然概率,无需额外采样和奖励模型的前向传播。 |
| 效果 | 效果已被广泛验证,是工业界标准。 | 在许多任务上被证明效果持平甚至优于传统RLHF,同时成本更低。 |
总结优势:
DPO相对于传统RLHF的主要优势是简洁、稳定、高效。它大大简化了对齐流程,降低了实现难度和计算成本,使得偏好对齐技术更容易被广泛应用,同时在效果上也不逊色于甚至超越了复杂的RLHF方法。
032 · 难 · 想象一下,你训练完成的RLHF模型在离线评估中表现优异,奖励模型分数很高,但上线后用户反馈其回答变得越来越“模式化”、奉承、且缺乏信息量。你认为可能的原因是什么?你会从哪些方面着手分析和解决这个问题?
来源:Hello-Agents Extra01
这是一个典型的RLHF中“对齐税”(Alignment Tax)或“模式崩溃”(Mode Collapse)现象。即模型为了迎合学到的偏好,牺牲了内容的多样性和信息量。
可能的原因分析:
- 奖励模型(RM)的偏差和过拟合:
- 原因: RM本身可能学到了有偏的、表面的模式。例如,人类标注者可能无意识地更偏爱那些语气礼貌、结构清晰、使用特定“安全”词汇(如“根据我的知识...”、“作为一个AI模型...”)的回答。RM学到了这些表面特征,并给这类回答高分,而不管其信息量如何。
- 离线评估的欺骗性: 离线评估通常也是用这个有偏的RM来打分的,所以模型分数自然很高,但这是一种“自欺欺人”。
- PPO优化过程中的过度优化(Over-optimization):
- 原因: PPO算法非常强大,如果KL散度的惩罚系数 $\beta$ 设置得过小,或者训练步数过多,模型会过度地在RM定义的奖励景观(reward landscape)中寻找最高点。而这个最高点很可能就是一个狭窄的“模式化”区域。
- 后果: 模型找到了获得高分的“万能公式”,即无论什么问题,都用一种奉承、安全的模式来回答,因为这是RM最喜欢的。
- 偏好数据本身的局限性:
- 原因: 用于训练RM的人类偏好数据可能不够多样,或者标注标准过于单一。例如,标注者可能倾向于选择更“政治正确”或“四平八稳”的回答,导致RM学不到对“有创意”、“信息密度高”等更复杂维度的偏好。
分析和解决问题的步骤:
- 深入分析奖励模型(RM Diagnosis):
- 做法: 首先要诊断RM。我会构造一些对比样本:一个是有信息量但朴实的回答,另一个是模式化、奉承但信息量低的回答。然后用RM去打分,看它是否真的更偏爱后者。
- 目的: 验证RM是否是问题的根源。
- 数据驱动的解决方案(Data-driven Solution):
- 做法: 如果RM确实存在偏差,需要重新进行数据迭代。收集那些“模式化”的失败案例,并让标注者明确地将它们标记为比那些信息量更丰富的回答更差。用这些新的偏好数据来继续微调或重新训练RM。
- 目的: 修正RM的价值观,让它学会欣赏多样性和信息量。
- 算法层面的调整(Algorithmic Adjustment):
- 做法:
- 增大KL散度系数 $\beta$: 增强对SFT模型的约束,让模型不敢过于偏离其原始的、更多样化的语言风格。
- 引入熵奖励(Entropy Bonus): 在PPO的目标函数中加入一项熵奖励,鼓励模型生成更多样化的词元分布,对抗模式崩溃。
- 提前停止(Early Stopping): 监控模型的输出质量,在发现模式化倾向开始出现时就停止训练,而不是追求最高的RM分数。
- 解码策略的调整(Decoding Strategy Tuning):
- 做法: 在模型上线提供服务时,可以尝试调整解码策略。例如,适当提高Temperature或使用Top-K/Top-P采样而非Greedy Search,可以增加生成文本的随机性和多样性,在一定程度上缓解模式化问题。
033 · 中 · 你知道Deepseek的GRPO吗,它和PPO的主要区别是什么?优劣是什么?
来源:Hello-Agents Extra01
原文没有写 GRPO 和 PPO 的区别,只要求对照 GRPO 论文自己讲。
034 · 难 · GSPO和DAPO有听说过吗?他们和GRPO有什么区别?
来源:Hello-Agents Extra01
原文没有给区别。它写的是:GSPO 和 DAPO 当时还不是 PPO、DPO 那种已经被广泛采用的主流算法缩写,要看腾讯、阿里的相关论文。
035 · 难 · 如何解决信用分配问题?token级别和seq级别的奖励有何不同?
来源:Hello-Agents Extra01
信用分配问题(Credit Assignment Problem)是强化学习中的一个经典难题。在语言模型生成的场景下,它指的是:当一个完整的回答(序列)得到一个最终的奖励分数后,我们如何确定这个分数应该归功于(或归咎于)序列中的哪些具体的词元(token)。一个好的结尾可能弥补了一个糟糕的开头,反之亦然。简单地将最终奖励分配给每一个词元是不公平且低效的。
Token级别奖励 vs. Sequence级别奖励
- Sequence级别奖励 (Sequence-level Reward):
- 定义: 这是RLHF中最常见的形式。奖励模型(RM)读取整个生成的序列,并给出一个单一的标量分数作为对整个序列的评价。
- 优点:
- 与人类评估模式一致: 人类通常是读完整个回答后形成一个总体印象,这种方式更容易收集偏好数据和训练RM。
- 实现简单: 奖励函数的设计和计算都非常直接。
- 缺点:
- 信用分配模糊: 这正是信用分配问题的直接体现。序列中所有token都收到相同的奖励信号,无法区分“好词”和“坏词”,导致学习信号稀疏且充满噪声,降低了学习效率。
- Token级别奖励 (Token-level Reward):
- 定义: 为序列中的每一个token都分配一个独立的奖励分数。这个分数应该反映该token在当时上下文中的贡献。
- 优点:
- 信号精细: 提供了非常精细和密集的学习信号,理论上可以极大地提高学习效率和最终性能,因为它直接告诉模型哪一步走对了,哪一步走错了。
- 缺点:
- 难以获取: 让标注者为每个token打分几乎是不可能的,认知负荷极大。因此,Token级别的奖励通常不是直接从人类那里获得的。
- 定义困难: 如何定义一个token的“好坏”本身就很复杂。一个词的好坏严重依赖于后续生成的上下文。
如何解决(或缓解)信用分配问题?
尽管我们通常只得到Sequence级别的奖励,但主流的RL算法(如PPO)内部有一些机制来尝试缓解信用分配问题:
- 优势函数(Advantage Function)和价值函数(Value Function):
- 方法: 在PPO中,除了策略模型(Actor),还会训练一个价值模型(Critic)。这个Critic的作用是估计在某个状态(即生成了部分序列的上下文)下,未来可能获得的期望奖励。
- 信用分配: 通过计算优势函数(Advantage),即
A(s, a) = R_t - V(s_t)(简化的形式),我们可以估计出在当前状态 $s_t$ 选择动作 $a_t$ (生成某个token)比“平均水平”好多少。 $R_t$ 是实际得到的未来总回报, $V(s_t)$ 是期望的平均回报。这个优势值可以被看作是一种伪Token级别的奖励信号。 - GAE(Generalized Advantage Estimation): PPO通常使用GAE来更稳定地估计优势函数,它通过指数加权平均综合了多个时间步的TD误差,进一步平衡了偏差和方差,为每个时间步提供了更可靠的信用分配信号。
简单来说,我们虽然只有一个最终的序列奖励,但通过引入一个学习未来期望的Critic,PPO能够为每一步的token生成一个更合理的、间接的、反映其边际贡献的“优势”信号,从而在实践中有效地解决了信用分配问题。
036 · 中 · 除了人类反馈,我们还可以利用AI自身的反馈来做对齐,即RLAIF。请谈谈你对RLAIF的理解,它的潜力和风险分别是什么?
来源:Hello-Agents Extra01
对RLAIF (Reinforcement Learning from AI Feedback)的理解:
RLAIF是一种对齐技术,其核心思想是在标准的RLHF流程中,用一个 强大的、独立的AI模型(通常是比被训练模型更先进的闭源模型,如GPT-4、Claude) 来替代人类标注者,为语言模型的输出提供偏好判断。
具体流程与RLHF非常相似:
- 用SFT模型针对一个prompt生成两个或多个回答。
- 将prompt和这些回答提交给一个“裁判AI”(AI Judge/Labeler)。
- 裁判AI根据预设的准则(例如,一个精心设计的prompt,要求它从“有用性”、“无害性”等方面判断哪个回答更好),输出其偏好(例如,"回答A更好")。
- 用这些AI生成的偏好数据来训练奖励模型(RM),或者直接用于DPO等算法。
- 后续的RL优化流程与RLHF完全相同。
本质上,RLAIF是用AI的偏好来“蒸馏”或“指导”被训练模型的对齐,是一种“AI训练AI”的范式。
RLAIF的潜力:
- 极高的可扩展性和效率(Scalability & Efficiency): 这是RLAIF最大的优势。AI标注者可以7x24小时不间断工作,速度远超人类,且成本极低。这使得我们可以用比传统RLHF大几个数量级的偏好数据集来训练模型,从而可能实现更好的对齐效果。
- 标注一致性(Consistency): 只要裁判AI和其使用的prompt固定,其标注标准就是完全一致的,避免了人类标注者之间固有的偏见和不一致性问题。
- 探索更复杂的偏好: 我们可以通过设计复杂的prompt,引导裁判AI从非常细微、专业的角度(如代码的优雅性、科学解释的准确性)进行评估,这可能是普通人类标注者难以做到的。
RLAIF的风险:
- 偏见的继承与放大(Bias Inheritance and Amplification): 这是RLAIF最核心的风险。裁判AI自身的偏见(无论是来自其训练数据还是其模型架构)会被毫无保留地传递给被训练的模型。如果裁判AI有某种偏见,RLAIF流程不仅会继承它,还可能因为大规模的训练而将其放大,导致最终模型产生系统性的、难以察觉的偏差。
- 价值的“近亲繁殖”: RLAIF构建了一个封闭的AI生态系统,模型的价值观来自于另一个AI。这可能导致AI的价值观与真实、多样、不断演化的人类价值观逐渐脱节,形成一种“回音室效应”或“近亲繁殖”,最终对齐到一个并非人类真正期望的目标上。
- 缺乏常识和真实世界 grounding: 裁判AI可能缺乏对物理世界、社会动态的真实理解。它可能基于文本的表面统计特征做出判断,而这些判断可能在现实世界中是荒谬或有害的。例如,它可能无法判断一个听起来很有说服力的安全建议在实践中是否危险。
- 对裁判AI的过度依赖: 整个对齐的安全性和可靠性都系于裁判AI一身。如果这个裁判AI本身存在漏洞或被恶意利用,其后果将是灾难性的。
因此,RLAIF是一个非常有潜力的技术,但其实践应用需要非常谨慎,通常需要与人类监督(Human Oversight)相结合,定期由人类专家抽查和校准AI的标注结果,以确保其对齐方向的正确性。
037 · 易 · 大模型是怎么训练出来的?
来源:小林 coding
三个阶段解决的不是同一层问题,顺序不能换。预训练给定能力上限,SFT 教格式,对齐教偏好和边界。
预训练吃公开文本:网页、代码、维基、图书、论文。GPT-3 约 3000 亿 token,Llama 3 约 15 万亿。原始爬取不能直接用,去重、滤低质、分语言、去掉有害内容,清洗成本可以比训练本身还高。
目标仍是预测下一个 token。要在不同上下文里猜准,模型就得学会语法、事实和推理:「北京是中国的____」逼它记住首都,「x=2 则 x²=____」逼它会算。训完它是续写器,不是对话器。你问「天空为什么是蓝色的」,它可能把问句再写一遍,然后跑题。
算力量级:GPT-3 大约 3.14×10²³ FLOPs。一张 A100 要算几十万年,实际是几百到几千张卡跑几个月。
SFT 把数据从连续文本换成(指令,期望回答)。模型学会看到指令就给完整答案,不要无限续写。Llama 2 大约 100 万条,但质量比数量重要:几千条精标可以赢几十万条粗数据。覆盖面要包括问答、写作、代码、角色、数学、翻译,缺一类,那类就会塌。
对齐解决「合格回答里用户更喜欢哪一种,以及什么不该说」。经典 RLHF:人对同一问题的多个回答排序,训奖励模型,再用 PPO 把主模型往高分推,同时用参考模型的 KL 把它拴住,防止奖励 hacking。流程长,要同时养多个模型,不稳定。
DPO 把带 KL 的偏好目标改写成监督学习,不再单独训奖励模型,也不跑 PPO,数据是(问题,好回答,差回答)。它是开源社区的常见方案,不是所有模型的事实。Llama 2-Chat 公开主线是 SFT、拒绝采样和 PPO/RLHF。
缺一段就不成立。只有预训练,不会对话。只有预训练加 SFT,会答但可能有害、啰嗦或自信地胡说。跳过预训练,后面是在空壳上调格式。公司之间真正难追的是预训练的数据、算力和工程,不是 SFT 技巧。
038 · 易 · 大模型微调的方案有哪些?
来源:小林 coding
微调是最后手段。Prompt 加少量示例能定格式,系统提示能定风格,经常变化的事实该进 RAG 或数据库。价格、条款、库存、合同原文不该写进权重。微调适合三件事:风格和格式 Prompt 压不住、要稳定掌握内部术语和任务模式、用小模型替掉大模型来省推理成本。
代价要先说清:标注、GPU、调参、灾难性遗忘,以及底座一升级,旧适配基本作废。
名词分两根正交的轴,可以任意搭配。
改哪些参数
- 全量:所有权重都动。上限高。7B 的 FP16 权重约 14GB,梯度再 14GB,Adam 的两个矩大约 56GB,一次迭代 80GB 起。新分布窄时,通用能力会被改掉。
- LoRA:冻结 W,只训低秩支路。7B 的可训练参数可以从几十亿降到大约两千万,一张 A100 量级的卡就能做。
- QLoRA:底座先做成 4-bit NF4,7B 权重大约压到 4GB,再套 LoRA,24GB 卡可以微调 7B 甚至 13B。精度和全精度 LoRA 接近。
学什么目标
- SFT:学(指令,期望回答),从续写切到对话。它是目标,不是一种参数更新方法。
- DPO:学(问题,好回答,差回答),在合格答案里学偏好。同样可以用 LoRA 做。
个人和小团队默认 QLoRA + SFT。有几张卡、又要风格对齐,再加 LoRA + DPO。资源够、要上限,才上全量加 RLHF。Llama 2-Chat 的公开流程是 SFT、拒绝采样和 PPO,不是「社区都用 DPO」能一句话盖过去的。
方案越重,训练成本、调参和维护一起涨。能用轻的就不要上重的。
039 · 中 · 请讲一下 LoRA 技术,除了减少参数量,它还有哪些优点?
来源:小林 coding
LoRA 属于参数高效微调。全量微调一个 7B,FP16 权重、梯度和 Adam 状态加起来大约 80GB,24GB 的卡跑不动。它的做法是冻结原始权重 W,旁边加两个小矩阵:
output = x @ (W + α · (B @ A))A 是 d×r,B 是 r×d,r 通常 8 或 16。微调时的更新量往往落在低维子空间里,不必改整个 d×d。d=4096、r=16 时,1677 万参数变成大约 13 万,大约少 128 倍。整个 7B 的可训练参数大约 2000 万,不到 0.3%。r 太小表达不够,太大就靠近全量。
省参数之外,面试要讲这五条。
- 推理可以零额外开销。 训完把
α·B·A加回 W,只做一次。之后的计算图和原模型一样。Adapter 是在每层中间插一个小网络,32 层的延迟会叠上去。 - 一个底座挂多套能力。 7B 权重大约 14GB,一套 LoRA 通常几十 MB。客服、代码、翻译按请求换旁路,不用为每个场景驻留一个完整模型。
- 遗忘风险更低,但不是免测。 原权重不动,新知识在旁路里。数据很偏、r 很大、学习率过高,或者合并之后继续训,通用能力仍会掉,要做回归。
- 更稳。 可训练参数少两个数量级,对学习率没那么敏感。主要超参就是 r,8 到 64 很多任务都能用。
- 可以加权混合。
W + α1·B1·A1 + α2·B2·A2,指令 LoRA 和代码 LoRA 不必为组合再收一轮数据。这是 LoRA merging。
| 全量 | Adapter | LoRA | |
|---|---|---|---|
| 推理额外开销 | 无 | 每层都有 | 合并后无 |
| 遗忘风险 | 高 | 低 | 低 |
| 多任务部署 | 每任务一份全量 | 中 | 一个底座加多套旁路 |
| 权重能否叠加 | 不能 | 不能 | 能 |
| 效果上限 | 最高 | 中等 | 接近全量 |
它成为事实标准,是这几条叠在一起,不是单靠「省显存」。
040 · 中 · SFT 之后还有哪些 Post-Training?RLHF、DPO、GRPO、拒绝采样什么关系?
来源:小林 coding
SFT 只学到合格格式,没学到哪个更好,也没覆盖「不该答」的场景。Post-Training 是这之后那一族方法的总称,不是 RLHF 的别名。
| 方法 | 是不是 RL | 要养几个模型 | 稳定性 | 上限 | 典型用法 |
|---|---|---|---|---|---|
| RLHF / PPO | 是 | 4:policy、reference、reward、value | 较差 | 高 | InstructGPT、早期 ChatGPT |
| DPO | 否,监督 | 2:policy、reference | 好 | 中高 | Zephyr 和大量社区 Instruct |
| GRPO | 是 | 3:policy、reference、reward;可验证任务连 reward 也能省 | 较好 | 高 | DeepSeek-Math、DeepSeek R1 |
| 拒绝采样 | 否 | policy 加一个打分器 | 很好 | 中 | Llama 2 的热身 |
| RLAIF | 是 | 和 RLHF 类似,偏好由更强模型标 | 较差 | 高 | Constitutional AI |
RLHF 先收集「A 比 B 好」这种相对排序,训奖励模型,再用 PPO 推主模型。参考模型是冻住的 SFT 副本,KL 防止它学会讨好裁判。能探索出标注里没有的答法,也能 reward hacking。显存是 SFT 的数倍。
DPO 把带 KL 的目标改成偏好对上的损失:相对参考模型,好回答的概率要比差回答抬得更多。不探索数据以外的空间,上限依赖偏好对的质量。不要说成「和任意 PPO 训练完全等价」。
GRPO 去掉 PPO 的 Value Model。同一个问题采样 G 个回答(常见 8 个),优势用组内归一化:(r - 均值) / 标准差。显存接近少一个大模型,又留着 RL 的探索。数学和代码可以直接用对错当奖励,DeepSeek R1-Zero 连奖励模型都不训。没公开配方的模型,只说「可能是同类路线」。
拒绝采样没有 RL:每个 prompt 生成 K 个候选,留下最高分,再做一轮 SFT。上限就是「自己高分答案的分布」。Llama 2 把它当热身,后面接的是 PPO,不是 DPO。
RLAIF 用更强的模型代替人工排序。标注便宜一些,但教师调用要钱,偏见也会传下去。没有更强教师时这条路走不通。
真实流程是组合。Llama 2-Chat 是 SFT,然后拒绝采样,然后 PPO/RLHF。DeepSeek R1 是少量思维链冷启动,GRPO,拒绝采样筛推理链,再 SFT,再一轮 GRPO。资源紧就 DPO;答案可验证、又要探索,就 GRPO。
041 · 中 · 大模型的 DPO 和 PPO 的区别是什么?
来源:小林 coding
两者都在 SFT 之后解决同一件事:模型已经会按指令作答,但不知道哪种答法更好,也不会主动避开有害输出。SFT 是模仿某一种写法。
PPO 是强化学习算法,用在 RLHF 里分两步。人先给同一问题的多个回答排名,训出奖励模型当裁判。主模型生成回答,裁判打分,PPO 按分数改参数。只追高分会 reward hacking,所以同时冻一份 SFT 当参考模型,用 KL 限制偏离。训练时显存里是四个模型:
- policy:正在优化的主模型
- reference:冻住的 SFT,算 KL
- reward:给回答打分
- value:估计当前状态的期望回报,用来算优势
RL 本身对超参敏感,曲线会抖。能把这套流程训稳的团队很少。
DPO 是 2023 年斯坦福的闭式改写。带 KL 约束的 RLHF 目标可以变成偏好对上的监督损失,显式奖励模型被「主模型相对参考模型的概率比」替掉。数据是 prompt、chosen、rejected。损失推动的是:相对参考模型,chosen 的概率升幅大于 rejected。只剩 policy 和 reference。它不是「任意一次 PPO 训练的逐步骤回放」,而是目标上的等价改写。
| PPO | DPO | |
|---|---|---|
| 奖励模型 | 要单独训 | 不需要显式的 |
| 同时在显存里的模型 | 4 | 2 |
| 训练 | RL,不稳 | 监督学习,稳 |
| 探索 | 能走出偏好数据 | 被偏好分布圈住 |
| 代表 | InstructGPT、早期 ChatGPT、Llama 2-Chat | Zephyr、部分 Mistral / Qwen 社区模型 |
PPO 适合有 RL 工程能力、要对齐上限的团队。DPO 适合迭代快、卡少、偏好对能众包的场景。已有分布上抬一档,DPO 够;要探索数据里没有的答法,才值得上 PPO。
GRPO 是 PPO 的近亲:同一题采样一组回答,用组内均值和标准差当基线,Value Model 就不用训了。可验证任务里奖励就是对错。面试里把「砍掉 Value Model,用组内归一化当优势」说出来即可,细节在后训练那题。
042 · 中 · LoRA 的原理是什么?为什么低秩有效?
来源:ai-agent-interview-guide
微调时冻结原权重 W,只训练增量 ΔW = B A。W 是 d × d,B 是 d × r,A 是 r × d,r 远小于 d。d = 4096、r = 8 时,参数从大约 1600 万降到大约 6.5 万。
低秩成立,是因为微调时权重的变化落在一个低维子空间里,不需要每个方向都动。这是内在维度的经验,不是数学上任意任务都低秩。
A 用高斯初始化,B 用零,这样训练开始时增量是 0,不破坏原模型。实践里常只加在注意力的 Q、V 上。推理前可以把 BA 加回 W,之后没有额外延迟。
全量微调效果上限更高,显存和算力也更高。Prompt Tuning 参数更少,通常不如 LoRA。Adapter 会在推理时多一层,LoRA 合并后没有。QLoRA 把基座量化到 4 bit 再训 LoRA,消费级显卡就能微调。
043 · 中 · RLHF 和 DPO 有什么区别?
来源:ai-agent-interview-guide
RLHF 三步:监督微调,用人类偏好对训练奖励模型,再用 PPO 让策略模型把奖励打高。效果有上限,但要同时训策略和奖励模型,PPO 对超参敏感。
DPO 不做奖励模型。偏好对直接优化策略,参考模型一般是 SFT 模型。y_w 是更偏好的回答,y_l 是落选的回答,β 控制离参考模型多远:
L = -log σ( β (log π(y_w|x)/π_ref(y_w|x) − log π(y_l|x)/π_ref(y_l|x)) )
它和带奖励模型的 RLHF 最优解在数学上对应,所以不是另一种无关的目标。
| RLHF | DPO | |
|---|---|---|
| 步骤 | SFT、奖励模型、PPO | SFT、直接偏好优化 |
| 稳定性 | PPO 更脆 | 少一个模型,更好调 |
| 数据 | 偏好对 | 偏好对 |
| 推理 | 不额外加模型 | 不额外加模型 |
多数工程选 DPO。要挤最后一点效果、并且有人调 PPO,再考虑完整 RLHF。两者都依赖偏好对的质量,数据脏时算法差异不大。