由浅入深学习大语言模型RLHF(PPO强化学习- v1浅浅的)

        最近,随着DeepSeek的爆火,GRPO也走进了视野中。为了更好的学习GRPO,需要对PPO的强化学习有一个深入的理解,那么写一篇文章加深理解吧。纵观网上的文章,要么说PPO原理,各种复杂的公式看了就晕,要么说各种方式命名的模型,再要么默认你是个NLPer。这导致RLer和NLPer之间学习大语言模型强化学习产生了巨大的gap。于是,我们单纯说说大语言模型里面的PPO吧。

        其实PPO也是在训练模型,和SFT一样,都是为了获得最终一个用于推理部署的模型。SFT训练模型时一般需要一个base【模型】和【损失函数】,这里先这么浅显地说,因为PPO也需要这些,我们通过这些相同的部分来弥补NLP和RL之间的gap吧。

一、模型

SFT(Only one model)

        SFT模型一般是一个已经预训练过的大语言模型(例如GPTs、BERT等),或者是一个未经训练的小模型(LSTM)。

PPO(Four Models)

        PPO训练时总共有四个模型分别是Policy Model(Actor)、Reward Model、Reference Model、Critic Model。这里和SFT模型相似的也就是Policy Model,这个模型也是经过预训练的模型且用于未来实际使用的模型。其他三个模型都是用来辅助Policy Model模型训练的。那么其他三个模型的作用是什么呢?Let's talk step by step.

        Reward Model

        Fine! 你肯定早就听过这个模型。我们说PPO是根据好的和坏的样本对来进行训练的,从来让模型产生输出好样本的偏好,那么如何识别好样本和坏样本呢?是的,依靠Reward Model。让我们看看下边的例子。

s1: 中国的首都是哪里?北京。->过于简洁,但正确,2分

s2: 中国的首都是哪里?中国的首都是北京。->比较中肯,3分

s3: 中国的首都是哪里?中国的首都不是广州和武汉,是北京。->很多废话,0分

s4: 中国的首都是哪里?中国的首都不是广州,是北京。->一点点废话,1分

        上面我按照自己的偏好给每个句子进行了打分。Reward Model在这里的作用就是学习我打分的风格,然后产生一个数值或者概率,这里可以用各种方法,先不说具体咋做,可以线按照你想的方法产生一个分数,然后我们接着往下走。好了,我们现在有一个模型可以产生奖励了,我们可以给Policy Model模型产生的输出打分了,然后对这个分数进行优化,即奖励较大时加大对损失的权重,奖励较大时给损失乘以一个较小的权重。这样,模型就可以达到L1级别(借用自动驾驶等级概念)的偏好学习了。

        看似我们的方法已经可以work了,但仅仅是看似。实际上在模型训练的过程中可能会因为Reward打分不准导致Policy Model训练出现偏差或者Policy Model过于追求奖励大的而出现性能下降的现象。

        所以这么不稳定的训练,需要再加入另外一个模型Reference Model来维护一下训练的稳定性。

        Reference Model

        Reference Model被用于维持训练的稳定性。我们知道PPO被用在大语言模型是为了维持模型回答的风格,这种风格应该是朝着某种方向去的。比如,我们需要训练一个模型,他的风格需要是安全型的,即在特定情况下,他应该对用户的输入做出拒答。但是当训练不稳定时,模型可能对用户所有的输入都做出拒答。显然,这不是我们想要的模型效果。所以,我们需要一个基准模型,这个模型给Policy Model当作参考,告诉他不要在训练的时候偏离基准模型太远,即保留基准模型的一些能力。

        于是Reference Model(参考模型)呼之欲出,那么这个与Reference Model控制距离的方法如何实现呢?我们简单的猜一下,控制距离的方法。我这里给出一个简单的猜测,我们可以将输入同时送入到Reference Model和Reward Model中,然后根据两个句子输出的logits计算距离,如果距离过大时应该被拉近,距离适当时可以保持。当然,作为Reference Model在训练的时候是不需要更新参数的,不然就被一起拉着跑偏了。

        看着我们的模型可以训练起来了,正式进入L2级别。

        Critic Model

        没错,我们的模型其实完全可以训练了,至于为什么要多次一举,加个Critix Model。我也不是特别的理解。那么,让我们问问DeepSeek吧。

 

        DeepSeek告诉我们Critic Model可以降低方差?那么为什么呢?为什么前面的方法会出现高方差,以及Critic Model是如何降低方差的呢?

        我们打个比方,比如我们日常在与人交流的时候,可能一不小心说出了话,让他人不开心,后来通过各种方法找补回来,让别人理解了我们的内心想法。先说错话找补回来让对方理解和直接让对方理解我们真实的想法,这二者最后的结果是一样的(即奖励,Reward Model的打分),但是过程是不一样的。这个Critic Model的作用可以类比为教我们如何正确的表达,而不仅仅是会说的对。

        至于优势估计和价值引导,可以看到优势估计可以衡量特定动作(输出特定token)对于平均情况的优势,价值引导是提供长期回报(即输出某个token的长期回报),这两者也都是面向token级别(Critic Model),而不是句子级别(Reward Model给整个句子打分)的优化。


       至此,我们理解了这四个模型的大致作用,下面我们从具体说说是PPO如何做的。

