发布时间:2023-03-24 文章分类:电脑基础 投稿人:樱花 字号: 默认 | | 超大 打印

写在最前面,23年2.27日起,我个人和十来位博士朋友精读100篇ChatGPT相关技术的论文(每天一篇,100天读完100篇,这100篇的论文清单见此文),过程中几乎每天都会不断优化本文,优化记录见本文文末的“后记”中..

前言

自从我那篇Transformer通俗笔记一经发布,然后就不断改、不断找人寻求反馈、不断改,其中一位朋友倪老师(之前我司NLP高级班学员现课程助教老师之一)在谬赞Transformer笔记无懈可击的同时,给我建议到,“后面估计可以尝试尝试在BERT的基础上,讲一讲prompt学习了”

再然后,当我还在各种改Transformer笔记的时候,12月初突然出来了一个ChatGPT刷爆朋友圈,即便很多之前不接触AI的朋友也在问ChatGPT这种类似聊天机器人却远胜一般聊天机器人各种问题(上一次出现这种盛况的还是16年的AlphaGo)。

据我观察,大家问ChatGPT的问题千奇百怪

所以ChatGPT就相当于你写代码或各类问题的私人顾问,而这个私人顾问能瞬间、精准理解你的意图,不会让你像用以前那种聊天机器人经常觉得智障甚至对牛弹琴,加之其背后依托的是人类级百科全书式的资料库,所以有人惊呼:ChatGPT会不会替代Google这类搜索引擎。

虽然大部分技术者对待ChatGPT还是比较冷静的,毕竟它给的答案不像权威技术专家那样具备足够的公信力,也不像Google给出来源从而不能比较好的验证其正确程度,但最近遇到的几件事改变了我的一些看法

  1. 这两天我刷到一条新闻:微软欲用 ChatGPT 扶必应“上位”,对抗 Google,导致即便很多技术从业者也不一定淡定了
  2. ChatGPT直接让其所在的公司OpenAI估值翻倍,而我司七月在线的最新一期NLP大课,NLP11也加入了ChatGPT的原理解析
  3. 目前关于ChatGPT中文的资料里,真正能让人一看就懂的非常非常少,当少数文章具备比较好的可读性之后,你又会发现一旦涉及算法细节就千篇一律的泛泛而谈,如果不是泛泛而谈的,则更多堆砌概念和公式
    总之中文资料里,可能因为instructGPT/ChatGPT刚出来不久的缘故,兼顾可读性和细节性的文章少的可怜

考虑到ChatGPT非一蹴而就,而是经过了各个前置技术的发展、迭代、结合而成,故逐一阐述

关于RL所需的微积分/概率统计基础修订在了《概率统计极简入门:通俗理解微积分/期望方差/正态分布前世今生(23修订版)》

关于RL所需的最优化基础修订在了《一文通透优化算法:从梯度下降、SGD到牛顿法、共轭梯度(23修订版)》

关于RL、策略梯度、TRPO、PPO则写在了此文《强化学习极简入门:通俗理解MDP、DP MC TC和值函数、策略梯度、PPO》
且在这篇RL极简入门笔记之前,99%的文章都不会把PPO算法从头推到尾,该文把PPO从零推到尾,按照“RL-策略梯度-重要性采样(重要性权重)-增加基线(避免奖励总为正)-TRPO(加进KL散度约束)-PPO(解决TRPO计算量大的问题)”的顺序逐步介绍每一步推导

如你所见,自从1.6日开始写ChatGPT笔记,1.15日发布本文,但为把ChatGPT背后所涉及的关键技术阐述细致、透彻,故本文越写越长,长到最后成了一个系列,有的内容抽离出去独立成文,有的还在不断完善

第一部分 从RL、策略梯度到TRPO、PPO算法、RLHF

再次强调说明下,本第一部分在23年2.10日有个重要修改

综上,为兼顾两者,且加之为避免本文篇幅过长而影响完读率,故把下面原先第一部分的大部分内容抽取出来放到了新一篇RL笔记里进一步细致阐述:强化学习极简入门:通俗理解MDP、DP MC TC和Q学习、策略梯度、PPO

第一部分 RL基础:什么是RL与MRP、MDP
1.1 入门强化学习所需掌握的基本概念

  • 1.1.1 什么是强化学习:依据策略执行动作-感知状态-得到奖励
  • 1.1.2 RL与监督学习的区别和RL方法的分类

1.2 什么是马尔科夫决策过程

  • 1.2.1 MDP的前置知识:随机过程、马尔可夫过程、马尔可夫奖励
  • 1.2.2 马尔可夫决策过程(MDP):马尔可夫奖励(MRP) + 智能体动作因素

第二部分 RL进阶之三大表格求解法:DP、MC、TD
2.1 动态规划法

  • 2.1.1 什么是动态规划
  • 2.1.2 通过动态规划法求解最优策略

2.2 蒙特卡洛法
2.3 时序差分法及与DP、MC的区别

第三部分 价值学习:从n步Sarsa算法到Q-learning、DQN
3.1 TD(0)控制/Sarsa(0)算法与TD(n)控制/n步Sarsa算法
3.2 Q-learning

  • 3.2.1 重要性采样:让同策略完成到异策略的转变
  • 3.2.2 Sarsa算法与Q-learning更新规则的对比

3.3 DQN

第四部分 策略学习:从策略梯度、Actor-Criti到TRPO、PPO算法
4.1 策略梯度与其突出问题:采样效率低下

  • 4.1.1 什么是策略梯度和梯度计算/更新的流程
  • 4.1.2 避免采样的数据仅能用一次:重要性采样(为采样q解决p从而增加重要性权重)

4.2 优势演员-评论家算法(Advantage Actor-Criti):为避免奖励总为正增加基线
4.3 基于信任区域的TRPO:加进KL散度解决两个分布相差大或步长难以确定的问题

1.4 近端策略优化PPO:解决TRPO的计算量大的问题

如上所述,PPO算法是针对TRPO计算量的大的问题提出来的,正因为PPO基于TRPO的基础上改进,故PPO也解决了策略梯度不好确定学习率Learning rate (或步长Step size) 的问题

毕竟通过上文,我们已经得知

  1. 如果 step size 过大, 学出来的 Policy 会一直乱动,不会收敛;但如果 Step Size 太小,想完成训练,我们会等到地老天荒
  2. 而PPO 利用 New Policy 和 Old Policy 的比例,限制了 New Policy 的更新幅度,让策略梯度对稍微大点的 Step size 不那么敏感

具体做法是,PPO算法有两个主要的变种:近端策略优化惩罚(PPO-penalty)和近端策略优化裁剪(PPO-clip),其中PPO-penalty和TRPO一样也用上了KL散度约束。

