大规模语言模型人类反馈对齐--强化学习

news2024/11/20 12:44:38

​OpenAI 推出的 ChatGPT 对话模型掀起了新的 AI 热潮, 它面对多种多样的问题对答如流, 似乎已经打破了 机器和人的边界。这一工作的背后是大型语言模型 (Large Language Model,LLM) 生成领域的新训练范式:RLHF (Reinforcement Learning from Human Feedback) ,即以强化学习方式依据人类反馈优化语言模型。

过去几年里各种 LLM 根据人类输入提示 (prompt) 生成多样化文本的能力令人印象深刻。然而, 对生成结果 的评估是主观和依赖上下文的, 例如, 我们希望模型生成一个有创意的故事、一段真实的信息性文本, 或者是 可执行的代码片段, 这些结果难以用现有的基于规则的文本生成指标 (如 BLEU 和 ROUGE) 来衡量。除了评估 指标, 现有的模型通常以预测下一个单词的方式和简单的损失函数 (如交叉熵) 来建模, 没有显式地引入人的偏 好和主观意见。

前面通过有监督微调, 大语言模型已经初步具备了服从人类指令, 并完成各类型任务的能力。然而有监督 微调需要大量指令和所对应的标准回复, 获取大量高质量的回复需要耗费大量的人力和时间成本。由于, 有监 督微调通常采用交叉熵损失做为损失函数, 目标是调整参数使得模型输出与标准答案完全相同, 不能从整体上 对模型输出质量进行判断。因此, 模型不能适用自然语言多样性, 也不能解决微小变化的敏感性问题。强化学 习则将模型输出文本作为一个整体进行考虑, 其优化目标是使得模型生成高质量回复。此外, 强化学习方法还 不依赖于人工编写的高质量回复。模型根据指令生成回复, 奖励模型针对所生成的回复给出质量判断。模型也 可以生成多个答案, 奖励模型对输出文本质量进行排序。模型通过生成回复并接收反馈进行学习。强化学习方 法更适合生成式任务,也是大语言模型构建中必不可少的关键步骤。

如果我们用生成文本的人工反馈作为性能衡量标准, 或者更进一步用该反馈作为损失来优化模型, 那不是 更好吗?这就是 RLHF 的思想:使用强化学习的方式直接优化带有人类反馈的语言模型。RLHF 使得在一般文本 数据语料库上训练的语言模型能和复杂的人类价值观对齐。

强化学习

先了解一下强化学习的一些基础概念,强化学习需要一个交互的过程,而且要解决的是序列决策问题。

强化学习是机器学习的范式和方法论之一, 用于描述和解决智能体在与环境的交互过程中通过学习策略以 达成回报最大化或实现特定目标的问题。其中心思想是让智能体在环境里学习。每个行动会对应各自的奖励, 智 能体通过分析数据来学习, 怎样的情况下应该做怎样的事情。其要解决的是序列决策问题, 一个决策代理与离 散的时间动态系统进行迭代地交互。在每个时间步的开始时, 系统会处于某种状态。基于代理的决策规则, 它会 观察当前的状态, 并从有限状态集中选择一个。然后,动态系统会进入下一个新的状态并获得一个对应的收益。 这样循环进行状态选择,以获得一组最大化收益。强化学习可以用一个闭环示意图来表示,如下图所示。

强化学习的闭环示意图。

强化学习有一些基本要素:

  • 状态(State):是对环境的描述,可以是离散的或连续的;

  • 行为(Action):环境中智能体某一轮采取的动作, 这个动作会作用于环境, 且执行后将获得一个奖励(可 正可负);

  • 奖励(Reward):本质就是为了完成某一目标的动作质量。从长远的角度看什么是好的, 一个状态的价值 是一个智能体从这个状态开始,对将来累积的总收益的期望。

  • 策略(Policy):策略定义了智能体在特定时间的行为方式,即策略是环境状态到动作的映射。

