文章主题:关键词:ChatGPT,GPT-3.5,强化学习,RLHF,NLP,预训练模型,大规模语言模型,自然语言生成,人工标注,超参数调整,知识蒸馏。
1、前言
在整体的技术道路上,我们可以看到ChatGPT采用了GPT-3.5这种大规模语言模型(LLM)。在此基础上,ChatGPT进一步结合了强化学习,也就是RLHF(Reinforcement Learning from Human Feedback),这种方法是通过人工标注的方式来进行的。这种做法的主要目标是利用奖励惩罚机制(reward)来教导LLM模型理解和处理各种自然语言处理(NLP)任务,并使其能够判断出哪些答案是真正优质的,这涉及到三个维度:帮助性(helpfulness)、诚实性(honesty)和安全性(harmlessness)。
因此在了解ChatGPT之前,我们需要先看看什么是GPT-3以及强化学习。
1.1、GPT
在2018年6月,OpenAI发布的预训练模型GPT(即GPT-1)以其自回归的预训练方式,显示出了其在自然语言生成任务中的优越性。这一特性使得GPT不仅与BERT一样,成为了一种预训练模型,同时也源于Transformer。在这个模型中,编码器的架构采用了Transformer-Decoder,相较于Transformer,GPT在编码器的设计上做了一些改进。具体来说,原有的Decoder包含两个Multi-Head Attention结构,而GPT则只保留了Masked Multi-Head Attention,这一点在下图中有明显的展示。
GPT模型结构
与BERT模型相比,它作为一个语言模型是通过参考上下文来预测下一个单词。而Decoder采用了Masked Multi Self-Attention机制,从而屏蔽了单词后面的信息,这使得Decoder成为一个现成的语言模型。此外,由于没有使用Encoder,也就无需再关注编码器-解码器注意力机制。
GPT-2 是基于GPT模型的升级版,它在原有的基础上增加了多种任务,扩大了数据集和模型参数,并通过再次训练进一步优化。这种设计方法使得GPT-2能够处理更多的NLP任务,如机器翻译、文本摘要和领域问答等。由于这些任务都在同一个模型上进行学习,所以这个模型能够承载的不仅是任务本身,还能够处理其他通用信息,比如“汪小菲的妈是张兰”这样的信息。这种信息具有较高的通用性,可以应用于多种NLP任务,从而实现元学习,也就是利用一条信息在不同的NLP任务中都能表现出色。这就意味着,信息本身并不依赖于具体的NLP任务,而是可以泛用的。为了实现这一目标,GPT-2的参数量和训练数据都实现了爆发式增长,相较于前一代模型,其性能有了显著提升。
GPT-3的预训练过程与其他模型不同,它采用了一种两段式的方式。该过程包括两个阶段:第一阶段是利用大规模数据集对模型进行基础预训练,第二阶段则是通过下游任务的标注数据集进行微调。这种方法被绝大多数NLP模型所采用,成为了基本的任务执行流程。
GPT-3正在改变我们的认知观念。它引入了一种名为”in-context”的学习方法。在这种方法中,模型接收到的信息包括一些提示和示例。例如,当用户向GPT-3输入“请将以下中文翻译成英文:苹果 => apple;”时,模型就能根据这些提示进行学习和理解,并给出相应的翻译结果:”apple”。这种学习方式更加符合现实生活中的应用场景,使得模型的学习效果更加强大。
其中 苹果翻译成 apple,是一个示范样例,用于让模型感知该输出什么。只给提示叫做 zero-shot,给一个范例叫做 one-shot,给多个范例叫做 few-shot。在 GPT-3 的预训练阶段,也是按照这样多个任务同时学习的。比如“做数学加法,改错,翻译”同时进行。这种引导学习的方式,在超大模型上展示了惊人的效果:只需要给出一个或者几个示范样例,模型就能照猫画虎地给出正确答案。但是这里需要超大模型才行得通,如下图所示:
可以看出,这种引导学习的方式,在超大模型上展示了惊人的效果:只需要给出一个或者几个示范样例,模型就能照猫画虎地给出正确答案。
下表是三代GPT之间参数量的比较。
模型数据量参数量GPT-1约 5GB1.17亿GPT-240GB15亿GPT-345TB1750亿
1.2、强化学习
强化学习是一种和有监督、无监督学习并行的概念。用游戏比较好理解,有代理(游戏角色)、环境、目标、行动、反馈这些基本要素。它会在给定的环境中,不断地根据环境的惩罚和奖励(reward),拟合到一个最适应环境的状态,是一种通过试错来进行学习的模型。
之前的研究中一直没有在NLP+强化学习上取得好的效果,主要是因为NLP 所依赖的环境,是整个现实世界,整个宇宙万物,都可以被语言描述,也就都需要针对模型输出的质量进行 reward 评价,它完全无法设计反馈惩罚和奖励函数。除非人们一点点地人工反馈。
下面说到今天的主角,ChatGPT正是openAI不计成本进行大量人工标注将GPT和强化学习结合起来得到的产物,具体方法分为以下三个阶段。
以下对ChatGPT的介绍主要来源自instructGPT的论文,ChatGPT是改进的instructGPT,改进点主要在收集标注数据方法上有些区别,在其它方面,包括在模型结构和训练流程等方面基本遵循instructGPT。
2、Chatgpt的三个阶段
2.1、冷启动阶段
该阶段的输入是从测试用户提交的prompt(就是指令或问题)中随机抽取的一批数据,其例子如下所示:
Prompt例子
其方法概括来讲,就是以下两个部分,如下图所示:
对抽取的prompt数据人工进行高质量回答,获得<prompt,answer>数据对。通过高质量回答fine-turn gpt-3.5模型,在第一阶段帮助模型更好地理解输入指令。
这样,一个基本的 GPT-3.5语言模型就被学习成了这里的 SFT 模型。
chatgpt第一阶段
2.2、训练回报模型阶段(RM)
训练回报模型(RM) ,如下图所示,其方法概括为如下两部分
用上一阶段fine-turn好的SFT模型(使用和第一阶段几乎相同的prompt)生成k个回答(这里需要注意,对于同一个问题,GPT和SFT模型生成的答案是多样的,每一次提问都会有不同的答案),人工标注排名顺序用排序结果训练数据对<prompt,answer>
chatgpt第二阶段
我们希望被判定更好的输出得到的奖励数值要更高。由此,奖励模型可以通过最小化下面这样的损失函数来得到。对于一对训练数据<answer1,answer2>,我们假设人工排序中answer1排在answer2前面,那么Loss函数则鼓励RM模型对<prompt,answer1>的打分要比<prompt,answer2>的打分要高。
第二阶段损失函数
2.3、强化学习微调阶段
这一步数据集规模更大一些且和第一二阶段不同,且不再需要人工。其方法可以概括为以下四个部分:
由第一阶段的监督模型初始化PPO模型的参数PPO模型生成回答用第二阶段RM模型对回答进行评估和打分通过打分,更新训练PPO模型参数
chatGPT第三阶段
这一步的训练过程中,还不仅仅使用强化学习的优化目标。还使用了下面的两个正则项来约束模型的表现。我们需要在训练的过程中最大化下面的函数,当γ≠0时,模型变为PPO-ptx(加上该部分是因为仅仅使用RL来学习可能会使得模型在很多NLP任务性能上下降)。
第三阶段函数
总结一下:RLHF用于第一二阶段,首先通过人工标注微调gpt模型得到SFT模型,用SFT模型生成k个回答人工排序,训练RM模型。第三阶段,把SFT模型参数拿来,用RM模型获得的reward进行训练,得到ppo和ppo-ptx模型。
3、实验与模型的衡量
3.1、helpful
helpful——是否可以推断用户意图 测试方法是标注员在待测试模型的输出和 SFT 模型的输出中选择一个更好的。如果得分为 0.5 则表示该模型和 SFT 相比性能差不多。下图左侧为GPT提供prompt,右侧即为instructGPT提供的prompt测试得到的结果。可以看出ppo和ppo-ptx模型相对于其它模型取得了更好的效果。
helpful评判结果
3.2、honest
方法是在模型前加上如下这样的 instruction prompt,提示模型该小心什么问题,该怎样回答。
instruction prompt例子
结果如下,右图即为加上instruction的效果。其中灰色代表可信度,有颜色的即代表同时可信和包含信息量的额比率:
honest结果
3.3、harmless
方法也是加上instruction,从而减少模型产生有害/不礼貌/带有偏见的回答,效果如下所示:
harmless结果
可以看出,ppo和ppo-ptx模型在三个H的评判指标下都取得了不错的结果。
4、问题与总结
4.1、模型优点
相对于自回归模型,reward有更细致的处罚信号,比如如果下一token是great,AR loss会给amazing和sandwich相同的处罚offline模式,使得RM模型生成更合适的反馈。RM模型更直接获取偏好 直接根据偏好进行打分好的句子就是高的反馈运用数据更具有效率 SFT需要人来生成目标,在我们训练RM的时候,就可以用来为输出打分了
4.2、挑战与问题
高效引入新的知识困难,因为它是通过在GPT大模型上大量添加人工标注数据进行训练,重新训练的成本太大,而如果通过fine-turn对引入的新知识进行调整,可能会产生对于之前的知识灾难性遗忘的问题。
对于同一问题可能产生不同答案,且有可能会生成看似合理但实际完全错误的答案,不好判断。
4.3、一些思考
个人认为,ChatGPT最主要的贡献是还是证明了大力出奇迹,以及NLP+强化学习的方式能够取得很好的表现。过去的做对话的思路都是分出各个子任务逐个击破,再加以整合。而ChatGPT的成功则说明,不用考虑琐碎的细节,大模型大数据能够取得更好的效果。当然,这对于像我这样的nlp初学者来说,可能确实没有什么可以借鉴的地方。但是它取得的效果也确实足够令人激动。
以上是本人在学习和了解过程中的一些总结和思考,可能有一些不到位的地方,欢迎各位大佬讨论指正。
参考链接:
1.https://arxiv.org/pdf/2203.02155.pdf——InstructGPT
2.【强化学习 229】ChatGPT/InstructGPT – 知乎 (zhihu.com)
3.一文读懂ChatGPT模型原理 – 知乎 (zhihu.com)
4.ChatGPT会取代搜索引擎吗 – 知乎 (zhihu.com)
AI时代,拥有个人微信机器人AI助手!AI时代不落人后!
免费ChatGPT问答,办公、写作、生活好得力助手!
搜索微信号aigc666aigc999或上边扫码,即可拥有个人AI助手!