近端策略优化惩罚PPO-penalty的流程如下

  1. 首先,明确目标函数,咱们需要优化ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,让其最大化

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

    『注:如果你想仔细抠接下来各种公式但一上来就被上面这个弄迷糊了,说明还是需要先看下上文说过的这篇RL极简入门,而一旦踏入RL,便得做好两万五千里的准备,当然,如果只是想了解ChatGPT背后大概的技术原理,可以不用细抠PPO的公式怎么来的,不影响你对ChatGPT整体架构的理解,且下文会讲其在ChatGPT中是如何运用的』

  2. 接下来,先初始化一个策略的参数ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,在每一个迭代里面,我们用前一个训练的迭代得到的actor的参数ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT与环境交互,采样到大量状态-动作对, 根据ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT交互的结果,估测ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

  3. 由于目标函数牵涉到重要性采样,而在做重要性采样的时候,ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT不能与ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT相差太多,所以需要在训练的时候加个约束,这个约束就好像正则化的项一样,是 ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT与 ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT输出动作的 KL散度,用于衡量 ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT 与 ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT 的相似程度,我们希望在训练的过程中,学习出的 ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT 与 ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT 越相似越好
    所以需要最后使用 PPO 的优化公式:ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

    当然,也可以把上述那两个公式合二为一『如此可以更直观的看出,PPO-penalty把KL散度约束作为惩罚项放在了目标函数中(可用梯度上升的方法去最大化它),此举相对TRPO减少了计算量』

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

上述流程有一个细节并没有讲到,即ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT是怎么取值的呢,事实上,ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT是可以动态调整的,故称之为自适应KL惩罚(adaptive KL penalty),具体而言

总之,近端策略优化惩罚可表示为

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

当然,如果觉得计算 KL散度很复杂,则还有一个PPO2算法,即近端策略优化裁剪PPO-clip,详见RL极简入门一文

1.5 模仿学习(逆强化学习)思路下的RLHF:从人类反馈中学习

1.5.1 什么是模仿学习(逆强化学习)

虽然RL理论上虽不需要大量标注数据,但实际上它所需求的reward会存在缺陷:

  1. 比如游戏AI中,reward的制定非常困难,可能要制定成百上千条游戏规则,这并不比标注大量数据来得容易,又比如自动驾驶的多步决策(sequential decision)场景中,学习器很难频繁地获得reward,容易累计误差导致一些严重的事故

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

  2. 再比如聊天机器人方面,不好定义什么是好的对话、什么是不好的对话,当然,对此可以收集很多人类的对话当做范例,如此,模仿学习思路下的基于人来偏好的深度强化学习(对应论文为:Deep Reinforcement Learning from Human Preferences 2017,简称RLHF)应运而生
    RLHF试图解决的问题是,在奖励函数不够明确的情况下,通过基于人类对事物比较的偏好而非绝对奖励值训练奖励函数

模仿学习的思路是不让模型在人类制定的规则下自己学习,而是让模型模仿人类的行为。而逆强化学习就是模仿学习的其中一种,何谓逆强化学习呢?

1.5.2 RLHF:基于人类偏好的深度强化学习

实际上,RLHF(Reinforcement Learning with Human Feedback)这一概念最早被定义为基于人类反馈的强化学习,它最早是在2008年《TAMER:Training an Agent Manually via Evaluative Reinforcement》一文中被提及的

在2017年前后,深度强化学习(Deep Reinforcement Learning)逐渐发展并流行起来,如你所见,2017年6月由OpenAI联合Google DeepMind一块推出:基于人类偏好的深度强化学习《Deep Reinforcement Learning from Human Preferences》,也简称RLHF

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

当让一个强化学习智能体探索环境并与之交互(比如Atari游戏),RLHF的核心步骤如下图所示:

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

  1. 首先,智能体的一对1-2秒的行为片段定期地回馈给人类操作员,人类基于偏好对智能体的行为作出某种偏好性的选择评判
  2. 接着,人类这种基于偏好的选择评判被预测器(reward predictor)来预测奖励函数
  3. 智能体通过预测器预测出的奖励函数作出更优的行为(毕竟智能体要最大化奖励嘛)

再之后,OpenAI团队通过下述两篇论文进一步阐述了RLHF

第二部分 从GPT/GPT2/GPT3到GPT3.5/GPT4:微调到prompt学习的过渡

2.1 GPT:基于Transformer Decoder预训练 + 微调/Finetune

NLP自发展以来,先后经历了4种任务处理范式

  1. 第一种范式,非神经网络时代的完全监督学习(Fully Supervised Learning, Non-Neural Network)
    具体而言,即手工设计一系列特征模板,来输入模型。模型对任务的处理结果高度依赖于特征模板的设计,同时也高度依赖领域专家的知识。举个例子,比如对于条件随机场CRF模型,业界甚至有一个专门的库CRF++帮助自动生成大量的随机模板然后输入模型进行训练,从而避免对领域专家的过度依赖
  2. 第二范式,基于神经网络的完全监督学习(Fully Supervised Learning, Neural Network)
    神经网络学派开始流行以后,处理范式基本基本是预训练后的词嵌入表征 + 模型架构的调整,在这个时期,一方面的工作在词嵌入上,比如NNLM/CBOW/SKIP/GRAM/GLOVE/ELMO等,另一方面的工作则在模型架构上,比如BI-LSTM/SEQ2SEQ架构在神经机器翻译领域NMT的应用等
  3. 第三范式,预训练-微调范式 (Pre-train、Fine-tune)
    相比于第二范式而言,第三范式的优点在于更进一步减少了人工的参与,不再需要对于每个任务采取不同的模型架构,而是在超大的文本数据集上预训练一个具备泛化能力的通用的模型,然后再根据下游任务本身的特点对模型进行针对性的微调即可,使得一个模型解决多种任务成为可能,比如GPT1模型
  4. 第四范式,预训练、提示、预测范式(Pre-train、Prompt、Predict)
    在这个过程我们往往不对预训练语言模型改动太多,我们希望是通过对合适prompt的利用将下游任务建模的方式重新定义,这则是GPT2、GPT3的特点

2.1.1 GPT = Multi-Head Attention层 + Feed forward层 + 求和与归一化的前置LN层 + 残差

GPT由openAI在2018年通过此论文“Improving Language Understanding by Generative Pre-Training”提出,在GPT 被提出之前

  1. 大多数深度学习方法都需要大量人工标注的高质量数据,但是标注数据的代价是巨大的
    故如何利用容易获取的大规模无标注数据来为模型的训练提供指导成为亟待解决的第一个问题
  2. 另外NLP领域中有许多任务依赖于自然语言在隐含空间中的表征,不同任务对应的表征很可能是不同的,这使得根据一种任务数据学习到的模型很难泛化到其他任务上
    因此如何将从大规模无标注数据上学习到的表征应用到不同的下游任务成为亟待解决的第二个问题

在上一篇Transformer笔记中,我们已经了解到:GPT是“Generative Pre-Training Transformer”的简称,从名字看其含义是指的生成式的预训练,它和BERT都是(无监督)预训练-(监督)微调模式的典型代表

由于Decoder具备文本生成能力,故作为侧重生成式任务的GPT选择了Transformer Decoder部分作为核心架构

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

不过,与原始的Transformer Decoder相比,GPT所用的结构删除了Encoder-Decoder Attention,只保留了多头注意力层Multi-Head Attention层和前馈神经网络Feed forward层,最后再加上求和与归一化的前置LN层 + 残差
通过这样的结构,GPT便可以利用无标注的自然语言数据进行训练:根据给定的前ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT个token,预测第 ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT 个token,训练过程中使用的是基于最大似然估计的损失函数,即让模型预测的概率分布尽可能接近实际下一个单词的分布

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