两个可以进行交互的对象:

  • 智能体(Agent):感知环境状态(State),根据反馈奖励(Reward) 选择合适行为(Action) 最大化长期收 益,在交互过程中进行学习。

  • 环境(Environment):游戏发生的场景, 可以被智能体做出的动作改变。接受智能体执行的一系列动作, 对 这一系列动作进行评价并转换为一种可量化的信号,最终反馈给智能体。环境中包含状态(State)信息。

强化学习有许多在游戏上的应用。用熟悉的超级玛丽来举个例子, 我们可以操纵的游戏角色玛丽是可以交 互的智能体 agent,游戏中每一帧的画面中要交互的场景即 enviroment,游戏角色依据当前环境做出新的动作, 而 环境会对角色的每个动作作出反馈, 例如吃到了金币会有加成, 而被击中则不是一个好消息, 这样的反馈可以 量化为奖励 reward ,这种奖励值可以帮助学习如何选择最合适的动作,也就是在交互中学习。

强化学习是和监督学习, 非监督学习并列的第三种机器学习方法。下图说明了强化学习与我们熟悉的监督 学习、无监督学习的关系。

强化学习与监督学习、无监督学习的关系示意图。

强化学习与监督学习的区别

随着 ChatGPT、Claude 等通用对话模型的成功, 强化学习在自然语言处理领域获得了越来越多的注意力。在 深度学习中,有监督学习和强化学习不同,下面是它们之间的对比:

  • ( 1)强化学习处理的大多数是序列数据,其很难像监督学习的样本一样满足独立同分布。在强化学习的训 练过程中, 时间非常重要。因为我们得到的是有时间关联的数据(sequential data), 而不是独立同分布的 数据。在机器学习中, 如果观测数据有非常强的关联, 会使得训练非常不稳定。这也是为什么在监督学习中,我们希望数据尽量满足独立同分布,这样就可以消除数据之间的相关性。

  • (2) 在强化学习过程中, 没有非常强的监督者(supervisor),只有奖励信号(reward signal) , 并且奖励信号 是延迟的。

  • (3)强化学习智能体会从环境中获得延迟的奖励,即环境会在很久以后才告诉我们之前所采取的动作到底 是不是有效的。因为我们没有得到即时反馈, 所以智能体使用强化学习来学习就非常困难。当我们采取一 个动作后, 如果使用监督学习, 就可以立刻获得一个指导, 比如, 我们现在采取了一个错误的动作, 正确 的动作应该是什么。而在强化学习中, 环境可能会告诉我们这个动作是错误的, 但是它并不会告诉我们正 确的动作是什么。而且更困难的是, 它可能是在一两分钟过后才告诉我们这个动作是错误的。所以这也是 强化学习和监督学习不同的地方。

  • (4)强化学习会试错探索,它通过探索环境来获取对环境的理解。学习器并没有告诉我们每一步正确的动 作应该是什么, 学习器需要自己去发现哪些动作可以带来最多的奖励, 只能通过不停地尝试来发现最有利 的动作。智能体获得自己能力的过程, 其实是不断地试错探索(trial-and-error exploration) 的过程。探索 (exploration) 和利用(exploitation) 是强化学习中非常核心的问题。其中, 探索指尝试一些新的动作, 这些 新的动作有可能会使我们得到更多的奖励, 也有可能使我们“一无所有”;利用指采取已知的可以获得最 多奖励的动作, 重复执行这个动作, 因为我们知道这样做可以获得一定的奖励。因此, 我们需要在探索和 利用之间进行权衡,这也是在监督学习中没有的情况。

  • (5)智能体的动作会影响它随后得到的数据,这一点是非常重要的。在训练智能体的过程中,很多时候我 们也是通过正在学习的智能体与环境交互来得到数据的。所以如果在训练过程中, 智能体不能保持稳定, 就会使我们采集到的数据非常糟糕。我们通过数据来训练智能体, 如果数据有问题, 整个训练过程就会失 败。所以在强化学习中一个非常重要的问题就是, 怎么让智能体的动作一直稳定地提升。用下棋来举个形 象的例子, 在监督学习中, 棋手的上限往往取决于老师的上限, 也就是俗话说的”和臭棋篓子下棋, 越下 越臭“;而在强化学习的设置下, 即使有着资质平平甚至有些笨的起点, 也有自己和自己下, 有朝一日悟 道飞升的可能性。

