当前位置: 首页 > news >正文

PPO(近端策略优化)

主要思想: PPO是一种基于策略梯度的强化学习算法,通过限制策略更新的步长来稳定训练过程。它使用裁剪机制,即通过裁剪策略更新的幅度,避免过大的更新导致训练不稳定。其目标函数包含策略梯度项、裁剪机制和KL惩罚项,以防止策略偏离初始模型过远。

一、如何理解策略梯度项、裁剪机制和KL惩罚项?

训练一个对话AI模型(比如ChatGPT)的场景为例,用“培训班老师教学生”的比喻来讲解PPO的三个策略:


场景设定

  • 学生:AI模型(刚开始学会基础对话,但回答很生硬)。

  • 老师:PPO算法,目标是通过“人类反馈”让学生回答得更自然、更有用。

  • 教材:人类的对话数据 + 人类对回答的打分(Reward Model)。


1. 策略梯度项:按“学生表现”调整教学重点

问题:学生一开始的回答随机(比如用户问“怎么煮咖啡?”,它可能回答“咖啡是黑色的”或“先磨豆再加水”)。

老师的做法

  • 观察:如果学生回答“先磨豆再加水”得到人类高分,而“咖啡是黑色的”得低分。

  • 策略梯度:老师会重点强化高分回答的逻辑,让学生以后更倾向于说“先磨豆再加水”这类答案。

  • 关键:不是直接抛弃低分回答,而是参考新旧回答的概率比例,逐步调整。

效果:学生开始偏向高分回答,但不会完全忘记其他可能性。


2. 裁剪机制:防止“过度偏科”

问题:如果某次学生回答“用蓝山咖啡豆最好”意外获得极高评分,它可能从此只推荐蓝山咖啡豆,忽略其他合理答案。

老师的做法

  • 设定规则:单次训练中,学生对某个答案的“偏爱程度”最多只能比原来增加20%(比如从10%概率提到12%)。

  • 裁剪机制:即使“蓝山咖啡豆”答案得分超高,老师也会说:“这个答案可以多练,但今天最多练到12%,明天再看效果”。

效果:避免学生因为一次高分就彻底“钻牛角尖”,保持多样性和稳定性。


3. KL惩罚项:防止“忘本”

问题:经过训练,学生可能为了拿高分,完全改变说话风格(比如从“严谨科普”变成“浮夸营销风”)。

老师的做法

  • 定期检查:对比学生现在的回答风格和最初风格是否差异过大。

  • KL惩罚:如果发现学生开始满嘴“史上最香咖啡!!”,老师会警告:“你偏离基础太远了,回去练练中性表达!”

效果:学生的回答既会优化质量,又不会丢失最初的合理性。

二、实际模型训练中是如何实现重点强化高分回答的逻辑?

在实际模型训练中,策略梯度项通过“试错-反馈-调整”的循环来重点强化高分回答的逻辑,具体实现可以分为以下几步。我用训练一个客服对话AI的场景来类比说明:


1. 试错阶段:模型生成多种回答

  • 场景:用户问:“快递多久能到?”

  • 模型生成多个候选回答

    • A. “一般3天。”(普通)

    • B. “省内1天,省外3-5天。”(详细)

    • C. “亲,快递很快哦~”(模糊)


2. 反馈阶段:人类或奖励模型打分

  • 奖励模型(或人类)评估

    • A → 5分(及格但简单)

    • B → 9分(详细实用)

    • C → 2分(无效回答)


3. 策略梯度强化高分回答

核心逻辑:让模型增加高分回答的生成概率减少低分回答的概率,但通过以下步骤实现:

(1) 计算“动作的性价比”
  • 优势函数(Advantage)

    • 回答B的优势值 = 9(实际得分) - 5(平均分) = +4(明显优于平均水平)

    • 回答C的优势值 = 2 - 5 = -3(拖后腿)

(2) 调整生成概率
  • 原始概率:假设模型原本生成B的概率是20%。

  • 策略梯度更新

    • 因为B的优势值是+4,模型会显著提高B的概率(比如从20% → 35%)。

    • 对C(优势值-3),模型会降低其概率(比如从30% → 15%)。

(3) 通过“概率比”控制幅度
  • 重要性采样:模型不会直接替换概率,而是通过新旧概率的比例(例如从20%到35%,比例是1.75倍)逐步调整。

  • 避免突变:如果比例变化过大(比如突然从1%跳到50%),裁剪机制会介入限制(见下文)。

三、实际模型训练中如何实现KL惩罚项防止模型“忘本”?


1. 什么是“忘本”?

  • 初始模型:经过预训练和微调,能稳定生成合理但普通的回答(如“快递一般3天到”)。

  • RLHF训练风险:过度优化奖励后,模型可能变得极端化(比如为了拿高分,所有回答都变成“加急加钱24小时必达!”),丢失最初的平衡性。


2. KL惩罚如何解决问题?

核心思想:在优化目标中增加一个“惩罚项”,直接限制新旧策略生成答案的概率分布差异
具体实现步骤:

(1) 计算新旧策略的KL散度
  • 旧策略(πoldπold​):训练前模型对答案的概率分布(例如:“3天到”概率50%,“1-5天”概率30%)。

  • 新策略(πθπθ​):训练后模型的概率分布(例如:“24小时到”概率飙升到80%)。

  • KL散度:量化新旧分布的差异(公式略,直观理解为“新策略有多偏离旧策略”)。

(2) 将KL散度加入损失函数

总损失函数 = 策略梯度损失 - β×KL散度β×KL散度

  • ββ:调节惩罚力度的超参数(例如0.01)。

  • 效果:如果新策略偏离旧策略太多(KL散度过大),损失函数会变差,迫使模型回调。

(3) 动态调整ββ(可选)
  • 自适应KL惩罚

    • 如果KL散度超过阈值(如0.1),增大ββ(加强约束)。

    • 如果KL散度过低(如<0.01),减小ββ(放松约束)。

四、PPO算法的策略特性分析

核心结论:PPO本质上是on-policy算法,但通过技术改进部分借鉴了off-policy的特性,形成混合方法。


1. PPO的原始设计:On-Policy
  • 数据来源:必须由当前策略(或接近当前策略的旧版本)生成。

  • 传统限制:每次策略更新后,旧数据立即失效,需重新采样(典型on-policy特点)。

2. 引入Off-Policy特性的技术
  • 重要性采样(Importance Sampling)

    • 允许复用旧策略的数据进行多次梯度更新(如3~10次)。

  • 裁剪机制(Clipping)或KL惩罚

    • 限制新旧策略的差异,避免因数据复用导致策略偏离太远。


3. PPO是“大部分on-policy,小部分off-policy”的混合方法,在保持稳定性的同时提升样本效率。

on-policy和offpolicy算法-CSDN博客

特性传统On-policy(如A2C)PPO混合设计Off-policy(如DQN/SAC)
数据来源必须来自当前策略当前或接近的旧策略生成任意历史策略(如Replay Buffer)
数据重用禁止(单次更新后丢弃)有限重用(3-10次梯度更新)任意重用(长期存储buffer)
更新约束无直接约束裁剪/KL惩罚限制更新幅度通常无硬约束
4. 为什么PPO本质是On-policy?
  1. 数据时效性要求高

    • 虽然允许少量数据复用(如3-10次更新),但长期依赖旧数据会导致性能下降,必须定期重新采样。

    • 对比Off-policy:DQN/SAC可无限复用历史数据。

  2. 更新约束严格

    • 裁剪机制或KL惩罚强制策略保持接近数据收集时的分布,体现On-policy的保守性。

    • 对比Off-policy:SAC/DQN无需强制约束策略差异。

  3. 数据来源限制

    • PPO不能直接使用任意历史数据(如Replay Buffer中的陈旧数据),必须来自当前或近期策略。

PPO以On-policy为基础,通过技术改进(重要性采样[策略梯度项]+裁剪/KL惩罚)有限吸收Off-policy的优点

五、优势函数(Advantage Function)的核心要点解析


定义与公式

http://www.dtcms.com/a/277071.html

相关文章:

  • 华为HarmonyOS 5.0深度解析:跨设备算力池技术白皮书(2025全场景智慧中枢)
  • 【C++】list及其模拟实现
  • C++--List
  • AI交互中的礼貌用语:“谢谢“的效用与代价分析
  • 【操作系统-Day 5】通往内核的唯一桥梁:系统调用 (System Call)
  • MVC 参考手册
  • C++值类别与移动语义
  • linux shell从入门到精通(一)——初识Shell程序
  • opencv中contours的使用
  • Spring Boot RESTful API 设计指南:查询接口规范与最佳实践
  • Docker从环境配置到应用上云的极简路径
  • 【Docker基础】Dockerfile指令速览:文件与目录操作指令详解
  • 【深度学习新浪潮】什么是新视角合成?
  • Python----OpenCV(图像分割——彩色图像分割,GrabCut算法分割图像)
  • 【Linux】线程机制深度实践:创建、等待、互斥与同步
  • ARC 02 runner scale set chart:对接集群与 Github Action 服务器
  • Linux|服务器|二进制部署nacos(不是集群,单实例)(2025了,不允许还有人不会部署nacos)
  • 速通TypeScript装饰器
  • 【windows办公小助手】比文档编辑器更好用的Notepad++轻量编辑器
  • 机器学习sklearn入门:使用KNN模型分类鸢尾花和简单调参
  • 分类问题-机器学习
  • 「小程序开发」项目结构和页面组成
  • Http与Https区别和联系
  • 13. Flink 高可用机制简述(Standalone 模式)
  • 单页面和多页面的区别和优缺点
  • phpMyAdmin:一款经典的MySQL在线管理工具又回来了
  • 数学建模:评价决策类问题
  • 【nRF52832】【Ble 1】【低功耗蓝牙简介】
  • UML类图完全解读
  • 【C++详解】STL-priority_queue使用与模拟实现,仿函数详解