社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  chatgpt

ChatGPT「秘方」竟在拖LLM后腿?Karpathy、LeCun联手开怼RLHF!

新智元 • 1 年前 • 231 次点击  



  新智元报道  

编辑:乔杨 好困
【新智元导读】RLHF到底是不是强化学习?最近,AI大佬圈因为这个讨论炸锅了。和LeCun同为质疑派的Karpathy表示:比起那种让AlphaGo在围棋中击败人类的强化学习,RLHF还差得远呢。

昨天,Andrej Karpathy又发了长推,不过用了一句很有争议的话开头——「RLHF只是勉强的RL」。

这条推特可谓「一石激起千层浪」,瞬间点燃了LLM社区的讨论热情。

毕竟RLHF作为刚提出没几年的方法,又新颖又有争议。一边遭受质疑,一边又在工业界和学界迅速流行。

5G冲浪的LeCun也赶来声援Karpathy,但他的话很短,只有一句——「RLHF不是真正的RL」。

RLHF最早可以追溯到OpenAI安全团队2017年发表的论文:

论文地址:https://arxiv.org/abs/1706.03741

当时,Jan Leike还在DeepMind、Dario Amodei还没创办Anthropic,而OpenAI还没all in语言模型,仍是一家研究范围更广泛的AI公司。

他们提出,通过人类反馈,让AI模型更好地学习「如何翻出一个漂亮的后空翻」。

训练时,AI agent在环境中不断观察并行动,并得到奖励模型的反馈进行自我改进。但比较特别的是,奖励函数是由拟合人类反馈得到的。
2019年,这项技术被用到了NLP领域,用于微调语言模型。

论文地址:https://arxiv.org/abs/1909.08593
这篇论文附带的代码也很好地定义了RLHF的标准流程。

仓库地址:https://github.com/openai/lm-human-preferences?tab=readme-ov-file
到了2022年3月,ChatGPT发布前夕,OpenAI发布了使用RLHF微调过的大模型InstructGPT,这是弥合GPT-3和GPT-3.5 Turbo之间差距的关键一步,后者为ChatGPT的推出提供了关健动力。

论文地址:https://arxiv.org/abs/2203.02155
此后,RLHF就成为了OpenAI、DeepMind、谷歌、Anthropic等AI巨头们训练模型的必备环节。
所以,Karpathy为什么会突然对此发难?我们先来看一下他的推特原文是怎么说的。
Karpathy原帖的大意如下:
RLHF全称为「从人类反馈中进行强化学习」(Reinforcement Learning from Human Feedback),是训练LLM的第三个阶段,也是最后一个主要阶段,接在预训练和监督微调(SFT)之后。
我对RLHF的批评是:它几乎算不上是真正的强化学习,而且我认为这一点没有被广泛理解。强化学习很强大,而RLHF则不然。
让我们来看一个AlphaGo的例子,它的训练用到了实际的RL算法:计算机通过下围棋,在最大化奖励函数(即赢得比赛)的推演过程中进行训练,最终超越了最优秀的人类棋手。AlphaGo并不是用RLHF训练的,否则它的效果就不会这么好。
那么,用RLHF训练AlphaGo会是什么样子呢?首先,你需要让人类标注者看到两个围棋局面,并询问他们更喜欢哪个:
你需要收集大概10万条这类的对比数据,并训练一个「奖励模型」RM(Reward Model)来模仿人类对棋盘状态的这种「直觉判断」(vibe check),使RM的判断在平均水平上与人类一致。
有了奖励模型的直觉判断,就可以在此基础上运行强化学习,让原模型学习下出能够让人类直觉上认为不错的棋步。
显然,这在围棋中不会产出太好的结果,有两个根本且独立的原因:
1. 直觉可能会产生误导。这并不是真正的奖励(赢得比赛),而是个很差的替代目标。但更糟的是——
2. 强化学习优化会失控,因为它很快就会发现对抗奖励模型的棋盘状态。RM是一个拥有数十亿参数的庞大神经网络,用来模仿直觉。有些棋盘状态超出了训练数据的分布范围,可能并不是好的状态,但由于偶然性,也会从RM得到了很高的奖励。
出于完全相同的原因,有时我惊讶于RLHF对LLM的效果,因为其中的RM也在进行同样的直觉判断。它对人类评分员似乎喜欢的那类响应打出高分,但这不是正确解决问题的「实际」目标,只是人类觉得不错的替代目标。
其次,RLHF不能运行太久,因为原模型很快就能学会操控奖励模型,从而预测出一些看起来很奇怪的token。比如,LLM助手会开始对提示词响应一些无厘头的内容,像「the the the the the the」。
这在人类看来很荒谬,但由于某种原因,RM认为这些响应看起来很棒。
这就是LLM找到的对抗性案例(adversarial examples),对于RM的训练数据而言,这是未定义领域的分布外数据。
你可以反复将这些特定例子添加到训练集中来缓解这种情况,但下次还会有其他对抗性案例出现。因此,RLHF不能运行过多步骤,几百/几千步后就必须停下,因为模型的优化过程将开始操控RM。这不是像AlphaGo那样的强化学习。
然而,在构建LLM助手时,RLHF依旧是利大于弊。其中有几个微妙的原因,但我最喜欢指出的是,LLM可以通过RLHF过程受益于生成器和判别器之间的难度差距(generator-discriminator gap)。
对于许多类型的问题,相比于从零开始撰写理想答案,人类标注者会觉得从几个候选中选择最佳答案要容易得多。比如这样的提示:「生成一首关于回形针的诗」,普通的人类标注者很难写出一首好诗作为SFT示例,但在给出几个候选答案的情况下,他们可以选出一个看起来不错的诗。
因此,RLHF相当于利用了这种人类监督的「简便性」差距。
还有其他几个原因,例如,RLHF也有助于减少幻觉现象。如果RM是一个足够强大的模型,可以捕捉到LLM的虚构内容,就能通过低奖励来惩罚这种行为,教会模型在不确定时避免冒险使用事实知识。但对幻觉及其令人满意的缓解措施是另一个话题,此处不再赘述。
总之,RLHF确实是净有用的,但它不是传统的强化学习。
迄今为止,在开放领域还没有出现生产级的「实际」RL方法,可以大规模地在LLM上实现,并给出令人信服的演示。从直观上讲,这是因为在开放式的问题解决任务中给出奖励值(等效于AlphaGo赢得比赛)确实很困难。
在一个封闭的、类似游戏的环境中,比如围棋,动态受到限制,奖励函数易于评估且无法操控。但你如何为总结一篇文章提供明确的奖励?或者回答关于pip安装的略显模糊的问题?或者讲个笑话?或者将一些Java代码重写为Python?
原则上,朝这个方向发展是可能的,但并不简单,它需要一些创造性的思考。如果有人给出令人信服的解决方案,就能运行实际的强化学习,那种让AlphaGo在围棋中击败人类的强化学习,只是最后得到的LLM将有可能在开放领域问题解决中击败人类。