强化学习和非监督学习的区别

再来看看强化学习和非监督学习的区别。也还是在奖励值这个地方。非监督学习是没有输出值也没有奖励 值的, 它只有数据特征。同时和监督学习一样, 数据之间也都是独立的, 没有强化学习这样的前后依赖关系。可 以总结说, 监督学习是从外部监督者提供的带标注训练集中进行学习, 也就是由任务驱动型;非监督学习是一个 典型的寻找未标注数据中隐含结构的过程, 也就是数据驱动型;强化学习则更偏重于智能体与环境的交互, 这 带来了一个独有的挑战—— “试错(exploration)”与“开发(exploitation)”之间的折中权衡, 智能体必须开发已有的经验来获取收益, 同时也要进行试探, 使得未来可以获得更好的动作选择空间, 也就是说可以从错误中 学习。

文本生成中的强化学习

让我们落到文本生成的实际场景中。如图所示, 文本生成的问题, 可以建模为一个 token 空间上的序列决策 问题(选择一个 token 后继续选择另一个 token) :

  • State:对话上下文

  • Action:回复的 token space 相关 token 集合中的 token

  • Reward:生成的质量判别

  • Episode:一次完整的解码生成回复的过程

强化学习在大语言模型上的重要作用可以概括为以下几个方面:

  • (1) 强化学习比有监督学习更可以考虑整体影响:有监督学习针对单个词元进行反馈, 其目标是要求模型 针对给定的输入给出的确切答案。而强化学习是针对整个输出文本进行反馈, 并不针对特定的词元。这种 反馈粒度的不同, 使得强化学习更适合大语言模型, 既可以兼顾表达多样性, 还可以增强对微小变化的敏 感性。自然语言十分灵活, 可以用多种不同的方式表达相同的语义。而有监督学习很难支持上述学习方式。 强化学习则可以允许模型给出不同的多样性表达。另外一方面, 有监督微调通常采用交叉熵损失做为损失 函数, 由于总和规则, 造成这种损失对个别词元变化不敏感, 如果改变个别的词元, 只会对整体损失产生小的影响。但是, 一个否定词可以完全改变文本的整体含义。强化学习则可以通过奖励函数达到同时兼顾多样性和微小变化敏感性两个方面。

  • (2) 强化学习更容易解决幻觉问题:用户在大语言模型时主要有三类输入:(a) 文本型 (Text-Grounded):用 户输入相关文本和问题, 让模型基于所提供的文本生成答案 (例如,“本文中提到的人名和地名有哪些”); (b) 求知型 (Knowledge-Seeking):用户仅提出问题, 模型根据内在知识提供真实回答 (例如,“流感的常见 原因是什么”);(c) 创造型 (Creative):用户为提供问题或说明, 让模型进行创造性输出 (例如,“写一个关 于... 的故事”)。有监督学习算法非常容易使得求知型查询产生幻觉。在模型并不包含或者知道答案的情况 下, 有监督训练仍然会促使模型给出答案。而使用强化学习方法, 则可以通过定制奖励函数, 将正确答案 赋予非常高的分数, 放弃回答的答案赋予中低分数, 不正确的答案赋予非常高的负分, 使得模型学会依赖 内部知识选择放弃回答,从而在一定程度上缓解模型幻觉问题。

  • (3) 强化学习可以更好的解决多轮对话奖励累积问题:多轮对话能力是大语言模型重要的基础能力之一, 多 轮对话是否达成最终目标, 需要考虑多次交互过程的整体情况, 因此很难使用有监督学习方法构建。而使 用强化学习方法,可以通过构建奖励函数,将当前输出考虑整个对话的背景和连贯性。

