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

【LLM】一文学会SPPO

博客昵称:沈小农学编程

作者简介:一名在读硕士,定期更新相关算法面试题,欢迎关注小弟!

PS:哈喽!各位CSDN的uu们,我是你的小弟沈小农,希望我的文章能帮助到你。欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘

SPPO是强化学习的一种,据猜测今年9月OpenAI最新的大模型O1使用该方法进行微调。SPPO,英文全称Self-Play Preference Optimization,中文为自博弈偏好优化。其受到了纳什均衡的冯·诺依曼两人常和博弈公式以及RLHF+PPO框架的启发,而设计出来。下面本文将讲解SPPO的损失函数、策略梯度更新以及算法框架。

目录

1 策略梯度更新公式

2 损失函数

3 算法流程图

参考文献


1 策略梯度更新公式

常和博弈的纳什均衡公式如下所示:


eq?%28%5Cpi%20%5E*%2C%5Cpi%20%5E*%29%3D%5Carg%5Cmax_%5Cpi%5Cmin_%7B%5Cpi%27%7D%5Cmathbb%20E_%7Bx%5Csim%20X%7D%5B%5Cmathbb%20E_%7By%5Csim%20%5Cpi%28%B7%7Cx%29%2Cy%27%5Csim%20%5Cpi%27%28%B7%7Cx%29%7D%5B%5Cmathbb%20P%28y%3Ey%27%7Cx%29%5D%5D.
 

现在让我们一步步从常和博弈的纳什均衡公式的一般形式推导出 SPPO 算法的策略梯度更新公式。

使用Freund和Schapire(1999)建立一个迭代框架,该框架可以平均渐进收敛到最优策略。


eq?%5Cpi_%7Bt+1%7D%28y%7Cx%29%5Cpropto%5Cpi_t%28y%7Cx%29%5Cexp%28%5Ceta%5Cmathbb%20P%28y%3E%5Cpi_t%7Cx%29%29%2C%5C%20for%5C%20t%3D1%2C2%2C%5Ccdots
 

上面的框架具体后,写为


eq?%5Cpi_%7Bt+1%7D%28y%7Cx%29%3D%5Cfrac%7B%5Cpi_t%28y%7Cx%29%5Cexp%28%5Ceta%5Cmathbb%20P%28y%3E%5Cpi_t%7Cx%29%29%7D%7BZ_%7B%5Cpi_t%7D%28x%29%7D
 

归一化因子为


eq?Z_%7B%5Cpi_t%7D%28x%29%3D%5Csum_y%5Cpi_t%28y%7Cx%29%5Cexp%28%5Ceta%5Cmathbb%20P%28y%3E%5Cpi_t%7Cx%29%29
 

对上式两边取对数,左右平移变化得


eq?%5Clog%28%5Cfrac%7B%5Cpi_%7Bt+1%7D%28y%7Cx%29%7D%7B%5Cpi_t%28y%7Cx%29%7D%29%3D%5Ceta%B7%5Cmathbb%20P%28y%3E%5Cpi_t%7Cx%29-%5Clog%20Z_%7B%5Cpi_t%7D%28x%29.
 

为了简化计算,使用L2距离公式来近似上面的公式计算,得到下面的公式


eq?%5Cpi_%7Bt+1%7D%3D%5Carg%5Cmin_%5Cpi%5Cmathbb%20E_%7Bx%5Csim%20X%2Cy%5Csim%5Cpi_t%28%B7%7Cx%29%7D%28%5Clog%28%5Cfrac%7B%5Cpi%28y%7Cx%29%7D%7B%5Cpi_t%28y%7Cx%29%7D%29-%28%5Ceta%5Cmathbb%20P%28y%3E%5Cpi_t%7Cx%29-%5Clog%20Z_%7B%5Cpi_%7B%5Ctheta_t%7D%7D%28x%29%29%29%5E2.
 

到这里,策略更新公式就推导出来了。不过这是针对连续数据的。下面我们来推导该公式以应用到离散数据上,同时进一步简化计算。

可能性估计:可以用有限的样本来近似策略更新公式。对于每个提示eq?x,我们选取eq?K个回答eq?y_1%2Cy_2%2C%5Ccdots%2Cy_k%5Csim%20%5Cpi_t%28%B7%7Cx%29作为样本,用eq?%5Chat%20%5Cpi_t%5EK表示经验分布。有限样本优化问题可以近似为:


eq?%5Cpi_%7Bt+1%7D%3D%5Carg%5Cmin_%5Cpi%5Cmathbb%20E_%7Bx%5Csim%20X%2Cy%5Csim%20%5Cpi_t%28%B7%7Cx%29%7D%28%5Clog%20%28%5Cfrac%7B%5Cpi%28y%7Cx%29%7D%7B%5Cpi_t%28y%7Cx%29%7D%29-%28%5Ceta%5Cmathbb%20P%28y%3E%5Chat%20%5Cpi_t%5EK%7CX%29-%5Clog%20Z_%7B%5Chat%20%5Cpi_t%5EK%28x%29%7D%29%29%5E2.
 

具体来说,Keq?Z_%7B%5Chat%20%5Cpi_t%5EK%28x%29%7D%3D%5Cmathbb%20E_%7By%5Csim%20%5Cpi_t%28%B7%7Cx%29%7D%5B%5Cexp%28%5Ceta%5Cmathbb%20P%28y%3E%5Chat%20%5Cpi_t%5EK%7Cx%29%29%5Deq?Z_%7B%5Chat%20%5Cpi_t%5EK%7D%28x%29被视作一种期望,可以通过在偏好项eq?%5Cmathbb%20P的总共eq?O%28KB%29个序列中的eq?B个新样本来估计。

我们可以用基于人类偏好模型的常数替换eq?%5Clog%20Z_%7B%5Chat%20%5Cpi_t%5EK%7D%28x%29来进一步简化计算。具体来说,用2替换eq?%5Clog%20Z_%7B%5Chat%20%5Cpi_t%5EK%7D%28x%29。假设在任意给定的对中赢的概率是同等机会的,1或者0,当eq?K%5Cto%20%5Cinfty,我们能得到2%7D


eq?%5Cpi_%7Bt+1%7D%3D%5Carg%5Cmin_%5Cpi%5Cmathbb%20E_%7Bx%5Csim%20X%2Cy%5Csim%20%5Cpi_t%28%B7%7Cx%29%7D%28%5Clog%28%5Cfrac%7B%5Cpi%28y%7Cx%29%7D%7B%5Cpi_t%28y%7Cx%29%7D%29-%5Ceta%28%5Cmathbb%20P%28y%3E%5Chat%20%5Cpi_t%5EK%7Cx%29-%5Cfrac%7B1%7D%7B2%7D%29%29%5E2.
 

至此,SPPO的策略更新公式推导完成。

下面让我们来得到策略梯度更新公式

改写上面的公式为:


eq?%5Ctheta_%7Bt+1%7D%20%3D%20%5Carg%5Cmin_%5Ctheta%5Cmathbb%20E_%7Bx%20%5Csim%20X%2Cy%20%5Csim%20%5Cpi_%7B%5Ctheta_t%7D%28%B7%7Cx%29%7D%5B%28P%28y%3E%5Cpi_%7B%5Ctheta_t%7D%7Cx%29-%5Ceta%5E%7B-1%7D%5Clog%20%28%5Cfrac%7B%5Cpi_%5Ctheta%28y%7Cx%29%7D%7B%5Cpi_%7B%5Ctheta_t%7D%28y%7Cx%29%7D%29-%5Ceta%5E%7B-1%7D%5Clog%20Z_%7B%5Cpi_%7B%5Ctheta_t%7D%28x%29%7D%29%5E2%5D.
 

RLHF的策略梯度更新公式为:


eq?%5Cnabla%20J%28%5Ctheta%29%3D%5Cmathbb%20E_%7Bx%5Csim%20X%2Cy%5Csim%20%5Cpi_%5Ctheta%28%B7%7Cx%29%7D%5B%28r%28y%3Bx%29-%5Ceta%5E%7B-1%7D%5Clog%5Cfrac%7B%5Cpi_%5Ctheta%28y%7Cx%29%7D%7B%5Cpi_%7Bref%7D%28y%7Cx%29%7D-b%28x%29%29%5Cnabla%5Clog%5Cpi_%5Ctheta%28y%7Cx%29%5D%20%5C%5C%20%3D%5Ceta%5Cmathbb%20E_%7Bx%5Csim%20X%2Cy%5Csim%20%5Cpi_%5Ctheta%28%B7%7Cx%29%7D%5B-%5Cnabla%28r%28y%3Bx%29-%5Ceta%5E%7B-1%7D%5Clog%5Cfrac%7B%5Cpi_%5Ctheta%28y%7Cx%29%7D%7B%5Cpi_%7Bref%7D%28y%7Cx%29%7D-b%28x%29%29%5E2%5D
 