其中的关键便是这个Self-Attention,模型通过自注意力机制可以学习序列中不同位置之间的依赖关系,即在处理每个位置的信息时,模型会考虑序列中和该位置的信息有关联的其他所有位置上的信息,这种机制使得模型能够有效地处理长距离依赖关系

2.1.2 什么是Self-Attention与Masked Self-Attention

所谓自注意力,即指当我们需要用到自注意力编码单词ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT的时候,会按下面几个步骤依次处理(配图来自此文)

  1. 为每个单词路径创建Query、Key、Value,具体做法就是每个单词的表示向量和对应的权重矩阵(ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT)做矩阵乘法

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

  2. 对于每个输入token,使用其Query向量对其他所有的token的Key向量进行评分,获得注意力分数,比如通过ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPTChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT向量,分别与ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPTChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT向量分别做点乘,最终得到ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT在各个单词ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT上的注意力分数:20% 10% 50% 20%

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

  3. 将Value向量乘以上一步得到的注意力分数(相当于对当下单词而言,不同单词重要性的权重),之后加起来,从而获得所有token的加权和

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

之后对每个token都进行上述同样的三步操作,最终会得到每个token新的表示向量,新向量中包含该token的上下文信息,之后再将这些数据传给Transformer组件的下一个子层:前馈神经网络

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

至于所谓Masked Self-Attention就是在处理当前词的时候看不到后面的词。举个例子,处理“it”的时候,注意力机制看不到“it”后面的词(通过将“it”后面的词的权重设置为一个非常大的负数,进一步softmax之后变为0,从而屏蔽掉),但会关注到“it”前面词中的“a robot”,继而注意力会计算三个词“it”、“a”、“robot”的向量及其attention分数的加权和

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

更多细节可以看下上篇BERT笔记(特别是此前还不了解Transformer的),或此文:图解注意力机制

2.2 GPT2承1启3:基于prompt尝试舍弃微调 直接Zero-shot Learning

虽然GPT1的预训练加微调的范式仅需要少量的微调和些许的架构改动,但能不能有一种模型完全不需要对下游任务进行适配就可以表现优异?GPT2便是在往这个方向努力:不微调但给模型一定的参考样例以帮助模型推断如何根据任务输入生成相应的任务输出

最终,针对小样本/零样本的N-shot Learning应运而生,分为如下三种

此外,只需将自然语言的任务示例和提示信息作为上下文输入给GPT-2,它就可以在小样本的情况下执行任何NLP任务,包括所谓的完形填空任务,比如

假如我要判断“我喜欢这个电影" 这句话的情感(“正面" 或者 "负面"),原有的任务形式是把他看成一个分类问题

输入:我喜欢这个电影

输出:“正面" 或者 "负面"

而如果用GPT2去解决的话,任务可以变成“完形填空",

输入:我喜欢这个电影,整体上来看,这是一个 __ 的电影

输出:“有趣的" 或者 "无聊的"

加的这句提示“整体上来看,这是一个 __ 的电影”对于让模型输出人类期望的输出有很大的帮助。

这个所谓的提示用NLP的术语表达就是prompt,即给预训练语言模型的一个线索/提示,帮助它可以更好的理解人类的问题
例如有人忘记了某篇古诗,我们给予特定的提示,他就可以想起来,例如当有人说:

白日依山尽

大家自然而然地会想起来下一句诗:黄河入海流

亦或者,搜索引擎,可以根据我们的输入,进行输出的提示:

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

2.3 GPT3:In-context learning正式开启prompt新范式(小样本学习)

2.3.1 GPT3在0样本、单样本、小样本下的突出能力

GPT3简单来说,就是规模大、有钱多金、效果出奇好,具体而言,它的参数规模达到了1750亿,并且使用45TB数据进行训练,其预训练任务就是“句子接龙”,给定前文持续预测下一个字,而且更为关键的是,在小样本的情况下,其性能表现一度超越SOTA模型

为形象描述,举一个GPT3在0样本、单样本、少量样本下的机器翻译使用范例,如下图

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

2.3.2 In Context Learning(ICL)背后的玄机:隐性微调?

零样本下 模型没法通过样本去学习/修正,但即便是少样本下,也有工作试图证明In Context Learning并没有从样本中学习,比如“Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?”,它发现了:

  1. 在提供给LLM的样本示例ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT中,ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT是否是ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT对应的正确答案其实并不重要,如果我们把正确答案ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT替换成随机的另外一个答案 ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,这并不影响In Context Learning的效果

    比如下图中,无论是分类任务(图中上部分),还是多项选择任务(图中下部分),随机标注设置下(红)模型表现均和正确标注(黄)表现相当,且明显超过没有in-context样本的zero-shot设置(蓝)

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

    这起码说明了一点:In Context Learning并没有提供给LLM那个从ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT映射到 ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT 的映射函数信息:ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,否则的话你乱换正确标签,肯定会扰乱这个 ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT映射函数,也就是说,In Context Learning并未学习这个输入空间到输出空间的映射过程

  2. 真正对In Context Learning影响比较大的是:ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPTChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT的分布,也就是输入文本 ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT 的分布和候选答案 ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT 有哪些,如果你改变这两个分布,比如把 ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT 替换成候选答案之外的内容,则In Context Learning效果急剧下降
    总之,这个工作证明了In Context Learning并未学习映射函数,但是输入和输出的分布很重要,这两个不能乱改

有些工作认为LLM还是从给出的示例学习了这个映射函数ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,不过是种隐式地学习

2.4 Prompt技术的升级与创新:指令微调技术(IFT)与思维链技术(CoT)

2.4.2 Google提出FLAN大模型:基于指令微调技术Instruction Fine-Tuning (IFT)

OpenAI的GPT3虽然不再微调模型(pre-training + prompt),但Google依然坚持预训练 + 微调的模式

2021年9月,谷歌的研究者们在此篇论文中《Finetuned Language Models Are Zero-Shot Learners》提出了基于Instruction Fine-Tuning(指令微调,简称IFT)的FLAN大模型,极大地提升了大语言模型的理解能力与多任务能力,且其在很多任务上的零样本学习能力超过GPT3(毕竟指令微调的目标之一即是致力于improving zero-shot generalization to tasks that were not seen in training),最终达到的效果就是:遵循人类指令,举一反三地完成任务

有两点值得注意的是

  1. 根据论文中的这句话:“FLAN is the instruction-tuned version of LaMDA-PT”,可知指令微调的是LaMDA,而LaMDA是Google在21年5月对外宣布内部正在研发的对话模型
  2. 论文中也解释了取名为FLAN的缘由

    We take a pretrained language model of 137B parameters and perform instruction tuning—finetuning the model on a mixture of more than 60 NLP datasets expressed via natural language instructions.

    We refer to this resulting model as FLAN, for Finetuned Language Net

至于IFT的数据通常是由人工手写指令和语言模型引导的指令实例的集合,这些指令数据由三个主要组成部分组成:指令、输入和输出,对于给定的指令,可以有多个输入和输出实例

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

相比于GPT-3,且区别在于Finetune,FLAN的核心思想是,当面对给定的任务A时,首先将模型在大量的其他不同类型的任务比如B、C、D...上进行微调,微调的方式是将任务的指令与数据进行拼接(可以理解为一种Prompt),随后给出任务A的指令,直接进行推断,如下图所示

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