强化学习的分类

根据一种比较通行的分类法,强化学习可以分为基于值的方法、基于策略的方法和 actor-critic 方法这三类。

  • 基于值函数的学习方法要学习一个价值函数, 去计算每个动作在当前环境下的价值, 目标就是获取最大的 动作价值, 即我每一步采取回报最大的动作和环境进行互动。Value-Based 的方法输出的是动作的价值, 选 择价值最高的动作。适用于非连续的动作。常见的方法有 Q-learning 、Deep Q Network 和Sarsa。其基础网 络结构如下图所示,在编码网络之后,直接用一个全连接层来为每个状态输出一个分数。

  • 基于策略梯度的学习方法去学习策略函数, 去计算当前前环境下每个动作的概率, 目标是获取最大的状态 价值, 即该动作发生后期望回报越大越好。Policy-Based 的方法直接输出下一步动作的概率, 根据概率来 选取动作。但不一定概率最高就会选择该动作, 还是会从整体进行考虑。适用于非连续和连续的动作。常 见的方法有 Policy gradients。

  • Actor-Critic 融合了上述两种方法, 价值函数和策略函数一起进行优化。价值函数负责在环境学习并提升自 己的价值判断能力,而策略函数则接受价值函数的评价,尽量采取在价值函数那可以得到高分的策略。

ps: 欢迎扫码关注公众号^_^.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

专题二:二叉树的深搜【递归、搜索、回溯】

深度优先遍历(DFS,全称为DepthFirstTraversal),是我们树或者图这样的数据结构中常用的⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分⽀,直到⼀条路径上的所有节点都被遍历完毕,然后再回溯到上⼀层&a…

为什么要做CRM?

客户管理的痛点: 1、销售经常性漏跟错跟客户,客户转化率低造成资源浪费 2、客户信息繁杂,难整理和查找 3、销售离职带走客户资源,损失大 4、传统报价审批流程长,效率低 企业做CRM系统有以下几点好处: …

纸、纸板和纸制品 有效回收组分的测定

声明 本文是学习GB-T 42944-2023 纸、纸板和纸制品 有效回收组分的测定. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件描述了纸、纸板和纸制品中有效回收组分的测定方法。 本文件适用于各种纸、纸板和纸制品,也适用于铝箔…

Paddle GPU版本需要安装CUDA、CUDNN

完整的教程 深度学习环境配置:linuxwindows系统下的显卡驱动、Anaconda、Pytorch&Paddle、cuda&cudnn的安装与说明 - 知乎这篇文档的内容是尽量将深度学习环境配置(使用GPU)所需要的内容做一些说明,由于笔者只在windows和linux下操作过&#xf…

Zookeeper分布式一致性协议ZAB源码剖析

文章目录 1、ZAB协议介绍2、消息广播 1、ZAB协议介绍 ZAB 协议全称:Zookeeper Atomic Broadcast(Zookeeper 原子广播协议)。 Zookeeper 是一个为分布式应用提供高效且可靠的分布式协调服务。在解决分布式一致性方面,Zookeeper 并…

04_学习springdoc与oauth结合_简述

文章目录 1 前言2 基本结构3 需要做的配置 简述4 需要做的配置 详述4.1 backend-api-gateway 的配置4.1.1 application.yml 4.2 backend-film 的配置4.2.1 pom.xml 引入依赖4.2.2 application.yml 的配置4.2.3 Spring Security 资源服务器的配置类 MyResourceServerConfig4.2.4…

代数——第3章——向量空间

第三章 向量空间(Vector Spaces) fmmer mit den einfachsten Beispielen anfangen. (始终从最简单的例子开始。) ------------------------------David Hilbert 3.1 (R^n)的子空间 我们的向量空间的基础模型(本章主题)是n 维实向量空间 的子空间。我们将在本节讨论它。…

以全新的视角审视重构——世界软件大师“鲍勃大叔”作序推荐

