模型Alignment之RLHF与DPO

1. RLHF (Reinforcement Learning from Human Feedback)

RLHF 是一种通过人类反馈来强化学习的训练方法,它能够让语言模型更好地理解和执行人类指令。

RLHF 的三个阶段

RLHF 的训练过程一般分为三个阶段:

  1. 监督微调(Supervised Fine-Tuning, SFT)

    • 目的:让模型初步具备按照人类指令生成文本的能力。
    • 数据:使用大量的人工标注数据,包含输入的 prompt 和对应的期望输出。
    • 训练:将这些数据作为监督学习任务,对预训练的大语言模型进行微调。
    • 结果:得到一个初步具有指令跟随能力的模型。
  2. 奖励模型训练(Reward Model Training)

    • 目的:训练一个模型来评估模型生成的文本质量。
    • 数据:收集模型在 SFT 阶段生成的多个不同回复,由人类标注人员对这些回复进行排序,以表示它们相对于给定 prompt 的优劣。
    • 训练:将这些排序数据作为训练数据,训练一个奖励模型。奖励模型的输出是一个标量值,表示生成的文本的质量。
    • 结果:得到一个能够对文本质量进行打分的奖励模型。
  3. 强化学习微调(Reinforcement Learning Fine-Tuning)

    • 目的:使用奖励模型的反馈来进一步优化模型的生成能力。
    • 方法:采用强化学习算法(如 PPO),将语言模型作为策略,奖励模型作为价值函数。
    • 过程
      • 模型生成文本。
      • 奖励模型对生成的文本打分。
      • 根据奖励信号,更新模型的参数,使其生成更高质量的文本。
    • 结果:得到一个在人类反馈下表现更优的语言模型。

技术细节

  • 奖励模型:奖励模型通常是一个分类模型,它学习将不同的文本输出映射到一个连续的奖励值。常用的模型架构包括:
    • 基于 Transformer 的模型:与语言模型类似,具有强大的序列处理能力。
    • 对比学习模型:通过比较不同文本输出的相似性来学习奖励函数。
  • 强化学习算法:PPO(Proximal Policy Optimization)是一种常用的强化学习算法,它能够在保证策略稳定性的同时,高效地更新策略。
  • 数据收集:在 RLHF 的过程中,需要不断地收集新的数据来训练奖励模型和更新策略。这些数据可以来自以下几个方面:
    • 人工标注:由人类标注人员对模型生成的文本进行评估。
    • 用户反馈:收集用户在实际使用中的反馈。
    • 模型自生成:模型通过自生成的方式产生大量数据。

2. PPO在RLHF中的应用

PPO算法概述

PPO(Proximal Policy Optimization)是一种常用的强化学习算法,在RLHF中,它被用来优化语言模型,使其生成的文本能最大化人类反馈的奖励。

核心思想:

  • 策略更新: 通过不断调整模型的参数,使得模型生成的文本能获得更高的奖励。
  • 近端策略更新: 为了保证策略的稳定性,PPO限制了新旧策略之间的差异,避免模型发生剧烈变化。

PPO在RLHF中的具体步骤

  1. 采样数据:

    • 使用当前的语言模型生成多个文本样本。
    • 将这些样本输入到奖励模型中,获得对应的奖励分数。
  2. 计算优势函数:

    • 优势函数表示一个动作的好坏程度相对于平均动作的偏离程度。
    • 在RLHF中,优势函数可以表示为:
      • 优势函数 = 奖励 - 基线
    • 基线通常是所有样本奖励的平均值或一个估计值。
  3. 更新策略:

    • 概率比: 计算新旧策略下,生成相同文本的概率比。
    • 裁剪概率比: 为了防止策略更新过大,将概率比裁剪到一个合理范围内。
    • 计算损失函数:
      • 损失函数通常包含两项:
        • 策略损失: 鼓励模型生成高奖励的文本。
        • KL散度: 限制新旧策略之间的差异。
    • 更新模型参数: 使用梯度下降法来最小化损失函数,从而更新模型的参数。

损失函数的具体形式

PPO的损失函数可以写成如下形式:

L(θ) = 𝔼[min(r_t(θ) * A_t, clip(r_t(θ), 1 - ε, 1 + ε) * A_t)] - β * KL[π_θ, π_θ_old]
  • r_t(θ): 概率比,表示新旧策略下生成相同动作的概率比。
  • A_t: 优势函数。
  • clip: 裁剪操作,将概率比裁剪到[1-ε, 1+ε]的范围内。
  • β: KL散度的系数,用于控制新旧策略之间的差异。
  • KL[π_θ, π_θ_old]: 新旧策略之间的KL散度。

  • 第一项: 鼓励模型生成高奖励的文本。当优势函数为正时,希望概率比越大越好;当优势函数为负时,希望概率比越小越好。
  • 第二项: 限制新旧策略之间的差异,保证策略的稳定性。