例如,我们的最终目标是推理任务

  1. FLAN首先讲语言模型在其他任务上进行微调,包括给定任务指令的翻译、常识推理、情感分类等
    在面对翻译任务时可以给出指令“请把这句话翻译成西班牙语”
    在面对常识推理任务时可以给出指令“请预测下面可能发生的情况”
  2. 而当模型根据这些“指令”完成了微调阶段的各种任务后(将指令拼接在微调数据的前面),在面对从未见过的自然语言推理任务的指令比如:“这段话能从假设中推导出来吗?” 时,就能更好地调动出已有的知识回答问题

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

相当于通过指令微调之后,模型可以更好的做之前预训练时没见过的新任务且降低了对prompt的敏感度(某些场景下不一定非得设计特定prompt才能激发模型更好的回答)

这或许也启发了OpenAI重新注意到了微调这一模式(毕竟如上文所述,原本GPT3在预训练之后已彻底放弃再微调模型),从而在InstructGPT中针对GPT3做Supervised fine-tuning(简称SFT,某种意义上可以认为是做指令微调)

2.4.1 基于思维链(Chain-of-thought)技术下的prompt

为让大语言模型进一步具备解决数学推理问题的能力,22年1月,谷歌大脑团队的Jason Wei、Xuezhi Wang等人提出了最新的Prompting机制——Chain of Thought(简称CoT),简言之就是给模型推理步骤的prompt,让其学习人类如何一步步思考/推理,从而让模型具备基本的推理能力,最终可以求解一些简单甚至相对复杂的数学推理能力

以下是一个示例(下图左侧为standard prompting,下图右侧为基于Cot的prompt,高亮部分为chain-of-thought),模型在引入基于Cot技术的prompt的引导下,一步一步算出了正确答案,有没有一种眼前一亮的感觉?相当于模型具备了逻辑推理能力

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

那效果如何呢,作者对比了标准prompting、基于Cot技术的prompting分别在这三个大语言模型LaMDA、GPT、PaLM(除了GPT由openAI发布,另外两个均由Google发布)上的测试结果,测试发现:具有540B参数的PaLM模型可以在一个代表小学水平的数学推理问题集GSM8K(GSM8K最初由OpenAI于2021年10月提出)上的准确率达到了60.1%左右

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

很快,这项技术引起了很多人的关注,比如不论是few-shot还是zero-shot,在加入Cot技术之后,都能回答此前不能回答的某些数学推理问题,甚至出现了风靡一时的“let's think step by step”的梗(通过该条语句可以激发模型的推理能力)

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

2.5 GPT3到GPT3.5:从InstructGPT到ChatGPT初版的迭代过程

据OpenAI官网对GPT3.5的介绍,GPT3.5从2021年第四季度开始就混合使用文本和代码进行训练,我们来看下GPT3.5的各个系列模型及其各自的发展演变脉络图

基于GPT3的发展路线:一条是侧重代码/推理的Codex,一条侧重理解人类的instructGPT

基于GPT3.5的发展路线:增强代码/推理能力且更懂人类终于迭代出ChatGPT

2.6 ChatGPT初版与InstructGPT的差别:基于GPT3还是GPT3.5微调

通过OpenAI公布的ChatGPT训练图可知,ChatGPT的训练流程与InstructGPT是一致的,差异只在于

2.7 ChatGPT改进版:底层语言模型从GPT3.5升级到GPT4

23年3月14日(国内3.15凌晨),OpenAI正式对外发布自从22年8月份便开始训练的GPT4,之前订阅ChatGPT plus版的可以直接体验GPT4

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

根据OpenAI官网发布的《GPT-4 Technical Report》可知 

  1. gpt-4 has a context length of 8,192 tokens. We are also providing limited access to our 32,768–context (about 50 pages of text,约25000个字) version
  2. GPT-4经过预训练之后,再通过RLHF的方法微调(具体怎么微调,下文第三部分详述)
    “GPT-4 is a Transformer-style model pre-trained to predict the next token in a document, using both publicly available data (such as internet data) and data licensed from third-party providers. The model was then fine-tuned using Reinforcement Learning from Human Feedback (RLHF)”

    RLHF的作用在于
    对于某些特定任务,The GPT-4 base model is only slightly better at this task than GPT-3.5; however, after RLHF post-training we observe large improvements over GPT-3.5

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

  3. RLHF之外,为了进一步让模型输出安全的回答,过程中还提出了基于规则的奖励模型RBRMs(rule-based reward models),奖励规则由人编写
    RBRMs相当于是零样本下GPT-4的决策依据或者分类器
    这些分类器在RLHF微调期间为GPT-4策略模型提供了额外的奖励信号,以生成正确回答为目标,从而拒绝生成有害内容,说白了,额外增加RBRMs就是为了让模型的输出更安全

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

  4. 经过测试,GPT4在遵循人类指令上表现的更好(同样指令下,输出更符合人类预期的回答),且在常识性推理、解题等多项任务上的表现均超过GPT3和对应的SOTA
  5. 具备了多模态的能力,可以接受图片形式的输入(图片输入接口暂未开放),并按指令读图

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

此外,通过GPT4的技术报告第60页可知,其训练方式和基于GPT3的instructGPT或基于GPT3.5的ChatGPT初版的训练方式如出一辙

先收集数据

  • 一部分是人工标注问题-答案对:We collect demonstration data (given an input, demonstrating how the model should respond)
  • 一部分是基于人类偏好对模型输出的多个答案进行排序的数据:ranking data on outputs from our models (given an input and several outputs, rank the outputs from best to worst) from human trainers

接下来三个步骤(具体下文第三部分详述)

  1. 通过人工标注的数据(问题-答案对)监督微调GPT4
    We use the demonstration data to finetune GPT-4 using supervised learning (SFT) to imitate the behavior in the demonstrations.
  2. 通过对模型多个回答进行人工排序的数据训练一个奖励模型,这个奖励模型相当于是模型输出好坏的裁判
    We use the ranking data to train a reward model (RM), which predicts the average labeler’s preference for a given output
  3. 通过最大化奖励函数的目标下,通过PPO算法继续微调GPT4模型
    and use this signal as a reward to fine-tune the GPT-4 SFT model using reinforcement learning (specifically, the PPO algorithm)

至于GPT4背后多模态的能力起源与发展历史,23年4月将新启一篇博客:详述DTER、DDPM、Vision Transformer、CLIP、Swin Transformer、DALL·E 2、Stable Diffusion、BEiT-3、Visual ChatGPT、GPT4等..

第三部分 InstructGPT/ChatGPT训练三阶段及多轮对话能力

3.1 基于GPT3的InstructGPT训练三阶段

3.1.1 ChatGPT初版的前身之InstructGPT:基于RLHF手段微调的GPT