强化学习到底是什么

如果RLHF「不是RL」,那真正的RL是什么?
Karpathy的描述比较简洁而直观——就是AlphaGo用的那种。
幸好,「强化学习」是一个人为提出的概念,更容易厘清;而且「强化学习之父」Richard Sutton专门写过一本书来解释这个领域的基本问题。

https://web.stanford.edu/class/psych209/Readings/SuttonBartoIPRLBook2ndEd.pdf
开头第一章第一节,强化学习的基本概念。虽然不是严谨完备的数学定义,但基本阐明了要点。
基本思想是,一个正在学习的agent与环境交互,如何捕捉到它面临的最重要的实际问题。
显然,这样的agent必须能够在某种程度上感知环境状态,且必须能够采取某种行动以影响状态。agent也必须有关于环境状态的目标。这一表述旨在包含三个方面:感知、行动和目标,以可行的最简洁的形式,而不会让任何一个方面只有平凡解。
任何适于解决这类问题的方法,我们都认为是强化学习方法。
除了agent和环境的存在,强化学习系统中还有以下四个要素:
  • 策略(policy),定义正在学习的agent在指定时间的行为
  • 奖励信号(reward signal),定义强化学习问题的目标,是对agent行为的即时反馈
  • 值函数(value function),定义长期的优化目标
  • 环境模型(model of the enviroment),模拟环境行为

那么问题来了,根据Sutton书中对强化学习的定义,你同意Karpathy的说法吗?

谁赞同,谁反对?

