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

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...