对比发现上面的公式本质上是策略梯度更新公式,至此推导完成。

2 损失函数

SPPO的损失函数如下:


eq?%5Cmathcal%20L_%7BSPPO%7D%28x%2Cy_w%2Cy_l%3B%5Ctheta%3B%5Cpi_%7Bref%7D%29%3A%3D%28%5Clog%28%5Clog%20%5Cfrac%7B%5Cpi_%5Ctheta%28y_w%7Cx%29%7D%7B%5Cpi_%7Bref%7D%28y_w%7Cx%29%7D%29-%5Ceta%5E%7B-1%7D%28P%28y_w%3Ey_l%7Cx%29-%5Cfrac%7B1%7D%7B2%7D%29%29%5E2

公式通过胜者策略得分与输者策略得分的平方和,能更全面地评价模型。我们可以进一步简化公式,我们令胜者对输者的胜率为1,输者对胜者的胜率为0,则损失函数可以简化为:


eq?%5Cmathcal%20L_%7BSPPO%7D%28x%2Cy_w%2Cy_l%3B%5Ctheta%3B%5Cpi_%7Bref%7D%29%3A%3D%28%5Clog%28%5Clog%20%5Cfrac%7B%5Cpi_%5Ctheta%28y_w%7Cx%29%7D%7B%5Cpi_%7Bref%7D%28y_w%7Cx%29%7D%29-%5Cfrac%7B1%7D%7B2%5Ceta%7D%29%5E2%20%5C%5C%20+%28%5Clog%28%5Clog%20%5Cfrac%7B%5Cpi_%5Ctheta%28y_l%7Cx%29%7D%7B%5Cpi_%7Bref%7D%28y_l%7Cx%29%7D%29+%5Cfrac%7B1%7D%7B2%5Ceta%7D%29%5E2
 

3 算法流程图

d255595dc2944369af290dc0b20c4e92.jpeg

参考文献

《Self-Play Preference Optimization for Language Model Alignment》

相关文章:

【LLM】一文学会SPPO

博客昵称:沈小农学编程 作者简介:一名在读硕士,定期更新相关算法面试题,欢迎关注小弟! PS:哈喽!各位CSDN的uu们,我是你的小弟沈小农,希望我的文章能帮助到你。欢迎大家在…...

如何通过ChatGPT提高自己的编程水平

在编程学习的过程中,开发者往往会遇到各种各样的技术难题和学习瓶颈。传统的学习方法依赖书籍、教程、视频等,但随着技术的不断发展,AI助手的崛起为编程学习带来了全新的机遇。ChatGPT,作为一种强大的自然语言处理工具&#xff0c…...

NVR管理平台EasyNVR多品牌NVR管理工具的流媒体视频融合与汇聚管理方案

随着信息技术的飞速发展,视频监控已经成为现代社会安全管理和业务运营不可或缺的一部分。无论是智慧城市、智能交通、还是大型企业、校园安防,视频监控系统的应用都日益广泛。NVR管理平台EasyNVR,作为功能强大的流媒体服务器软件,…...

python之使用django框架开发web项目

本问将对django框架在python的web项目中的使用进行介绍,有不对之处,烦请指正。 首先使用创建一个django工程(本示例中使用pycharm2024+python3.12),名称和项目保存路径根据自己的需要自行修改,新手直接默认本机环境就好(关于conda将会另开一篇进行讲解。),最后点击cre…...

ChatGPT 桌面版发布了,如何安装?

本章教程教大家如何进行安装。 一、下载安装包 官网地址地址:https://openai.com/chatgpt/desktop/ 支持Windows和MacOS操作系统 二、安装步骤 Windows用户下载之后,会有一个exe安装包,点击运行安装即可。 注意事项,如果Windows操…...

ubuntu 配置 多个 git 客户端 账户

Git配置两个或多个账户 https://blog.csdn.net/mainking2003/article/details/134711865 git 提交 不用输入用户名、密码的方法(GIT免密提交) https://blog.csdn.net/wowocpp/article/details/125797263 git config 用法 https://blog.csdn.net/blueb…...

React Native的界面与交互

React Native (RN) 是一个由 Facebook 开发的开源框架,用于构建跨平台的移动应用程序。它允许开发者使用 JavaScript 和 React 来创建原生 iOS 和 Android 应用。RN 的出现极大地简化了移动应用的开发过程,使得开发者可以更快速、更高效地构建高质量的应…...