编程不只是写代码,更是一门艺术。编写优雅代码是一种极致追求,这需要一种极客精神才可以达到。高质量的代码不仅可以增加代码可读性,还可以确保所写的代码能够高质量运行和高效维护。 编程也是一门沟通语言,是团队沟通的方式。对代…

计算机毕业设计选题推荐-springboot 企业在线培训系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

JUC并发编程(二):线程相关知识点

1.背景 实现编发编程的主要手段就是多线程。线程是操作系统里的一个概念。接下来先说说两者的定义、联系与区别。 1.1 进程和线程的区别 进程 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从…

比特大陆:全员工资停发!昔日的“矿机一哥”遇现金流危机?

近日,一则关于比特大陆暂缓发放9月份全体员工部分工资的消息在网上流传。比特大陆对员工称公司营运现金流尚未转正,尤其是部矿(部署矿机进矿场)进度严重不达标,决定暂缓发放9月份全体员工部分公司,10月7日后视情况发放。 脉脉上多…

Unity基础课程之物理引擎6-关于物理材质的使用和理解

每个物体都有着不同的摩擦力。光滑的冰面摩擦力很小,而地毯表面的摩擦力则很大。另外每种材料也有着不同的弹性,橡皮表面的弹性大,硬质地面的弹性小。在Unity中这些现象都符合日常的理念。虽然从原理上讲,物体的摩擦力和弹性有着更…

利用异常实现短期hook

场景1 调用目标call 需要跳过某些判断或者函数 场景2 目标call 只需要部分指令执行 大概实现技术 设置线程上下文设置drX寄存器 实现硬件执行断点 主动调用目标call 通过硬件断点获取寄存器或修改eip 以上实现不改变crc且不通过驱动实现。只对当前执行线程有效&#xff…

ubuntu离线编译安装cmake 3.22.5(could not fonud OPENSSL) and cmake-versinon查不到版本问题

1、首先去cmake官网下载压缩包,例如: cmake-3.22.5.tar.gz 2、拉到ubuntu进行解压: tar -zxcf cmake-3.22.5.tar.gz 3、cd 进入目录 cd cmake-3.22.5 4、执行configure可执行文件 ./configure 如果在编译过程中出现报错:Could NOT findOpenSSL,原因可能是缺少ssl库 按…

第四节(1):EXCEL中判断一个WORD文件是否被打开

《VBA信息获取与处理》教程(10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网…

如何计算一个结构体的大小?(C语言)

文章目录 写在前面1. 结构体的内存对齐2. 结构体大小的计算方式(四步法)3. 修改默认对齐数4. 内存对齐的意义5. 结构体设计技巧 写在前面 我们知道C语言中各种内置类型定义的变量都是有大小的,比如 int 类型的变量占4个字节,而像…

对一个变速器原理的分析

背景 原本是朋友在调试一个看起来比较新的变速器驱动,整体来说支持两种变速模式,一种是进程级,这种用了HOOK,中规中矩的实现,原理网上都有。另一种是”系统级内核全局变速“,这个模式初步看了下有些特殊&a…

猫头虎带您了解CSDN1024城市开发者大会分会场报名指南(文末送30元优惠券)

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

全链路压测:保障系统稳定性与性能的关键措施

随着互联网应用规模的不断扩大和用户对系统性能要求的提高,全链路压测成为保障系统稳定性和性能的关键环节。本文将介绍全链路压测的概念、重要性以及实施全链路压测的步骤和最佳实践,以帮助读者更好地理解和应用全链路压测技术。 一、全链路压测的概念与…

客服支持Chatbot提供即时回答,改善用户体验

大家在网上冲浪了那么久,一定对于客户支持Chatbot都有所了解。客户支持Chatbot就像真人客服一样,可以与人进行简单的对话,并针对人们的需求给出相应的回答。虽然有时候得到的答案并不怎么靠谱吧,但是总的还是比较节省人工的&#…