二、损失函数

        施工中...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/973278.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java八股文】08-计算机网络面试篇

【Java八股文】08-计算机网络面试篇 计算机网络面试篇网络模型网络OSI模型和TCP/IP模型分别介绍一下键入网址到网页显示,期间发生了什么? 应用层- HTTP应用层有哪些协议?HTTP是什么及HTTP报文有哪些部分?HTTP是怎么传输数据的HTTP…

【Linux】Linux 文件系统——有关 inode 不足的案例

ℹ️大家好,我是练小杰,今天周二了,明天星期三,还有三天就是星期五了,坚持住啊各位!!!😆 本文是对之前Linux文件权限中的inode号进行实例讨论,看到博客有错误…

SpringBoot整合Redis和Redision锁

参考文章 1.Redis 1.导入依赖 <!--Redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.apache.c…

亲测可用,IDEA中使用满血版DeepSeek R1!支持深度思考!免费!免配置!

作者&#xff1a;程序员 Hollis 之前介绍过在IDEA中使用DeepSeek的方案&#xff0c;但是很多人表示还是用的不够爽&#xff0c;比如用CodeChat的方案&#xff0c;只支持V3版本&#xff0c;不支持带推理的R1。想要配置R1的话有特别的麻烦。 那么&#xff0c;今天&#xff0c;给…

一周学会Flask3 Python Web开发-Debug模式开启

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 默认情况&#xff0c;项目开发是普通模式&#xff0c;也就是你修改了代码&#xff0c;必须重启项目&#xff0c;新代码才生效&…

某手sig3-ios算法 Chomper黑盒调用

Chomper-iOS界的Unidbg 最近在学习中发现一个Chomper框架&#xff0c;Chomper 是一个模拟执行iOS可执行文件的框架&#xff0c;类似于安卓端大名鼎鼎的Unidbg。 这篇文章使用Chomper模拟执行某手的sig3算法&#xff0c;初步熟悉该框架。这里只熟悉模拟执行步骤以及一些常见的…

PyTorch 深度学习框架中 torch.cuda.empty_cache() 的妙用与注意事项

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 在使用 PyTorch 进行深度学习模型训练与调优过程中&#xff0c;torch.cuda.empty_cache() 方法作为一种高效工具被广泛采用&#xff1b;但其正确应用要求充分理解该方法的功能及最佳实践。下文将对该方…

巧用GitHub的CICD功能免费打包部署前端项目

近年来&#xff0c;随着前端技术的发展&#xff0c;前端项目的构建和打包过程变得越来越复杂&#xff0c;占用的资源也越来越多。我有一台云服务器&#xff0c;原本打算使用Docker进行部署&#xff0c;以简化操作流程。然而&#xff0c;只要执行sudo docker-compose -f deploy/…

配置Api自动生成

我的飞书:https://rvg7rs2jk1g.feishu.cn/docx/TVlJdMgYLoDJrsxAwMgcCE14nxt 使用Springfox Swagger生成API&#xff0c;并导入Postman&#xff0c;完成API单元测试 Swagger: 是一套API定义的规范&#xff0c;按照这套规范的要求去定义接口及接口相关信息&#xff0c;再通过可…

【JMeter使用-2】JMeter中Java Request采样器的使用指南