autogen+ollama+litellm实现本地部署多代理智能体

autogen 是一个专门为大语言模型 (LLMs) 驱动的自治代理 (autonomous agents) 设计的 Python 库,由 Microsoft 开发和维护。它通过高度模块化和可扩展的架构,支持用户快速构建和运行多代理系统,这些代理可以在没有明确人类干预的情况下协作完成复杂任务。AutoGen 支持以最少…...

InstantStyle容器构建指南

一、介绍 InstantStyle 是一个由小红书的 InstantX 团队开发并推出的图像风格迁移框架,它专注于解决图像生成中的风格化问题,旨在生成与参考图像风格一致的图像。以下是关于 InstantStyle 的详细介绍: 1.技术特点 风格与内容的有效分离 &a…...

百度主动推送可以提升抓取,它能提升索引量吗?

站长在建站SEO的时候,需要用到百度站长平台(资源平台)的工具,在站长工具中【普通收录】-【资源提交】-【API提交】这个功能,对网站的抓取进行一个提交。 这里估计很多站长就有疑问,如果我主动推送&#xf…...

A045-基于spring boot的个人博客系统的设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...

JavaEE 【知识改变命运】02 多线程(1)

文章目录 线程是什么?1.1概念1.1.1 线程是什么?1.1.2 为什么要有线程1.1.3 进程和线程的区别1.1.4 思考:执行一个任务,是不是创建的线程或者越多是不是越好?(比如吃包子比赛)1.1.5 ) Java 的线程…...

Pytorch使用手册-Transforms(专题四)

Transforms(变换) 在 PyTorch 数据处理中的重要性和使用方法,特别是如何通过 torchvision.transforms 模块对数据进行预处理和变换,使其适合用于训练机器学习模型。以下是具体的内容解读: 什么是 Transforms? 数据通常在收集后并非直接适合用于训练机器学习模型,需要通…...

【Android】ARouter的使用及源码解析

文章目录 简介介绍作用 原理关系 使用添加依赖和配置初始化SDK添加注解在目标界面跳转界面不带参跳转界面含参处理返回结果 源码基本流程getInstance()build()navigation()_navigation()Warehouse ARouter初始化init帮助类根帮助类组帮助类 completion 总结 简介 介绍 ARouter…...

ValueError: bbox_params must be specified for bbox transformations

错误 ValueError: bbox_params must be specified for bbox transformations 是因为使用了需要处理边界框(bboxes)的增强操作,但在 albumentations.Compose 中没有正确设置bbox_params 参数。 bbox_params 是用来指定如何处理边界框的配置。…...

挂壁式空气净化器哪个品牌的质量好?排名top3优秀产品测评分析

随着挂壁式空气净化器市场的不断扩大,各类品牌与型号琳琅满目。但遗憾的是,一些跨界网红品牌过于追求短期效益,导致产品在净化效果与去除异味方面表现平平,使用体验不佳,甚至可能带来二次污染风险,影响人体…...

钉钉数据如何高效集成到金蝶云星空系统

钉钉数据集成到金蝶云星空的技术案例分享 在企业日常运营中,办公用品采购流程的高效管理至关重要。为了实现这一目标,我们采用了轻易云数据集成平台,将钉钉中的采购申请单数据无缝对接到金蝶云星空系统中。本次案例将详细解析【办公用品采购…...

躺平成长-腾讯云数据库(又消失了一次)

开源竞争: 当你无法彻底掌握技术的时候,你就开源这个技术,形成更多的技术依赖,你会说 这不就是在砸罐子吗?一个行业里面总会有人砸罐子的,你不如先砸罐子,还能听个响声。 数据库的里面清洁的数据…...

初学 flutter 问题记录

windows搭建flutter运行环境 一、运行 flutter doctor遇到的问题 Xcmdline-tools component is missingRun path/to/sdkmanager --install "cmdline-tools;latest"See https://developer.android.com/studio/command-line for more details.1)cmdline-to…...

Hadoop的MapReduce详解

文章目录 Hadoop的MapReduce详解一、引言二、MapReduce的核心概念1、Map阶段1.1、Map函数的实现 2、Reduce阶段2.1、Reduce函数的实现 三、MapReduce的执行流程四、MapReduce的使用实例Word Count示例1. Mapper类2. Reducer类3. 执行Word Count 五、总结 Hadoop的MapReduce详解…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...