3. DPO (Direct Preference Optimization)

DPO的工作原理

DPO的核心思想是:通过比较不同文本生成的优劣,直接优化模型参数。具体来说,DPO会收集大量的文本对,其中每一对文本代表着人类对两个文本的偏好。然后,DPO会训练模型,使得模型能够对新的文本对进行排序,并尽可能地与人类的偏好一致。

DPO与RLHF的区别

特点RLHFDPO
奖励模型需要训练奖励模型无需训练奖励模型
优化目标最大化奖励信号直接优化人类偏好
训练过程两阶段训练(预训练+强化学习)单阶段训练
  • 与RLHF相比,DPO旨在简化过程,直接针对用户偏好优化模型,而不需要复杂的奖励建模和策略优化
  • 换句话说,DPO专注于直接优化模型的输出,以符合人类的偏好或特定目标
  • 如下所示是DPO如何工作的概述

DPO没有再去训练一个奖励模型,使用奖励模型更新大模型,而是直接对LLM进行微调。
实现DPO损失的具体公式如下所示:

  • “期望值” E \mathbb{E} E是统计学术语,表示随机变量的平均值或平均值(括号内的表达式);优化 − E -\mathbb{E} E使模型更好地与用户偏好保持一致
  • π θ \pi_{\theta} πθ变量是所谓的策略(从强化学习借用的一个术语),表示我们想要优化的LLM; π r e f \pi_{ref} πref是一个参考LLM,这通常是优化前的原始LLM(在训练开始时, π θ \pi_{\theta} πθ π r e f \pi_{ref} πref通常是相同的)
  • β \beta β是一个超参数,用于控制 π θ \pi_{\theta} πθ和参考模型之间的分歧;增加 β \beta β增加差异的影响
    π θ \pi_{\theta} πθ π r e f \pi_{ref} πref在整体损失函数上的对数概率,从而增加了两个模型之间的分歧
  • logistic sigmoid函数 σ ( ⋅ ) \sigma(\centerdot) σ()将首选和拒绝响应的对数优势比(logistic sigmoid函数中的项)转换为概率分数

DPO需要两个LLMs,一个策略(policy)模型(我们想要优化的模型)还有一个参考(reference)模型(原始的模型,保持不变)。
我们得到两个模型的输出后,对其输出的结果计算softmax并取log,然后通过target取出预测目标对应的数值。(其实就是做了一个交叉熵,和交叉熵的计算过程一模一样)。通过这个过程我们可以得到每个模型在每个回答上的 π \pi π,于是代入公式计算结果。

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

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

相关文章

Apache ZooKeeper 及 Curator 使用总结

1. 下载 官网地址:Apache ZooKeeper 点击下载按钮 选择对应的版本进行下载 2. 使用 1、解压 tar -zxf apache-zookeeper-3.9.2-bin.tar.gz2、复制配置文件,有一个示例配置文件 conf/zoo_sample.cfg,此文件不能生效,需要名称为…

Docker Registry API best practice 【Docker Registry API 最佳实践】

文章目录 1. 安装 docker2. 配置 docker4. 配置域名解析5. 部署 registry6. Registry API 管理7. 批量清理镜像8. 其他 👋 这篇文章内容:实现shell 脚本批量清理docker registry的镜像。 🔔:你可以在这里阅读:https:/…

安卓13设置动态显示隐藏第一页的某一项 动态显示隐藏无障碍 android13设置动态显示隐藏第一页的某一项

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改4.1修改方法14.2修改方法25.编译6.彩蛋1.前言 有时候,我们的设置里面显示的信息,需要根据不同的情况显示不同的信息,例如,动态的显示或者隐藏 “无障碍” 这一项。 2.问题分析 像这个问题…

基于 K8S kubernetes 搭建 安装 EFK日志收集平台

目录 1、在k8s中安装EFK组件 1.1 安装elasticsearch组件 1.2 安装kibana组件 1.3 安装fluentd组件 文档中的YAML文件配置直接复制粘贴可能存在格式错误,故实验中所需要的YAML文件以及本地包均打包至网盘 链接:https://pan.baidu.com/s/15Ryaoa0_…

Leetcode面试经典150题-39.组合总数进阶:40.组合总和II

本题是扩展题,真实考过,看这个题之前先看一下39题 Leetcode面试经典150题-39.组合总数-CSDN博客 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数…

Java查找算法——(四)分块查找(完整详解,附有代码+案例)

文章目录 分块查找1.1普通分块查找 分块查找 1.1普通分块查找 分块原则: 块内无序,块间有序:前一块中的最大数据,小于后一块中所有的数据,块与块之间不能有数据重复的交集。块的数量一般等于数字个数开根号 核心思路&#xff…

CentOS Linux教程(6)--CentOS目录

