大语言模型---强化学习

本文章参考,原文链接:https://blog.csdn.net/qq_35812205/article/details/133563158

SFT使用交叉熵损失函数,目标是调整参数使模型输出与标准答案一致,不能从整体把控output质量

RLHF(分为奖励模型训练、近端策略优化两个步骤)则是将output作为一个整体考虑,优化目标是使模型生成高质量回复

引发思考:

使用排序数据集和DPO(Direct Preference Learning)直接偏好学习或其他替代方法(如RAILF、ReST等)来训练模型。这可以帮助模型生成更高质量的回复,而不是直接使用RLHF。

为了减少幻觉(如拒绝回答),可以构造排序数据集(如good response为拒绝话术,bad response是没拒绝的胡乱回答)进行RLHF。这种方法可以帮助模型学习在拒绝回答时如何更好地处理情况。

奖励模型训练:奖励模型通常也采用基于 Transformer 架构的预训练语言模型。在奖励模型中,移除最后一个

非嵌入层,并在最终的 Transformer 层上叠加了一个额外的线性层。无论输入的是何种文本,奖励

模型都能为文本序列中的最后一个标记分配一个标量奖励值,样本质量越高,奖励值越大。

在RLHF中(比如MOSS-RLHF)是使用奖励模型来初始化评论家模型(critic model)和奖励模型(reward model),评论家模型也使用奖励模型初始化,便于在早期提供较准确的状态值估计;但是注意PPO会对策略模型、评论家模型训练并更新;奖励模型、参考模型不参与训练。

异策略:固定一个演员和环境交互(不需要更新),将交互得到的轨迹交给另一个负责学习的演员训练。PPO就是策略梯度的异策略版本。通过重要性采样(这里使用KL散度)进行策略梯度的更新。PPO解决了传统策略梯度方法的缺点:高方差、低数据效率、易发散等问题。

PPO-clip算法通过引入裁剪机制来限制策略更新的幅度,使得策略更新更加稳定

强化学习基础知识

1、强化学习框架的六要素

强化学习(RL)是研究agent智能体和环境交互的问题,目标是使agent在复杂而不确定的环境中最大化奖励值。

智能体(Agent):强化学习的主体也就是作出决定的"大脑";

环境(Environment):智能体所在的环境,智能体交互的对象;

行动(Action):由智能体做出的行动;

奖励(Reward):智能体作出行动后,该行动带来的奖励;

状态(State):智能体自身当前所处的状态;

目标(Objective):指智能体希望达成的目标。

串起6要素:一个在不断变化的【环境】中的【智能体】,为了达成某个【目标】,需要不断【行动】,行动给予反馈即【奖励】,智能体对这些奖励进行学习,改变自己所处的【状态】,再进行下一步行动,即持续这个【行动-奖励-更新状态】的过程,直到达到目标。

策略与价值:

  • agent在尝试各种行为时,就是在学习一个策略policy(一套指导agent在特定状态下行动的规则)
  • agent会估计价值value,即预测未来采取某个行为后所能带来的奖励

任何一个有智力的个体,它的学习过程都遵循强化学习所描述的原理。比如说,婴儿学走路就是通过与环境交互,不断从失败中学习,来改进自己的下一步的动作才最终成功的。再比如说,在机器人领域,一个智能机器人控制机械臂来完成一个指定的任务,或者协调全身的动作来学习跑步,本质上都符合强化学习的过程。

奖励模型(Reward Model)和评论模型(Critic Model)

奖励模型(Reward Model):奖励模型是强化学习中一个基本元素,它定义了智能体执行特定动作后将得到的奖励。换句话说,奖励模型为智能体在其环境中执行的每个动作提供奖励(正面)或惩罚(负面)。这个模型帮助智能体理解哪些动作是有利的,哪些不是,因此,智能体尝试通过最大化获得的总奖励来找到最优策略。

评论模型(Critic Model):评论模型是一种基于值迭代的方法,它在每个状态或动作上评估(或者"评论")期望的未来奖励。评论者用来估计一个动作或状态的长期价值,通常在演员-评论者模型(Actor-Critic Models)中使用,演员选择动作,评论者评估动作。

两者的主要区别在于,奖励模型直接反映了每个动作的即时反馈,而评论模型是对未来奖励的一个预测或估计,关注的是长期价值,通常基于数学期望来进行评估。

RLHF对齐

1. 训练奖励模型和RL

用奖励模型训练SFT模型,生成模型使用奖励或惩罚来更新策略,以便生成更高质量、符合人类偏好的文本。

|------|---------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------|
| | 奖励模型 | RL强化学习 |
| 作用 | (1)学习人类兴趣偏好,训练奖励模型。由于需要学习到偏好答案,训练语料中含有response_rejected不符合问题的答案。 (2)奖励模型能够在RL强化学习阶段对多个答案进行打分排序。 | 根据奖励模型,训练之前的sft微调模型,RL强化学习阶段可以复用sft的数据集 |
| 训练语料 | {'question': '土源性线虫感染的多发地区是哪里?', 'response_chosen': '苏北地区;贵州省剑河县;西南贫困地区;桂东;江西省鄱阳湖区;江西省', 'response_rejected': '在热带和亚热带地区的农村。'}, | 根据奖励模型,训练之前的sft微调模型,RL强化学习阶段可以复用sft的数据集 |

RLHF(reinforcement learning from human feedback)

分为三个步骤:

  • step1 我做你看:有监督学习,从训练集中挑出一批prompt,人工对prompt写答案。其实就是构造sft数据集进行微调。
  • step2 你做我看:奖励模型训练,这次不人工写答案了,而是让GPT或其他大模型给出几个候选答案,人工对其质量排序,Reward model学习一个打分器;这个让机器学习人类偏好的过程就是【对齐】,但可能会导致胡说八道,可以通过KL Divergence等方法解决。
  • step3 自学成才:PPO训练,利用第二阶段的奖励模型RM计算奖励分数,同时使用PPO(近端策略优化)更新第一步训练得到的sft模型,最大优化该目标函数:

常见的公开偏好数据集

源自《Llama 2: Open Foundation and Fine-Tuned Chat Models》Table 6:

如:https://huggingface.co/datasets/lvwerra/stack-exchange-paired

PPO近端策略优化

PPO思想:保证策略改进同时,通过一些约束来控制策略更新的幅度;在每次迭代中,通过采样多个轨迹数据来更新策略:

  • 使用当前策略对环境交互,收集多个轨迹数据
  • 利用第一步的轨迹数据计算当前策略和旧策略之间的KL散度,通过控制KL散度大小来限制策略更新的幅度
  • 使用优化器对策略进行更新,使其更加接近当前的样本策略

近端策略优化PPO涉及到四个模型:

(1)策略模型(Policy Model),生成模型回复。

(2)奖励模型(Reward Model),输出奖励分数来评估回复质量的好坏。

(3)评论模型(Critic Model/value model),来预测回复的好坏,可以在训练过程中实时调整模型,选择对未来累积收益最大的行为。

(4)参考模型(Reference Model)提供了一个 SFT 模型的备份,帮助模型不会出现过于极端的变化。

近端策略优化PPO的实施流程如下:

**环境采样:**策略模型基于给定输入生成一系列的回复,奖励模型则对这些回复进行打分获得奖励。

**优势估计:**利用评论模型预测生成回复的未来累积奖励,并借助广义优势估计(Generalized Advantage Estimation,GAE)算法来估计优势函数,能够有助于更准确地评估每次行动的好处。

**GAE:**基于优势函数加权估计的GAE可以减少策略梯度估计方差

**优化调整:**使用优势函数来优化和调整策略模型,同时利用参考模型确保更新的策略不会有太大的变化,从而维持模型的稳定性。

相关强化学习概念对应:

  • Policy:现有LLM接受输入,进行输出的过程。
  • State:当前生成的文本序列。
  • Action Space:即vocab,也就是从vocab中选取一个作为本次生成的token。

KL散度(Kullback-Leibler Divergence),可以衡量两个概率分布之间的差异程度。在 PPO 算法中,KL 散度(Kullback-Leibler Divergence)的计算公式如下

其中,π_old 表示旧的策略,π_new 表示当前的样本策略。KL 散度的含义是用 π_old 的分布对 π_new 的分布进行加权,然后计算两个分布之间的差异程度。

具体来说,KL 散度的计算方法是首先计算 π_old(i) / π_new(i) 的比值,然后对其取对数并乘以 π_old(i) 来进行加权。最后将所有加权后的结果相加,即可得到 KL 散度的值。这里的KL散度值是一个【惩罚项】,即经过RL训练后模型和SFT后模型的KL散度(繁殖两个模型偏差太多,导致模型效果下降,RLHF的主要目的是alignment)。

注意:KL 散度是一个非对称的度量,即 KL(π_old || π_new) 与 KL(π_new || π_old) 的值可能不相等。在 PPO 算法中,我们通常使用 KL(π_old || π_new) 来控制策略更新的幅度,因为 KL(π_old || π_new) 的值通常比 KL(π_new || π_old) 更容易控制,并且更能够反映出策略改变的方向。

DPO、PPO 和 BPO 都是用于训练强化学习代理的算法,但它们在算法原理和实现上有一些不同之处。

  1. DPO(Direct Policy Optimization):DPO 是一种直接策略优化方法,它通过直接优化策略函数来提高代理的性能。与值函数(价值函数)相比,DPO 不需要估计状态值或状态动作值,而是直接优化策略函数来最大化长期累积奖励。DPO 可能包括各种方法,如 REINFORCE 算法、TRPO(Trust Region Policy Optimization)等。

  2. PPO(Proximal Policy Optimization):PPO 也是一种策略优化方法,它专注于近端策略优化。PPO 通过限制每次策略更新的大小来确保稳定性和收敛性,这通常通过一种叫做"近端策略裁剪"的方法来实现。PPO 在训练过程中不需要使用价值函数,而是直接优化策略函数。PPO 的设计目标是简化和提高算法的稳定性。

  3. BPO(Batch Policy Optimization):BPO 是一种批量策略优化方法,它使用离线收集的数据批次进行策略更新。与在线方法不同,BPO 不需要与环境交互来收集数据,而是使用事先收集的大量数据进行策略更新。BPO 可以更有效地利用离线数据,但也面临着样本效率和数据偏差等挑战。

相关推荐
孤寂大仙v21 分钟前
【Linux笔记】理解文件系统(上)
linux·运维·笔记
ianozo23 分钟前
数据结构--【栈与队列】笔记
数据结构·笔记
极客BIM工作室1 小时前
机器学校的考试风波:误差分析、过拟合和欠拟合
笔记·机器学习
flashier2 小时前
C语言 进阶指针学习笔记
c语言·笔记·学习
大白的编程日记.2 小时前
【Linux学习笔记】Linux基本指令分析和权限的概念
linux·笔记·学习
螺旋式上升abc2 小时前
GO语言学习笔记
笔记·学习·golang
Moonnnn.3 小时前
51单片机——汇编工程建立、仿真、调试全过程
汇编·笔记·嵌入式硬件·学习·51单片机
画个逗号给明天"3 小时前
TinyWebServer项目笔记——02 半同步半反应堆线程池
笔记
不会聊天真君6473 小时前
HTML5(Web前端开发笔记第一期)
笔记·html5
!!!5254 小时前
Sentinel 笔记
笔记·sentinel