Apache JMeter 是一款功能强大的性能测试工具&#xff0c;支持多种协议和测试场景。除了内置的采样器&#xff08;如HTTP请求、FTP请求等&#xff09;&#xff0c;JMeter还允许通过 Java Request采样器 调用自定义的Java代码&#xff0c;从而实现更复杂的测试逻辑。本文将详细介…

将Google文档导入WordPress:简单实用的几种方法

Google文档是内容创作者非常实用的写作工具。它支持在线编辑、多人协作&#xff0c;并能够自动保存内容。但当我们想把Google文档中的内容导入WordPress网站时&#xff0c;可能会遇到一些小麻烦&#xff0c;比如格式错乱、图片丢失等问题。本文将为大家介绍几种简单实用的方法&…

Android开发-深入解析Android中的AIDL及其应用场景

深入解析 Android 中的 AIDL 及其应用场景 1. 前言2. AIDL 的核心概念3. AIDL 的实现步骤3.1. 定义 AIDL 接口文件3.2. 实现服务端&#xff08;Service&#xff09;3.3. 客户端绑定与调用 4. AIDL 的典型应用场景4.1. 多进程应用4.2. 与系统服务交互4.3. 高性能 IPC4.4. 跨应用…

PWM(脉宽调制)技术详解:从基础到应用实践示例

PWM&#xff08;脉宽调制&#xff09;技术详解&#xff1a;从基础到应用实践示例 目录 PWM&#xff08;脉宽调制&#xff09;技术详解&#xff1a;从基础到应用实践示例学前思考&#xff1a;一、PWM概述二、PWM的基本原理三、PWM的应用场景四、PWM的硬件配置与使用五、PWM的编程…

谷粒商城—分布式高级②.md

认证服务 1. 环境搭建 创建gulimall-auth-server模块,导依赖,引入login.html和reg.html,并把静态资源放到nginx的static目录下 2. 注册功能 (1) 验证码倒计时 //点击发送验证码按钮触发下面函数 $("#sendCode").click(function () {//如果有disabled,说明最近…

Nginx(详解以及如何使用)

目录 1. 什么是Nginx&#xff1f; 2. 为什么使用nginx? 3. 安装nginx 3.1?安装nginx的依赖插件 3.2 下载nginx ?3.3?创建一个目录作为nginx的安装路径 ?3.4?解压 ?3.5?进入解压后的目录 3.6?指定nginx的安装路径 ?3.7?编译和安装nginx 3.8 启动nginx ?…

STM32 HAL库标准库+ESP8266+机智云

前言 最近在项目中需要云平台对接&#xff0c;前面使用的是阿里云物理平台&#xff0c;具体开发可以看看我的这个文章&#xff1a;手把手教会使用阿里云平台&#xff0c;不过好像没有可以在手机很方便打开连接的&#xff0c;所以我在网上找到一些资料&#xff0c;发现机智云是…

【前端框架】Vue3 面试题深度解析

本文详细讲解了VUE3相关的面试题&#xff0c;从基础到进阶到高级&#xff0c;分别都有涉及&#xff0c;希望对你有所帮助&#xff01; 基础题目 1. 简述 Vue3 与 Vue2 相比有哪些主要变化&#xff1f; 答案&#xff1a; 响应式系统&#xff1a;Vue2 使用 Object.definePrope…

DarkLabel 2.4使用指南:高效标注视频数据目标检测标签

工具概述 DarkLabel 2.4 是一款强大的多功能标注工具&#xff0c;专为计算机视觉开发者设计&#xff0c;旨在提升标注工作的效率和精确度。其智能标注引擎支持两项核心功能&#xff1a;线性插值标注与多目标跟踪&#xff0c;极大地优化了视频标注过程。 &#xff08;1&#x…

js解析后端传来的如图示的list集合,怎么获取每个map的key和value

如图示&#xff0c;后端传到前端的questTypeList是一个HashMap的list集合 使用c标签将传来的集合放到下拉单选框中&#xff0c; <% taglib prefix"c" uri"http://java.sun.com/jsp/jstl/core" %><html> <body><form action"yo…

SpringSecurity请求流转的本质

1. SpringSecurity核心源码分析 分析SpringSecurity的核心原理,那么我们从哪开始分析?以及我们要分析哪些内容? 系统启动的时候SpringSecurity做了哪些事情?第一次请求执行的流程是什么?SpringSecurity中的认证流程是怎么样的?1.1 系统启动 当我们的Web服务启动的时候,…