根据InstructGPT的原始论文可知,InstructGPT的训练分为三个阶段(总体上结合了:无监督预训练、有监督微调、强化学习(RLHF),先是有监督微调“经过无监督预训练好的GPT”,然后基于人类偏好训练一个奖励模型,最终在最大化奖励的目标下通过PPO算法来优化策略):

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

  1. 阶段1:利用人类的问答数据去对GPT3进行有监督训练出SFT模型(作为baseline)
    首先,OpenAI是先设计了一个prompt dataset,里面有大量的提示样本,给出了各种各样的任务描述,其次,找了一个团队对这个prompt dataset进行标注(本质就是人工回答问题)

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

    最后,用这个13k大小的标注好的数据集(问题-答案对)比如ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT微调GPT3,这个微调好的GPT3我们称之为SFT模型(SFT的全称Supervised fine-tuning,监督微调之意),它作为baseline具备了最基本的预测能力(该基线模型的大小为175B)

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT  说白了,让人类就一些问题写出人工答案,再把这些问题和答案丢给模型学习,这便是有监督训练,但人类不可能针对所有问题都写出答案给到模型(如果人类能把所有问题都标注/回答了,那还要模型干嘛,^_^)
    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT  所以我们需要让模型学到人类的喜爱偏好(训练出一个RM模型代替人类当裁判,避免让实验人员守在电脑前对模型吐出来的结果不停地打分)
    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT  继而在遵循这种喜爱偏好下生成人类期待的答案,想达到这个效果就是得让模型明确什么是更好的输出,怎么明确?通过奖惩! 

  2. 阶段2:通过RLHF的思路训练一个奖励模型RM
    首先通过『移除了最后一层unembedding layer的上一阶段的SFT模型』初始化出我们的RM模型,且最后大小缩减到6B
    然后回答一个规模大小为33k的数据集的一些问题比如ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,接着针对每个问题收集4个不同的输出从而获取4个回答ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT
    可能有的读者会疑问为何有多个输出,原因在于模型每次预测一个词都有对应的概率,根据不同的概率大小可以采样出很多答案,比如通过beam search保留k个当前最优的答案(beam search相当于贪心算法的加强版,除了最好的答案外,还会保留多个比较好的答案供选择)

    接着人工对这4个回答的好坏进行标注且排序,排序的结果用来训练一个奖励模型RM,具体做法就是学习排序结果从而理解人类的偏好
    但通过人来标注/排序的结果训练出奖励模型之后怎么用呢,这就是训练阶段3要做的事情

  3. 阶段3:通过训练好的RM模型预测结果且通过PPO算法优化模型策略
    首先,让第一阶段微调好的SFT模型初始化出一个PPO模型
    通过论文第56页得知,一开始We experimented with a few variants of the SFT models as the PPO’s init model,最终把该PPO模型的大小定为1.3B(可理解为带着RL且初始版本为SFT的模型)
    然后,去回答规模大小为31k且不带人类任何标注的一些问题比如ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT
    此时不再让人工评估好坏,而是让阶段2训练好的奖励模型RM去给PPO模型的预测结果比如ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT进行打分进而排序(看是否优质,比如是否迎合人类偏好)
    之后,通过不断更大化奖励而优化PPO模型的生成策略(因为生成策略更好,模型的回答便会更好),策略优化的过程中使用PPO算法限制策略更新范围
    最后,根据优化后的策略再次生成 ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT RM再评估 ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT模型再优化后再生成,如此循环进行,直到策略最优为止,更多细节下文详述

    当然 这三步下来,比如第一轮迭代出一个相对最优的策略后,后面某个时间段 比如第二轮是可以再次通过新一批人类排序的数据训练一个新的RM,然后再迭代出一个当下最优的策略

另 值得一提的是,上文反复提到策略,那怎么理解这个经常在RL中出现的“策略”呢,举几个例子

此外,可能有读者疑问,InstructGPT之所以使用RLHF的思路,只是为了训练奖励函数么?事实上,还有额外多方面的用途

  1. 一方面是为了尽可能地对齐(Alignment)GPT的输出与对用户友好的语言逻辑,即微调出一个用户友好型GPT
    以往的GPT训练,都是基于大量无标注的语料,这些语料通常收集自充斥大量“行话”、“黑话”的互联网中,这样训练出来的语言模型,它可能会有虚假的、恶意的或者有负面情绪等问题的输出
  2. 二方面,为了更好的理解人类的意图

因此,通过人工干预微调GPT,使其输出对用户友好(避免乱说话),且更好的和人类对话,所以,对InstructGPT的简单理解,可以是基于人类偏好的深度强化学习(RLHF)手段微调的GPT。

接下来,我们分别具体阐述上面的阶段2、阶段3。

3.1.2 InstructGPT训练阶段2:如何对多个输出排序及如何训练RM模型

可能又有读者有疑问了,即instructGPT中,人类对模型的多个输出做个排序,为什么就能够提供监督信号,或者说在训练RM时如何怎么做到loss的梯度回传?

训练RM的核心是由人类对SFT生成的多个输出(基于同一个输入)进行排序,再用来训练RM。按照模仿学习的定义,直观上的理解可以是,RM在模仿人类对回答语句的排序思路

那么到底是如何模仿的呢,或者说如何实现梯度回传?

这里我们代入一个场景,假设你向一个六岁小孩解释什么是登陆月球或什么是RL,如下图

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

  1. SFT生成了 A、B、C、D 四个回答语句,然后人类对照着Prompt输入(即提问)来对4个回答的好坏做出合适的排序,如ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT
  2. 为了让RM学到人类偏好(即排序),可以4个语句两两组合分别计算loss再相加取均值,即分别计算ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT个即6个loss,具体的loss形式如下图:

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

针对这个损失函数需要逐一说明的是

  1. 这是一个常见的排序模型, ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT是RM模型,其中ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT是提示Prompt输入,ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT是SFT的预测输出(比如ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT/ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT),从而随机生成ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT个输出(ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT),然后针对ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT个输出做ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT次比较,比如4个输出有6次比较,9个输出有36次比较,ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT是人类比较的数据集

    有一点要提下的是,RLHF中的rank就好比监督学习中的弱标注——它并不提供直接的监督信号。但通过学习简单的排序,RM可以学到人类的偏好
    为何是排序,而非直接打分呢,道理很简单,排序相比打分更容易接近客观事实,即不同的标注员,打分的偏好会有很大的差异(比如同样一段精彩的文本,有人认为可以打1.0,但有人认为只能打0.8),而这种差异就会导致出现大量的噪声样本,若改成排序,则不同标注员的排序一致性相比打分一致性就大大提升了

  2. 首先把你的问题ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT和答案ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT放进奖励函数ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT中,再把问题ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPTChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT也放进奖励函数ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT中,然后分别输出,假定ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT是语句组合对中相对ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT排序更高的,所以两者一减(这里面使用的是交叉熵损失函数,奖励的差异表示一种应答比另一种应答更受人类标注者青睐的对数概率),我们希望相减的结果越大越好
  3. 最后通过Logitech函数变成一个loss函数,而因为loss函数最前面加了一个负号,相当于最大化上面第2点最后相减的结果ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT(ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT) − ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT (ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT)等于是最小化这个loss函数

如此,通过这种形式的梯度回传,RM逐渐学会了给D这类语句以高排名甚至打出一个高分,给A、B以低排名甚至打出一个低分,从而模仿到了人类偏好。到了这一步,不妨可以这么简单理解RLHF:所谓的基于人类偏好的深度强化学习,某种意义上来说,就是由人类的偏好来充当reward

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

3.1.3 InstructGPT训练阶段3:如何通过PPO算法进一步优化模型的策略

简而言之,阶段3可以用下图形象化表示

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

具体而言,instructGPT原始论文中的目标函数如下所示

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

