当前位置: 首页 > 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详解…...

全新配置ubuntu18.04深度学习环境

1、下载显卡驱动 1.1、驱动下载 连接:显卡驱动 手动驱动搜索-》查找-》查看-》下载 下载可使用指令 wget https://us.download.nvidia.com/XFree86/Linux-x86_64/535.216.01/NVIDIA-Linux-x86_64-535.216.01.run 2、下载安装cuda12.0 wget https://developer.do…...

持续集成与持续部署:CI/CD实现教程

以下是一个基于常见工具实现 CI/CD 的基本教程示例,这里以 Git、Jenkins、Maven(用于 Java 项目构建和管理依赖,其他语言项目可替换为对应构建工具)以及 Docker(用于容器化部署,非必需但很常用)…...

深度学习实验十二 卷积神经网络(3)——基于残差网络实现手写体数字识别实验

目录 一、模型构建 1.1残差单元 1.2 残差网络的整体结构 二、统计模型的参数量和计算量 三、数据预处理 四、没有残差连接的ResNet18 五、带残差连接的ResNet18 附:完整的可运行代码 实验大体步骤: 先前说明: 上次LeNet实验用到的那…...

Linux系统如何排查端口占用

如何在Linux系统中排查端口占用 在Linux系统中,当您遇到网络服务无法启动或响应异常的情况时,可能是因为某个特定的端口已经被其他进程占用。这时,您需要进行端口占用情况的排查来解决问题。本文将介绍几种常用的命令行工具和方法&#xff0…...

Linux常用命令之id命令详解

id命令详解 id 命令在 Linux 和 Unix 系统中用于显示用户的标识信息,包括用户ID(UID)、组ID(GID)以及用户所属的附加组。这个命令对于系统管理员和开发者来说非常有用,因为它能帮助他们确认运行命令或脚本…...

WGCLOUD如何部署在ARM平台

WGCLOUD是一款开源免费的运维平台,非常强大方便,可以帮我们提高运维效率 我们项目中,大部分是ARM的服务器,那么如何部署WGCLOUD呢,其实挺简单的 首先是部署服务端server 我们只要安装好对应ARM版本的JDK,…...

K8S + Jenkins 做CICD

前言 这里会做整体CICD的思路和流程的介绍,会给出核心的Jenkins pipeline脚本,最后会演示一下 实验/实操 结果 由于整体内容较多,所以不打算在这里做每一步的详细演示 - 本文仅作自己的实操记录和日后回顾用 要看保姆式教学的可以划走了&…...

HarmonyOS4+NEXT星河版入门与项目实战(11)------Button组件

文章目录 1、控件图解2、案例实现1、代码实现2、代码解释3、运行效果4、总结1、控件图解 这里我们用一张完整的图来汇整 Button 的用法格式、属性和事件,如下所示: 按钮默认类型就是胶囊类型。 2、案例实现 这里我们实现一个根据放大和缩小按钮来改变图片大小的功能。 功…...

小米note pro一代(leo)线刷、twrp、magisk、TODO: android源码编译

本文主要说android5 整体思路 android 5.1 twrp magisk Zygisk(Riru) Dreamland(xposed) Riru不支持android5.1, 因此只能选择Zygisk : 如果你正在使用 Android 5,你必须使用 Zygisk 因为 Riru 并不支持 Android 5. 基于magisk之上的xposed 其中提到的 作者…...

鸿蒙开发Hvigor插件动态生成代码

Hvigor允许开发者实现自己的插件,开发者可以定义自己的构建逻辑,并与他人共享。Hvigor主要提供了两种方式来实现插件:基于hvigorfile脚本开发插件、基于typescript项目开发。下面以基于hvigorfile脚本开发插件进行介绍。 基于hvigorfile脚本…...