【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》

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

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

相关文章

Vue3-后台管理系统

目录 一、完成项目历程 1、构建项目 2、项目的自定义选项 3、 封装组件 4、配置对应页面的路由 5、从后端调接口的方式 二、引入Element Plus、Echarts、国际化组件 1、Element Plus安装 2、Echarts安装 3、国际化 三、介绍项目以及展示 1、项目是基于Vue3、Element …

C0030.Clion中运行提示Process finished with exit code -1073741515 (0xC0000135)解决办法

1.错误提示 2.解决办法 添加环境变量完成之后,重启Clion软件,然后就可以正常调用由mingw编译的opencv库了。

【es6进阶】vue3中的数据劫持的最新实现方案的proxy的详解

vuejs中实现数据的劫持,v2中使用的是Object.defineProperty()来实现的,在大版本v3中彻底重写了这部分,使用了proxy这个数据代理的方式,来修复了v2中对数组和对象的劫持的遗留问题。 proxy是什么 Proxy 用于修改某些操作的默认行为&#xff0…

Python浪漫之画明亮的月亮

目录 1、效果展示 2、完整版代码 1、效果展示 2、完整版代码 import turtledef draw_moon():# 设置画布turtle.bgcolor("black") # 背景颜色为黑色turtle.speed(10) # 设置绘制速度# 绘制月亮的外圈turtle.penup()turtle.goto(0, -100) # 移动到起始…

《线性代数的本质》

之前收藏的一门课,刚好期末复习,顺便看一看哈哈 课程链接:【线性代数的本质】合集-转载于3Blue1Brown官方双语】 向量究竟是什么 线性代数中最基础、最根源的组成部分就是向量,需要先明白什么是向量 不同专业对向量的看法 物理专…

鸿蒙系统ubuntu开发环境搭建

在RISC-V等平台移植鸿蒙系统OpenHarmony,需要使用linux环境进行代码的编译,为兼顾日常办公需要,可采用WindowsUbuntu虚拟机的混合开发的环境,通过网络及文件夹共享,在主机和虚拟机之间共享文件数据。 工具准备&#x…

智能停车解决方案之停车场室内导航系统(二):核心技术与系统架构构建

hello~这里是维小帮,如有项目需求和技术交流欢迎大家私聊我们!点击文章最下方获取智慧停车场方案~撒花! 随着城市化进程的加速,停车难问题日益凸显。智能停车系统作为缓解停车压力的有效手段,其核心技术与架构的构建至…

(免费送源码)计算机毕业设计原创定制:Java+JSP+HTML+JQUERY+AJAX+MySQL springboot计算机类专业考研学习网站管理系统

摘 要 大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在大学生在线计算机类专业考研学习网站管理的要求下,开发一…

IDEA2023版本中如何启动项目的多个实例

假设现在要启动多个服务,例如简单的客户端和服务端,默认的idea是只能启动一个的,那么我们需要进行配置允许多个项目的同时启动,现在进行多实例的配置。 第一步 点击Edit Configurations 第二步 点击Modify options 第三步 勾选…

图的邻接矩阵和邻接表存储

目录 邻接矩阵存储法 简介 ​编辑 邻接矩阵举例 无向图邻接矩阵 有向图邻接矩阵 当各条边带有权值时 邻接矩阵算法实现 结构体定义和函数声明 函数的实现 邻接表存储法 简介 邻接表的算法实现 结构体定义和函数声明 函数的实现 邻接矩阵和邻接表的差别 邻接矩阵存…

【Linux命令】grep

Linux命令-grep GREP命令:进行字符串数据的比对,并将符合指定模式的字符串行打印出来。1.命令介绍基础正则表达式原始文档如下: 2.练习题:2.1 练习(一):2.1.1 读取加行号的文件内容:…

WMS 如何实现智能仓储与自动化物流的无缝对接

【大家好,我是唐Sun,唐Sun的唐,唐Sun的Sun。】 在当今高度竞争的商业环境中,企业对于物流效率和仓储管理的要求日益严苛。智能仓储和自动化物流作为现代物流领域的重要发展方向,能够显著提高物流运作的速度、准确性和成…

DevOps-Jenkins-新手入门级

1. Jenkins概述 1. Jenkins是一个开源持续集成的工具,是由JAVA开发而成 2. Jenkins是一个调度平台,本身不处理任何事情,调用插件来完成所有的工作 1.1 什么是代码部署 代码发布/部署>开发书写的程序代码---->部署测试/生产环境 web服务…

WEB APIS(DOM对象,操作元素内容,属性,表单属性,自定义属性,定时器)

js基础基本语法: 变量,数据类型,循环,函数,对象等(主要是控制台打印) WEB APIS 操作DOM BOM : 控制网页元素,交互等各种网页交互效果 js高级 语法: js新增语法&#xff0…

cs144(一)

cs144(一) 1、osi 当应用程序有数据要发送时,应用层将数据交给传输层, 传输层负责将数据可靠或不可靠地传送到另外一端,传输层通过将数据交给网络层来发送数据 网络层负责将数据分成数据包,每个数据包都有正确的目的地址 最后…

IEC61850读服务器目录命令——GetServerDirectory介绍

IEC61850标准中的GetServerDirectory命令是变电站自动化系统中非常重要的一个功能,它主要用于读取服务器的目录信息,特别是服务器的逻辑设备节点(LDevice)信息。以下是对GetServerDirectory命令的详细介绍。 目录 一、命令功能 …

如何使用AWS Lambda构建一个云端工具(超详细)

首发地址(欢迎大家访问):如何使用AWS Lambda构建一个云端工具(超详细) 1 前言 1.1 无服务器架构 无服务器架构(Serverless Computing)是一种云计算服务模型,它允许开发者构建和运行…

力扣-位运算-1【算法学习day.41】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…

MySQL数据库学习(持续更新ing)

1. 什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么? 数据库:Database, 简称DB。按照一定格式存储数据,一些文件的组合。 数据库管理系统:DataBaseManagement&…

【Python · PyTorch】循环神经网络 RNN(基础概念)

【Python PyTorch】循环神经网络 RNN(基础概念) 0. 生物学相似性1. 概念2. 延时神经网络(TDNN)3. 简单循环神经网络(Simple RNN)3.1 BiRNN 双向循环神经网络3.2 特点记忆性参数共享图灵完备 3.3 网络结构3…