InstructGPT这篇论文吧,对大家实在是太友好了,友好到全篇论文就只给了两个公式(奖励函数的损失函数以及上面这个目标函数),关键这两个公式都还只是简写,针对ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT这个目标函数在和交大张老师及七月在线赵、倪等老师核对之后,发现实际中真正要算的时候,需要如下展开下

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

为何呢?考虑到大部分文章在分析上面的目标函数时基本都是人云亦云、一带而过,故再逐一拆接下这个目标函数,分为三个部分

  1. 第一部分是ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,相当于阶段2中根据人类偏好学习出来的RM模型,从而基于“最大化奖励”这个目标下不断优化PPO模型的策略ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT(如上文所述,PPO模型一开始是被SFT模型初始化而来的)
  2. 第二部分则是用KL散度对比RL学到的策略ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT和原始策略ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT的某种差距,一开始时,ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT的初始化值就是ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,咱们希望它俩之间的差距不至于太大

    怎么避免它两相差太多呢?这就是PPO算法要做的事情(通过KL散度衡量两个策略的概率分布之间的差距,从而使得咱们在优化策略时限制参数更新的范围)

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

    其中, KL奖励系数ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT控制 KL 惩罚

    好,接下来,重点来了,简言之,ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT/ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT与PPO算法表达式中的ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT一一对应,比如与环境交互的ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT等同于原始策略ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,具体而言,有以下4点
     已经掌握人类偏好的RM模型一旦判定现有回答的不够好,便得更新ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,但如果ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT一旦变化,会导致后续ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT计算一系列问答评分时中的ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT发生变化(策略一变轨迹必变),进而已采样的问答数据

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

    便没法继续使用,而只能不断采样一批批新的问答数据(更新ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT后,得采样新一批数据;再更新ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT后,再采样新一批数据..)

     为避免ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT一更新便只能重复采样一批批新问答数据,说白了,保护(数据)现场,我们改让ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT去和环境交互『ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT始终固定住不变,且基于重要性采样的原则,增加重要性权重ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT
    然后为了最大化奖励而不断迭代ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT(相当于在策略ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT下模型回答的好不好始终由RM模型评判),迭代过程中可重复用已有数据反复验证

     迭代中我们追求整个目标函数ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT最大化,等同于要求ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT最小(毕竟KL散度越小代表两个策略之间的差距越小)
    至于如果忘了KL散度公式的具体表达或者忘了怎么推导而来的,可以看下RL极简入门关于TRPO的部分

    ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

     直到ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT迭代出最优策略(是否最优裁判RM模型说了算)

  3. 第三部分是加在最后边的偏置项,其中, ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT是预训练分布,预训练损失系数ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT控制预训练梯度的强度,且ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT设置为0则称为PPO模型,否则称为PPO-ptx模型
    之所以加最后的这个偏置项,是防止ChatGPT在RL的训练过程中过度优化,从而避免过于放飞自我,通过某种刁钻的方式取悦人类,而不是老老实实地根据人类的问题给出正确答案

3.2 InstructGPT如何更好的构建多轮对话能力

这里我们先从自然语言任务中最基本的语言模型简单说起。一个语言模型大概是说,当你给定前面的若干个词后,它会给你下一个词;而当你有了下一个词后,它会再给你接一个词,以此递推

  1. 实际上,我们向ChatGPT提出的问题,可以看成是下图的输入ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,然后我们可以将ChatGPT给出的回答抽象成下图的输出ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT
  2. 而ChatGPT这类语言模型,提供了若干个类似手机输入法的“候选句”,每个候选句对应的概率不一
  3. 所谓的语言模型的训练,其实就是让模型调整候选句对应的概率,使得输出的候选句的概率尽可能大

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

对应到强化学习的框架中,环境从某种意义上说被直接被奖励模型RM取代了,如下图

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

  1. 图中的状态State即是输入语句ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,Agent则是模型,当模型拿到一个ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,它根据生成/回答策略执行的动作action即是预测下一个单词ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT(是个概率分布,可以选取概率最大的候选词)
  2. 注意,ChatGPT需要输出一整句话ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,所以要完成最终的输出,需要做若干次action,即多次预测
    怎么做多次预测呢,当RM接收到模型给出的下一个单词的预测ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT后,会把这个单词ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT放到已有单词序列ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT的末尾,即ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,从而继续让模型预测下一个词ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT
  3. 打个比方,这里的智能体就是手机输入法,而环境就是使用输入法的用户。用户所做的事情,就是当输入法给出一系列候选词后,基于某种偏好选择某个词,然后让手机输入法再去猜下一个词,直到输入法把整个句子猜出来为止

这里我们明白了在语言模型场景下强化学习的状态和动作对应什么,那么奖励Reward呢?由于上文已经分析过instructGPT的目标函数了,这里就不再赘述,直接上图:

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

至此,还有一个细节问题,即奖励函数是对整个输入语句ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT和整个输出语句ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT而言的,而我们又在之前讨论过,智能体是根据一个一个词来去拼凑出整个回答的。图中的奖赏函数只能给出完整回答的奖赏,那么在智能体生成回答的过程中,每个动作action给出的词ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT对应的奖赏是什么呢?

这个细节在InstructGPT的论文中并没有给出。幸运的是,上文提到过的这篇论文《Learning from summarize from Human feedback》中的一个引脚标注给出了这个疑问的答案

论文里说,奖赏模型只在最终生成回答之后才给出奖赏,在中间的过程中是不给出奖赏的。在这里论文里没有使用回答一词,而是使用总结一词,因为它的任务是将一篇长文章进行归纳总结

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

换言之,只有在ChatGPT输出了EOS token的时候,整个轨迹才结束(EOS token是NLP中用来表示一段话结束的标志)

总结上文,可得

  1. 由于多轮对话要求语言模型有记忆性,因此无法直接使用RL,问题出在奖赏函数中:ChatGPT的奖励函数是针对GPT的一整个输入语句ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT和一整个输出语句ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT而言的,而ChatGPT的语言模型在强化学习的训练策略中,每个action其实输出的是一个个词语
  2. 因此,OpenAI的团队采取不对序列的中间生成给予reward的方式解决这个矛盾

考虑到多轮对话场景里,存在某一轮对话中的代词指向上一轮对话中的某个人或物的可能,为此,ChatGPT多轮对话的核心关键是

  1. “基于Transformer的生成式模型”GPT3/GPT3.5足够强大
    在回答用户问题的过程中,每段对话都是一个个序列
    把之前的部分对话内容(对历史对话数据的规模做个限制,比如限制在8K大小)都保存下来,和当前的输入一起作为输入给模型,这些信息被编码成一个向量作为模型的输入

    且得益于Transformer的自注意力机制,使得模型能够理解不同对话历史之间的依赖关系,并在生成回答时考虑到之前的对话历史
    此外,模型还使用位置编码来区分每个对话历史的位置,确保模型可以正确地捕捉到对话历史的顺序信息

  2. 其次,为加强多轮对话能力,instructGPT/ChatGPT在训练的时候就引入了大量多轮对话的数据

第四部分 关于类ChatGPT的部分开源项目

虽说GPT3在2020年就出来了,但OpenAI并未开源,所以直到一年半后以后才有国内外各个团队比如DeepMind等陆续复现出来,这些大厂的复现代码我们自然无法窥知一二,毕竟人家也未开源出来