文章目录 1. 根目录2. cd目录切换命令3. CentOS目录介绍4. pwd命令介绍5. ls命令介绍5.1 ls5.2 ls -a5.3 ls -l 1. 根目录 Windows电脑的根目录是计算机(我的电脑),然后C盘、D盘。 Linux系统的根目录是/,我们可以使用cd /进入根目录,然后使…

VUE条件树查询

看如下图所示的功能,是不是可高级了?什么,你没看懂?拜托双击放大看! 是的,我最近消失了一段时间就是在研究这个玩意的实现,通过不懈努力与钻研并参考其他人员实现并加以改造,很好&am…

南开大学联合同济大学发布最新SOTA Occ OPUS:使用稀疏集进行占据预测,最快实现8帧22FPS

Abstract 占据预测任务旨在预测体素化的 3D 环境中的占据状态,在自动驾驶社区中迅速获得了关注。主流的占据预测工作首先将 3D 环境离散化为体素网格,然后在这些密集网格上执行分类。然而,对样本数据的检查显示,大多数体素是未占…

Windows内核编程基础(3)

内存分配 在应用层编程时,系统提供了GlobalAlloc/HeapAlloc/LocalAlloc等函数。C/C库提供了malloc函数,以及new操作符在堆上分配内存。 在我前面一个关于Windows页交换文件的博客中,介绍了虚拟内存, 虚拟内存是计算机系统内存管…

Unity开发绘画板——03.简单的实现绘制功能

从本篇文章开始,将带着大家一起写代码,我不会直接贴出成品代码,而是会把写代码的历程以及遇到的问题、如何解决这些问题都记录在文章里面,当然,同一个问题的解决方案可能会有很多,甚至有更好更高效的方式是…

Go容器化微服务系统实战

1-1 本课的go微服务有什么不同? 聚焦于容器化可观测的购物微服务系统实战,通过介绍Go语言的应用趋势、容器化优势及微服务适用性,旨在解决学习微服务过程中遇到的难点。课程内容涵盖微服务整体架构、技术工具框架及容器平台等关键技术&#…

Java之路--瓦解逻辑控制与方法使用已是瓮中捉鳖

嗨嗨大家!今天我们来学习逻辑运算和方法的使用~ 目录 一 逻辑控制 1 分支结构 1.1 if语句 1.2 switch 语句 2 循环结构 2.1 while 循环 2.2 for 循环 2.3 do while 循环 2.4 break 2.5 continue 3. 输出输入 二、方法的使用 1 方法定义语法 2 实参和…

苹果macOS 15.0 Sequoia正式版发布:iPhone应用镜像玩、手机消息电脑知

9月17日苹果向 Mac 电脑用户推送了 macOS 15 更新(内部版本号:24A335),除了引入数个 iOS 18 的新功能外,macOS 15 Sequoia 还带来了全新的 Continuity 功能 ——iPhone 镜像。 iPhone 镜像功能可以让用户直接在 Mac 上…

[Linux] Linux操作系统 进程的状态

标题:[Linux] Linux操作系统 进程的状态 个人主页:水墨不写bug (图片来源于网络) 目录 一、前置概念的理解 1.并行和并发 2.时间片 3.进程间具有独立性 4.等待的本质 正文开始: 在校的时候,你一定学过《…

图解Transformer就这30页PPT,你们真不看啊

图解Transformer就这30页PPT,你们真不看啊 主要介绍了Seq2Seq模型,慢慢引出了transformer的整体模型架构,比较具体的介绍了编码器部分的数据处理过程,包括了位置编码、多头注意力机制、残差连接、Layer Norm以及前馈网络等基本结…

支付宝沙箱环境 支付

一 什么是沙箱: 沙箱环境是支付宝开放平台为开发者提供的安全低门槛的测试环境 支付宝正式和沙箱环境的区别 : AI: 从沙箱到正式环境: 当应用程序开发完成后,需要将应用程序从沙箱环境迁移到正式环境。 这通常涉及…

如何查看线程

1、首先找到我们的电脑安装jdk的位置,这里给大家展示一下博主本人的电脑jdk路径下的jconsole位置。 2、 ok,那么找到这个jconsole程序我们直接双击打开就可以查看我们电脑的本地进程: jconsole 这里能够罗列出你系统上的 java 进程&#xff0…

古代经典名方目录数据库-支持经典名方检索!

"古代经典名方目录"是指一系列历史上流传下来的,被认为具有一定疗效的中药方剂的汇总。这些方剂多来源于历代医学典籍,经过长期临床实践的检验,部分已被收录于官方的目录之中,以便于现代医疗实践中的参考和应用。 目前…

手机在网状态查询接口如何用C#进行调用?

一、什么是手机在网状态查询接口? 手机在网状态查询接口是利用实时数据来对手机号码在运营商网络中的状态进行查询的工具,包括正常使用状态、停机状态、不在网状态、预销户状态等。 二、手机在网状态查询适用哪些场景? 例如:商…