非常明显的是,Karpathy的观点吸引了许多LLM领域的学者和研究员的关注。
谷歌大脑、DeepMind研究科学家Kevein Murphy:
完全同意。我认为RLHF更像是行为(action)值是字符串的上下文多臂赌博机,其中提示词作为上下文,而不是完整的强化学习。但为日常任务制定明确的奖励机制是困难的部分。(我想这被称为「模型对齐」?)
Allen AI机器学习研究员Nathan Lambert回复:
同意,很棒的总结。就其提供的价值而言,下面是我最喜欢的引用,说明了RLHF的「风格」部分为何有用。
但这与为LLM解锁完整版本的RL相比,仍然微不足道。
这张图出自Lambert自己撰写的博客:
之后,他又专门发推进一步解释:
RLHF勉强算是 RL,但
- 它仍然使RL比以往任何时候都更重要,并且
- RLHF可能比至今为止其他的RL更有影响力
很罕见的是,以上是为数不多力挺Karpathy的观点。多数人还是站在了Karpathy的对立面反驳他。
评论区有网友直接回怼:「你就是看奖励函数不顺眼」。
Karpathy只能继续解释:
我的主要动机是想说,LLM远未达到原则上所能达到的高度,它们还没有像其他最近/流行的ASI演示那样有相同的训练方式。我想要直观地指出这种差距的根源。
马里兰大学副教授Furong Huang的观点更强调RLHF对LLM的价值。
当模型已经非常优秀时,RLHF是有帮助的,你只需通过收集用户反馈来「修补问题」。
RL对于推理和规划等更复杂的任务确实很重要,把LLM放到RL循环中有助于泛化和「热启动」RL。
Mila在读博士、Meta研究员Pierluca D'Oro自己就在为agent开发奖励模型,他同意Karpathy「RLHF不是真正的RL」的说法,但并不认为Karpathy预期的那种奖励模型能够实现。
我是一名科学家,致力于为智能体创建更好的奖励模型,我不同意这篇推文的主要观点。使用你无法完全信任的奖励进行的RL也是RL,而且我认为这正是我们应该研究的RL。
是的,毫无疑问,当奖励明确定义时,RL能够最大程度地发挥作用。比如围棋中的获胜条件,就是明确的!我们不在乎智能体如何获胜,只要它符合游戏规则即可。这些规则非常简单,可以由人类直接编码到智能体的设计中,或者智能体通过计算推断出来。
但是如果对于一个复杂任务,不仅仅是「做什么」重要,而是「怎么做」也很重要呢?「怎么做」往往不像在围棋中要求智能体下有效棋步那样容易实现。对于人类来说,这通常来自于人类的常识、期望或荣誉。LLM的对齐正是通过RLHF来提取这种「怎么做」。
这也可以延伸到那些看似容易定义明确目标的(智能体)任务。想要一个好的电子游戏中的NPC?可以试试正式定义一个你可以100%信任的「乐趣」的概念,祝你好运。想要一个好的网络智能体?试试正式定义一个你可以100%信任的「预期行为」的概念,祝你好运。想要一个好的分子?定义一个你可以100%信任的「毒性」的概念,祝你好运。
AI智能体旨在做对人类有益的事情。人类不仅有内部多样性,而且极其复杂,显然超出了我们能够完全理解的范围。我可以编写一个我认为是「在NetHack游戏中实现这个目标」的代码,然后发现我对「实现」的理解比智能体的定义更为细致,就像我们最近在Motif上的工作中所做的那样。
我认为追求「完美奖励」的雄心是无望的,我不认为大多数我们希望智能体表现出的行为存在这样的概念。然而,我认为有一些方法有望在奖励不完美的情况下实际提高RL的性能:
- 尽可能活跃的反馈循环,以优化智能体的奖励函数
- 对错误奖励更稳健的RL机制
- 减少人类与AI合作的摩擦
不过,我同意推文标题所说的,RLHF在用于微调LLM时几乎不能算是RL。但对我来说,这主要是因为它的半离线性质,以及智能体缺乏主动收集自身数据的机会。这些可能是RL在处理模糊、复杂,以及潜在可被利用的奖励函数时奏效的关键因素。
华盛顿大学助理教授、谷歌AI高级研究科学家Natasha Jaques的反对态度更鲜明,力挺RLHF方法:

这是一个不好的看法。在与人类互动时,给出人类喜欢的答案就是真正的目标。

超出分布不是RLHF独有的问题。数据集中的人类反馈比运行无限的围棋模拟更有限,但这并不意味着是不值得研究的方法,它只是一个更具挑战性的问题,并且我们希望它是一个更有影响力的问题,因为减少LLM的偏见对人类的益处显然多过比在围棋上击败人类。使用贬义语言称RM为「直觉判断」是愚蠢的;你可以对价值估计提出同样的论点。

发布这样的内容只会阻碍人们研究RLHF,而目前这是唯一可行的方法来缓解LLM偏见和幻觉可能造成的严重危害。

参考资料:
https://the-decoder.com/ai-researcher-says-that-chatgpts-secret-ingredient-may-be-holding-back-llm-capabilities/
https://x.com/karpathy/status/1821277264996352246 https://x.com/ylecun/status/1821478966365962255


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/173047