再到后来基于GPT3的InstructGPT、基于GPT3.5ChatGPT初版(GPT3.5的参数规模也尚无准确定论)、GPT4均未开源,OpenAI不再open,好在Meta等公司或研究者开源出了一系列类ChatGPT项目,本部分针对其中部分做下简要推荐(根据发布顺序排序)

第一部分 Colossal-AI、PaLM-rlhf-pytorch、Open-Assistant等

  • 1.1 基于Colossal-AI低成本实现类ChatGPT迷你版的训练过程
  • 1.2 PaLM-rlhf-pytorch、Open-Assistant等项目

第二部分 从Meta发布的LLaMA到基于LLaMA微调的斯坦福Alpaca

  • 2.1 Meta发布大语言模型LLaMA:参数少但多数任务的效果好于GPT3
  • 2.2 斯坦福Alpaca:人人都可微调Meta家70亿参数的LLaMA大模型

第三部分 国内的GLM与类ChatGPT项目ChatGLM-6B

  • 3.1 GLM: General Language Model Pretraining with Autoregressive Blank Infilling
    • 3.1.1 如何将生成模型GPT和掩码语言模型BERT结合在一起
    • 3.1.2 如何理解GLM的自回归空格填充任务
    • 3.1.3 GLM的预训练和微调
  • 3.2 GLM-130B:国内为数不多的可比肩GPT3的大模型之一 
  • 3.3 类ChatGPT开源项目ChatGLM-6B的训练框架与部署步骤

为避免本文篇幅再次过长,本第4部分余下的内容已抽取出去独立成文,请点击:《类ChatGPT开源项目的部署与微调:从LLaMA到ChatGLM-6B》

后记(含修改/优化/完善记录)

事实上,可能很多朋友也已经意识到,本文的前大部分内容里,GPT-N理解起来相对轻松(包括Transformer通过理解上篇BERT笔记不算特别复杂),而instructGPT/ChatGPT的整体架构思想也不算复杂,但其中涉及到的RL部分则让想深挖细节的初学者变得立马吃力起来(除非你已“入一定门”,或者你有课程/老师可以不断问),比如一个PPO算法,要真正把这个概念讲清楚、讲透彻且从零推到尾则没那么容易了。

以下是本文的部分修改/优化/完善记录

  1. 开始第一大阶段的修改
    1.22日,优化关于“instructGPT:如何基于RLHF运用到多轮对话场景”中的部分描述
    且为避免篇幅过长而影响完读率,权衡之下把扩展阅读下的SeqGAN相关内容删除
  2. 1.27日,修改此部分内容:“instructGPT/ChatGPT:如何更好的构建多轮对话能力”,之前的阐述没在点子上
  3. 2.9日,受正在编写的微积分和概率统计笔记的启发:把公式、定理、概念、技术放在历史这个大背景下阐述会让读者理解更为深刻,故,在本文开头前沿里,新增ChatGPT各个前置技术的发展、迭代、结合,并依据这些前置技术的先后提出顺序重新编排全文结构
  4. 2.10日,把第一部分中的大部分RL细节抽取出来放到新一篇笔记《RL极简入门》里
  5. 2.15日,针对本文开头所梳理的ChatGPT各项前置技术的推出时间从年份细化到月份,新增“RLHF”,及“低成本实现ChatGPT低配版训练过程的开源项目”
  6. 2.16日,为更一目了然,进一步完善本文对自注意力机制的阐述
  7. 2.17日,进一步完善本文对RLHF的阐述,比如新增对两篇RLHF相关论文的介绍
  8. 2.21日,根据instructGPT原始论文,修正大量同类解读中针对“ChatGPT训练三步骤”也存在的不够精准的个别描述
  9. 2.22日,新增关于“Prompt技术的升级与创新:指令微调技术(IFT)与思维链技术(CoT)”的部分
  10. 进入第二大阶段的修改
    2.25日,新增关于"GPT3到GPT3.5:从instructGPT到ChatGPT的迭代过程"的部分

    相比前几天有了质的提升
    ​之前哪怕修改十几次也都是1.x版本,今天的这个版本可以称之为2.0版本了,还会不断完善

  11. 2.26日,修正instructGPT/ChatGPT训练三步骤中“ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT/ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT与PPO算法表达式中ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT的对应关系”
    且修正为:SFT就是基线模型 最后不用去更新它的策略ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,更新的是论文中命名为PPO模型的策略ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT
  12. 2.28日,修正对one-shot和few-shot的描述,相当于one-shot相当于就一个样本/示例,few-shot就是少量样本/示例
    且在本文最后附上了“ChatGPT相关技术的100篇论文必读榜”
  13. 3.1日,修正训练RM模型的描述中个别不够准确的措辞,比如通过人类的排序而非打分去训练奖励函数/模型
    且删除关于“近端策略优化裁剪PPO-clip”的介绍,毕竟详细的可以查看另一篇RL极简入门
  14. 3.2日,考虑到本文一读者留言说,“第三部分的ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT,其中RL是需要更新的模型,而SFT是代替RL采样的不变的模型。那么为什么数学期望的下标的是RL,这不是意味着对正在更新的模型采样吗?如果是这样那PPO还有什么意义呢?”
    故为方便大家一目了然,已把该目标函数展开了下
  15. 3.3日,在本文第二部分开头补充“NLP自发展以来先后经历的4种任务处理范式”
  16. 3.7日,修正RLHF这一概念的最早提出时间,且补充关于beam search的介绍、完善关于“GPT的(无监督)预训练-(监督)微调模式”的描述
  17. 进入第三大阶段的修改(根据论文精修)
    3.8日,通过再次回顾GPT3的论文,补充关于为何GPT3不需要微调的原因,且修正个别不太精准的描述
  18. 3.11日,根据Google的FLAN论文,修订关于指令微调的部分细节,以让行文更准确
  19. 3.15日,新增一节“2.7 ChatGPT改进版:底层语言模型从GPT3.5升级到GPT4”的内容
    新增一小节“3.3.2 斯坦福Alpaca:人人都可微调Meta家70亿参数的LLaMA大模型”的内容
  20. 3.16日,新增“Masked Self-Attention对屏蔽尾部词的实现方法”的描述
  21. 3.17日,新增关于“GPT4的训练方式和基于GPT3的instructGPT或基于GPT3.5的ChatGPT初版的训练方式如出一辙”的描述
    修订对RLHF的精准定义:基于人类偏好的深度强化学习
  22. 3.19日,把之前文末推荐的一些开源项目独立出来并完善为本文的“第四部分 关于类ChatGPT的部分开源项目”,并重点阐述Meta开源的LLaMA
  23. 3.20,通过再次回顾instructGPT论文里的训练三阶段,给本文补充一些细节
  24. 3.21,根据论文《SELF-INSTRUCT: Aligning Language Model with Self Generated Instructions》,修正“4.3 斯坦福Alpaca:人人都可微调Meta家70亿参数的LLaMA大模型”节中不准确的描述
  25. 3.22,随着对一系列开源项目的研究深入,为避免本文篇幅再度过长,故把本文的第4部分 抽取出去独立成文:《类ChatGPT开源项目的部署与微调:从LLaMA到ChatGLM-6B》
  26. //待更..

