文章详解了大模型对齐中的三大关键算法:PPO通过强化学习和奖励模型指导模型优化;DPO简化流程,直接基于人类偏好数据训练模型;GRPO作为PPO的改进版,通过组内比较提高效率。这些算法帮助大模型生成更符合人类偏好的文本,与链式思考结合可提升复杂推理能力,使模型更可靠、更有用。
1、 必备基础知识
在深入算法之前,让我们先准备一些强化学习的必备工具。这些是你需要的基本概念:
1.1 强化学习(RL)
想象一下教一辆自动驾驶汽车。你不会为每一种可能的情况编写代码,对吧?相反,你会让它通过驾驶来学习,并给予它反馈,例如:
- 奖励:当它保持在车道内、遵守交通规则或到达目的地时,给予“干得好!”的反馈。
- 惩罚:当它偏离车道或离其他车辆太近时,给予“小心!”的反馈。
这就是强化学习(RL)的核心。一个 AI 代理(比如我们的自动驾驶汽车或 LLM)通过在环境中做出决策来学习,目标是最大化长期奖励。它学习一种策略——一种在不同情境下选择行动的方法。
1.2 为什么 LLM 需要偏好学习?
对于简单任务,定义奖励很容易(“到达出口得 +1 分”)。但对于生成文本的 LLM,什么是“好”文本?它不仅仅是语法或事实的问题,而是人类的品味、思维的连贯性、推理的正确性、消除输出中不希望出现的偏见等更多内容。
这些是主观的!尝试编写一个“好文本”的公式是非常困难的。
偏好学习来帮忙!与其编写一个奖励公式,我们使用人类的偏好。我们让人们比较两个 LLM 的响应,并询问“你更喜欢哪一个?”
- 人类裁判,而非公式:人类成为我们的“奖励函数”。
- 学习人类喜欢的内容:我们训练 LLM 生成人类更可能喜欢的文本。
1.3 奖励模型
在训练过程中,我们不能让人类对每一个 LLM 的响应进行评判——那太慢了。因此,我们训练一个奖励模型——一个学习模仿人类偏好的人工智能裁判。
- 奖励模型 = AI 品尝师:我们在人类偏好数据上训练它。它学会给人类倾向于喜欢的文本赋予更高的分数。
- RL 算法使用奖励模型:像 PPO、DPO 和 GRPO 这样的算法随后使用这个奖励模型来指导 LLM 的学习。LLM 试图生成能够从 AI 裁判那里获得高分的文本。
2、 近端策略优化(PPO)
PPO 是一种强大且可靠的强化学习算法,通常是 RLHF 的起点。
谨慎的改进步骤:PPO 就像是教你的 LLM 一步步走路,确保它在每次更新时不会摔倒。它对 LLM 的“走路方式”(策略)进行温和的调整。
PPO 的关键角色:
- 策略(LLM):我们正在训练的 LLM,用于生成更好的文本。
- 奖励模型:根据人类偏好对文本打分的 AI 裁判。
- 价值函数(辅助教练):另一个 AI 模型,充当“辅助教练”。它估计每个状态的“好坏”(当前文本生成的前景如何)。这有助于 PPO 进行更智能的更新。
PPO 训练
- 生成文本(Rollout):LLM(策略)为不同的提示生成大量文本样本。
- 获取分数(奖励模型):奖励模型对每个文本样本进行打分。
- 计算优势(GAE —— “好多少”分数):这就是 GAE 的作用!它是一种巧妙的方法,用于计算每个单词选择的优劣,考虑奖励和价值函数的预测。(关于 GAE 的更多内容见下文!)
- 优化 LLM(策略更新):我们更新 LLM 的策略,以最大化一个特殊的 PPO 目标函数。这个目标函数现在有三个关键部分:
- 鼓励更高奖励:它推动 LLM 生成能够获得更高分数的文本。
- 限制策略变化(剪切代理目标):它防止策略在一次更新中变化过大,确保稳定性。
- KL 散度惩罚:如果新策略与旧策略偏离太远,它会增加惩罚,进一步增强稳定性。
- 熵奖励:它还包括一个熵奖励。简单来说,熵衡量 LLM 文本生成的“随机性”或“多样性”。增加熵奖励可以鼓励 LLM 更多地探索,而不是总是生成相同、可预测的响应。它有助于防止 LLM 过早变得“过于确定”,从而错过可能更好的策略。
- 更新价值函数(辅助教练更新):训练价值函数成为一个更好的“辅助教练”——更准确地预测不同文本生成的“好坏”。
为什么选择 GAE?
- 蒙特卡洛(MC)—— 高方差,低偏差:想象一下等到整个文本生成后再获得奖励,然后将该奖励分配给文本中的每一个单词。就像只有在小狗完成整个“坐下、待命、取回”动作序列后才给予奖励。对整个序列的奖励是准确的,但对单个动作(“坐下”与“待命”与“取回”)的信号非常嘈杂。高方差,学习速度慢。
- 时间差分(TD)—— 低方差,高偏差:想象一下在每个单词生成后给予奖励。“好单词!”“普通单词!”“很棒的单词!”信号不那么嘈杂,学习速度更快。但是,我们只是局部地判断单词,没有考虑整个文本的长期质量。可能会有偏差,可能会错过“大局”。
- GAE —— 平衡:广义优势估计(GAE)就像“多步 TD”。它考虑了多个步骤(单词)上的奖励,平衡了方差(MC)与偏差(TD)之间的权衡。就像不仅在结束时给予奖励,还在价值函数预测的指导下,为沿途的“小步骤”给予奖励。
概念性 PPO —— Python 伪代码
# 这是一个高度简化的预期目标版本def ppo_loss_with_gae_entropy(old_policy_logprobs, new_policy_logprobs, advantages, kl_penalty_coef, clip_epsilon, entropy_bonus_coef):"""概念性 PPO 损失函数,带有 GAE 和熵奖励(简化版)。""" ratio=np.exp(new_policy_logprobs - old_policy_logprobs)# 概率比# 剪切代理目标(限制策略变化)surrogate_objective=np.minimum(ratio * advantages, np.clip(ratio,1- clip_epsilon,1+ clip_epsilon)* advantages)policy_loss=-np.mean(surrogate_objective)# KL 散度惩罚(保持接近旧策略)kl_divergence=np.mean(new_policy_logprobs - old_policy_logprobs)kl_penalty=kl_penalty_coef * kl_divergence# 熵奖励(鼓励探索)entropy=-np.mean(new_policy_logprobs)# 简化版熵(概率越高 = 熵越低,取负值以最大化熵)entropy_bonus=entropy_bonus_coef * entropy total_loss=policy_loss + kl_penalty - entropy_bonus# 减去熵奖励,因为我们希望*最大化*熵returntotal_loss3、直接偏好优化(DPO)
DPO 是“新晋成员”——一种更简单、更高效的方式来进行偏好学习,跳过了 RL 的复杂性。
直截了当:DPO 就像是直接告诉 LLM:“响应 A 比响应 B 更好。多生成像 A 这样的响应,少生成像 B 这样的响应!”它省略了 RL 中用于策略优化的奖励模型这一中间环节。
DPO 避免了 PPO 的迭代 RL 循环。它直接基于人类偏好数据利用一个巧妙的损失函数对 LLM 进行优化。
DPO 训练流程
- 偏好数据仍然是关键:与 PPO 一样,DPO 仍然从相同的关键成分开始:人类偏好数据(成对的响应,带有标签,指示哪个响应更受青睐)。人类反馈仍然是基础!
- 直接策略更新(分类式损失——直接使用 logits!):这是 DPO 的魔法所在。DPO 使用一个特殊的损失函数直接比较两个模型的 logits(概率之前的原始输出分数):
- 增加首选响应的 logits(和概率):让当前模型在未来更有可能生成像响应 A 这样的响应。
- 减少非首选响应的 logits(和概率):让当前模型在未来更不可能生成像响应 B 这样的响应。
- 保持接近参考模型(隐式 KL 控制):损失函数还隐式地鼓励当前模型在行为上保持与参考模型的接近(使用参考模型的 logits),这有助于稳定性,类似于 PPO 的 KL 惩罚,但直接嵌入在损失函数中!
- 当前模型(正在训练中):我们将首选响应(响应 A)和非首选响应(响应 B)都输入到我们正在训练的当前 LLM 中,得到两者的 logits。
- 参考模型(旧版本):我们还将响应 A 和响应 B 输入到一个参考模型中。这通常是 LLM 的旧版本(比如我们开始时的 SFT 模型)。我们也会从参考模型中得到 logits。
- DPO 的损失函数直接使用这两个模型的 logits 来计算损失,这与分类任务中使用的二元交叉熵损失非常相似。这个损失函数旨在:可以这样理解:DPO 的损失函数就像一个“偏好指南针”,直接根据首选和非首选响应的相对 logits 指导 LLM 的权重,而无需显式预测奖励。
DPO 损失函数
# 注意:这不是实际公式。# 这是一个高度简化的预期目标版本def dpo_loss(policy_logits_preferred, policy_logits_dispreferred, ref_logits_preferred, ref_logits_dispreferred, beta_kl):"""概念性 DPO 损失函数(简化版——直接使用 logits)。"""# 1. 从 logits 中获取对数概率(当前和参考模型的首选和非首选响应)policy_logprob_preferred=F.log_softmax(policy_logits_preferred,dim=-1).gather(...)# 提取首选响应中实际标记的对数概率policy_logprob_dispreferred=F.log_softmax(policy_logits_dispreferred,dim=-1).gather(...)# 提取非首选响应中实际标记的对数概率ref_policy_logprob_preferred=F.log_softmax(ref_logits_preferred,dim=-1).gather(...)# 同样适用于参考模型ref_policy_logprob_dispreferred=F.log_softmax(ref_logits_dispreferred,dim=-1).gather(...)# 2. 计算对数比率(使用对数概率——如前所述)log_ratio=policy_logprob_preferred - policy_logprob_dispreferred -(ref_policy_logprob_preferred - ref_policy_logprob_dispreferred)# 3. 偏好概率(Bradley-Terry 模型——隐式奖励信号)preference_prob=1/(1+ np.exp(-beta_kl * log_ratio))# 4. 二元交叉熵损失(直接优化策略)dpo_loss=-np.log(preference_prob + 1e-8)returndpo_loss4、组相对策略优化(GRPO)
GRPO 是 DeepSeek AI 对 PPO 的一种聪明的改进,旨在更加高效,尤其是在复杂的推理任务中。
GRPO 就像是 PPO 的精简版表亲。它保留了 PPO 的核心思想,但去掉了独立的价值函数(辅助教练),使其更轻量、更快速。
GRPO 的魔法成分在于它如何估计优势。它不是使用辅助教练,而是使用一组由 LLM 生成的相同提示的响应来估计每个响应相对于组内其他响应的“好坏”。
GRPO 训练流程:
- 生成一组响应:对于每个提示,从 LLM 中生成多个响应的一组。
- 对组进行打分(奖励模型):获取组内所有响应的奖励分数。
- 计算组内相对优势(GRAE —— 组内比较):通过比较每个响应的奖励与组内平均奖励来计算优势。在组内对奖励进行归一化以得到优势。
- 优化策略(使用 GRAE 的 PPO 风格目标函数):使用一个 PPO 风格的目标函数更新 LLM 的策略,但使用这些组内相对优势。
概念性 GRPO 损失函数 —— Python 伪代码
# 注意:这不是实际公式。# 这是一个高度简化的预期目标版本def grae_advantages(rewards):"""概念性组相对优势估计(结果监督)。""" mean_reward=np.mean(rewards)std_reward=np.std(rewards)normalized_rewards=(rewards - mean_reward)/(std_reward + 1e-8)advantages=normalized_rewards# 对于结果监督,优势 = 归一化奖励returnadvantages def grpo_loss(old_policy_logprobs_group, new_policy_logprobs_group, group_advantages, kl_penalty_coef, clip_epsilon):"""概念性 GRPO 损失函数(对一组响应取平均)。""" group_loss=0foriinrange(len(group_advantages)):# 遍历组内的每个响应advantage=group_advantages[i]new_policy_logprob=new_policy_logprobs_group[i]old_policy_logprob=old_policy_logprobs_group[i]ratio=np.exp(new_policy_logprob - old_policy_logprob)clipped_ratio=np.clip(ratio,1- clip_epsilon,1+ clip_epsilon)surrogate_objective=np.minimum(ratio * advantage, clipped_ratio * advantage)policy_loss=-surrogate_objective kl_divergence=new_policy_logprob - old_policy_logprob kl_penalty=kl_penalty_coef * kl_divergence group_loss+=(policy_loss + kl_penalty)# 累加组内每个响应的损失returngroup_loss / len(group_advantages)# 对组内损失取平均5、 PPO vs. DPO vs. GRPO
让我们用表格总结一下它们的关键区别:
6、 通过链式思考和偏好学习解锁推理能力
我们已经讨论了 PPO、DPO 和 GRPO 如何帮助 LLM 学习生成人类更喜欢的文本。但对于复杂的任务,如数学问题、编程或逻辑推理,仅仅得到一个“首选”的最终答案是不够的。我们希望 LLM 也能正确推理,展示它的“思考过程”。
这就是链式思考(Chain-of-Thought, CoT)推理的作用!可以将其视为要求 LLM 在给出最终答案之前“展示它的解题步骤”。
链式思考 —— 逐步推理
LLM 使用 CoT 不是直接输出最终答案,而是生成一系列中间“思考”或推理步骤,最终得出答案。
示例:
提示:“如果一辆火车以 60 英里/小时的速度行驶 2 小时,它行驶了多远?”
使用链式思考的 LLM:
LLM 首先生成一个“思考链”(步骤 1-4),解释其推理过程,用<thought>标签括起来。然后在<answer>标签中给出最终答案。
<thought>步骤1:确定公式:距离=速度 × 时间 步骤2:从问题中提取速度:速度=60英里/小时 步骤3:从问题中提取时间:时间=2小时 步骤4:计算距离:距离=60英里/小时 ×2小时=120英里</thought><answer>120英里</answer>为什么 CoT 对推理很重要?
- 透明性:CoT 让 LLM 的推理过程更加透明和易于理解。我们可以看到它是如何得出答案的,而不仅仅是答案本身。
- 提高准确性:对于复杂问题,强迫 LLM 逐步推理通常会导致更准确的最终答案。这就像将一个难题分解为更小、更简单的步骤。
- 可调试性:如果 LLM 得出错误答案,CoT 可以帮助我们调试并理解它的推理过程在哪里出错了。
为良好的 CoT 提供奖励——奖励“思考过程”
那么,PPO、DPO 和 GRPO 如何与 CoT 结合呢?我们可以使用这些偏好学习算法,专门奖励 LLM 生成正确且有帮助的链式思考推理!
- 奖励正确的推理,而不仅仅是答案:我们可以设计奖励模型(或 DPO/GRPO 的偏好数据集),当 LLM 生成的思考链:
- 正确:推理步骤逻辑严谨且得出正确答案。
- 有帮助:推理步骤清晰、易于理解且很好地解释了解题过程。
CoT 的奖励信号示例:
假设我们有两个 LLM 对数学问题的输出:
- 输出 1(正确的 CoT):包含一个正确的思考链,得出正确答案。奖励:+0.9(高奖励)
- 输出 2(无 CoT 或错误的 CoT):要么只给出答案,要么推理过程有缺陷。奖励:+0.2(低奖励)
然后我们可以使用 PPO、DPO 或 GRPO 训练 LLM,生成更多像输出 1(有良好 CoT)的响应,减少像输出 2(没有良好 CoT)的响应。
解锁 LLM 的推理能力:通过偏好学习奖励良好的 CoT,我们本质上是在教 LLM 如何逐步思考。这是解锁它们全部推理潜力并使它们成为更可靠的解题者的关键一步。
7、结论
我们已经探索了 LLM 的偏好学习世界,了解了 PPO、DPO 和 GRPO 这些强大的算法旨在使这些模型更有帮助、更合理且无害。我们看到了它们如何相互补充,每种方法都为将 AI 与人类价值观对齐这一挑战提供了独特的解决方案。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
为什么要学习大模型?
我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着AI技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。
大模型入门到实战全套学习大礼包
1、大模型系统化学习路线
作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
2、大模型学习书籍&文档
学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
3、AI大模型最新行业报告
2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
4、大模型项目实战&配套源码
学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
5、大模型大厂面试真题
面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
适用人群
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。