为了写本笔记,过去两个月翻了大量中英文资料/paper(中间一度花了大量时间去深入RL),大部分时间读的更多是中文资料,2月最后几天读的更多是英文paper,正是2月底这最后几天对ChatGPT背后技术原理的研究才真正进入状态(后还组建了一个“ChatGPT之100篇论文阅读组”,我和10来位博士、业界大佬从23年2.27日起100天读完ChatGPT相关技术的100篇论文,榜单见此文),当然 还在不断深入,由此而感慨: 

总之,读的论文越多,博客内相关笔记的质量将飞速提升 自己的技术研究能力也能有巨大飞跃

参考文献与推荐阅读

  1. Transformer通俗笔记:从Word2Vec、Seq2Seq逐步理解到GPT、BERT,July
  2. 《预训练语言模型》,电子工业出版
  3. GPT3原始论文:Language Models are Few-Shot Learners,这是翻译之一
  4. GPT,GPT-2,GPT-3 论文精读,2018年6月份OpenAI提出GPT(当年10月份Google提出BERT),随后2019年2月14日推出GPT2,20年年中推出GPT3,此文介绍了GPT发家史
  5.  此外,写过图解Word2vec、图解transformer的Jay Alammar也写过:图解GPT2(其翻译版)、图解GPT3(其翻译版)

  6. GPT系列论文阅读笔记,另 300行代码实现GPT:GitHub - karpathy/minGPT: A minimal PyTorch re-implementation of the OpenAI GPT (Generative Pretrained Transformer) training

  7. OpenAI关于对GPT3.5的介绍:https://beta.openai.com/docs/model-index-for-researchers
  8. prompt提示学习(一)简要介绍
  9. CMU刘鹏飞:近代自然语言处理技术发展的“第四范式”
  10. 大模型prompt Turing技术上,这是针对这次分享的解读
  11. NLP小样本学习:如何用20条数据完成文本分类,此外,小样本学习也是七月NLP高级班上重点讲的技术之一,最新一期NLP11则加入了ChatGPT背后原理的解析
  12. 【论文解读】in-context learning到底在学啥?
  13. 万字拆解!追溯ChatGPT各项能力的起源
  14. A Survey for In-context Learning,这是对该论文的解读,该论文作者之一维护的一个Paper List for In-context Learning
  15. 首次提出instruction turning的FLAN原始论文:FINETUNED LANGUAGE MODELS ARE ZERO-SHOT LEARNERS,这是解读之一
    此外,FLAN-T5原始论文:Scaling Instruction-Finetuned Language Models,这是对T5的解读之一
  16. GPT-3.5 + ChatGPT: An illustrated overview - Life Architect
  17. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models,思维链技术的开山之作,这是针对该篇论文的来自亚马逊一研究者的解读(YouTube),这是针对该篇论文的解读笔记,这是关于Cot的一些关键paper,这是T5作者之一关于Cot的分享之一
  18. Large Language Models are Zero-Shot Reasoners,来自东京大学和Google的研究者
  19. Multimodal Chain-of-Thought Reasoning in Language Models,来自亚马逊的研究者
  20. Large Language Models Are Reasoning Teachers,提出了 Fine-tune-CoT 方法,旨在利用非常大的语言模型 (LMs) 的CoT推理能力来教导小模型如何解决复杂任务
  21. PLM 是做题家吗?一文速览预训练语言模型数学推理能力新进展
  22. 有了Chain of Thought Prompting,大模型能做逻辑推理吗?
  23. 热点解读:大模型的突现能力和ChatGPT引爆的范式转变
  24. 通向AGI之路:大型语言模型(LLM)技术精要,张俊林
  25. Codex介绍页面:OpenAI Codex,Codex原始论文:Evaluating Large Language Models Trained on Code,另这是针对Codex原始论文的解读
  26. PPO原始论文:Proximal Policy Optimization Algorithms
  27. PPO算法解读(英文2篇):解读1 RL — Proximal Policy Optimization (PPO) Explained、解读2 Proximal Policy Optimization (PPO)
  28. PPO算法解读(中文3篇):Easy RL上关于PPO的详解、详解近端策略优化、详解深度强化学习 PPO算法
  29. PPO算法实现:https://github.com/lvwerra/trl
  30. 如何选择深度强化学习算法?MuZero/SAC/PPO/TD3/DDPG/DQN/等
  31. Google搜索:instructGPT如何基于PPO算法进行训练,出来的一系列文章
  32. InstructGPT原始论文(确实有68页,^_^):Training language models to follow instructions with human feedback,我是23年2.28日首次基本完整看完
  33. InstructGPT 论文精读,来自动手学深度学习一书作者李沐的解读
  34. ChatGPT原理猜想(1)--从InstructGPT讲起,ChatGPT原理猜想(2)--InstructGPT深入学习
  35. ChatGPT: Optimizing Language Models for Dialogue,OpenAI关于ChatGPT的官方发布页面
  36. ChatGPT会取代搜索引擎吗,张俊林
  37. Illustrating Reinforcement Learning from Human Feedback (RLHF),另这是中文翻译版之一
  38. OpenAI联合DeepMind发布全新研究:根据人类反馈进行强化学习,表明2017年便开始研究RLHF了
  39. 基于人类偏好的深度强化学习(Deep reinforcement learning from human preferences),这是翻译版之一,这是解读之一
  40. 《Learning from summarize from Human feedback》,这篇博客是对这篇论文的解读之一
  41. HuggingFace的视频分享:RL from Human Feedback- From Zero to chatGPT,这是文字解读:ChatGPT 背后的“功臣”——RLHF 技术详解
  42. OpenAI's InstructGPT: Aligning Language Models with Human Intent
  43. 不忽悠的ChatGPT,作者Ben
  44. 别光顾着玩,让我来告诉你ChatGPT的原理,来自B站UP主弗兰克甜
  45. 浅析ChatGPT的原理及应用,此外,这里还有一篇外文解读:How ChatGPT actually works
  46. Role of RL in Text Generation by GAN(强化学习在生成对抗网络文本生成中扮演的角色)
  47. 抱抱脸:ChatGPT背后的算法——RLHF
  48. 关于指令微调等关键技术:What Makes a Dialog Agent Useful?,这是此文的翻译版
  49. 谷歌FLAN-T5作者亲讲:5400亿参数,1800个任务,如何实现大语言模型“自我改进”
  50. 为什么chatgpt的上下文连续对话能力得到了大幅度提升?
  51. LaMDA: Language Models for Dialog Applications,Google对话机器人LaMDA原始英文论文
  52. https://github.com/hpcaitech/ColossalAI/tree/main/applications/ChatGPT
  53. https://www.hpc-ai.tech/blog/colossal-ai-chatgpt
  54. ChatGPT原理介绍
  55. ChatGPT 标注指南来了!数据是关键
  56. https://openai.com/research/gpt-4,GPT4的介绍页面
  57. LLaMA模型惨遭泄漏,Meta版ChatGPT被迫「开源」!GitHub斩获8k星,评测大量出炉
  58. 还在为玩不了ChatGPT苦恼?这十几个开源平替也能体验智能对话
  59. 大模型训练避坑指南
  60. ChatGPT相关技术必读论文100篇(2.27日起,几乎每天更新)