语言模型通俗讲是判断这句话是否通顺、正确。数学函数表达为给定前N个词,预测第N+1 个词概率,将概率序列分解成条件概率乘积的形式,这个函数就可以实现语言模型去生成句子。那么是什么样的语言模型如此强大,本小节梳理了深度学习开始的语言模型演技过程,如下图所示:
第一次开始用神经网络做语言模型是2003年Bengio提出的NNLM的网络结构,随着图像领域预训练的取得的突破迅速迁移到NLP领域,有了我们熟知的word2vec,通常做NLP任务句子中每个单词Onehot形式输入,使用预训练好的word embedding初始化网络的第一层,进行下游任务。word2vec的弊端是word embedding静态的,后续代表性工作中ELMo通过采用双层双向LSTM实现了根据当前上下文对Word Embedding动态调整。
ELMo非常明显的缺点在特征抽取器LSTM结构带来的,17年Google在机器翻译Transformer取得了效果的突破,NLP各种任务开始验证Transformer特征提取的能力比LSTM强很多。自此NLP开启了Transformer时代。
2018年OpenAI采用Transformer Decoder结构在大规模语料上训练 GPT1模型横扫了各项NLP任务,自此迈入大规模预训练时代NLP任务标准的预训练+微调范式。由于GPT采用Decoder的单向结构天然缺陷是无法感知上下文,Google很快提出了Encoder结构的Bert模型可以感知上下文效果上也明显有提升。随后2019年OpenAI提出了GPT2,GPT2拥有和GPT1一样的模型结构,但得益于更高的数据质量和更大的数据规模有了惊人的生成能力。同年Google采用了Encoder-Decoder结构,提出了T5模型。从此大规模预训练语言模型兵分三路,开始了一系列延续的工作。
2020年OpenAI提出GPT3将GPT模型提升到全新的高度,其训练参数达到了1750亿,自此超大模型时代开启。技术路线上摒弃了之前预训练+微调的范式,通过输入自然语言当作指示生成答案,开始了NLP任务新的范式预训练+提示学习。由于GPT3可以产生通顺的句子但是准确性等问题一直存在,出现WebGPT、InstructGPT、ChatGPT等后续优化的工作,实现了模型可以理解人类指令的含义,会甄别高水准答案,质疑错误问题和拒绝不适当的请求。
3.2 深度强化学习技术演进
深度强化学习(deep reinforcement learning,DRL)是强化学习一个分支,基于深度学习强大的感知能力来处理复杂的、高维的环境特征,并结合强化学习的思想与环境进行交互,完成决策过程。DRL在游戏场景这种封闭、静态和确定性环境可以达到甚至超越人类的决策水平。比较著名的事件是2017年DeepMind 根据深度学习和策略搜索的 AlphaGo 击败了围棋世界冠军李世石。2018 年OpenAI 团队基于多智能体 DRL推出的OpenAI Five 在Dota2游戏中击败了人类玩家。DRL算法主要分为以下两类:
值函数算法:值函数算法通过迭代更新值函数来间接得到智能体的策略,智能体的最优策略通过最优值函数得到。基于值函数的 DRL 算法采用深度神经网络对值函数或者动作值函数进行近似,通过时间差分学习或者 Q 学习的方式分别对值函数或者动作值函数进行更新。代表性的是2015 年 DeepMind 团队提出深度Q网络(DQN),及其后的各种变种DDQN、Dueling DQN、分布式DQN等。
策略梯度算法:策略梯度算法直接采用函数近似的方法建立策略网络,通过策略网络选取动作得到奖励值,并沿梯度方向对策略网络参数进行优化,得到优化的策略最大化奖励值。可以用来处理连续动作。在实际应用中流行的做法是将值函数算法和策略梯度算法结合得到的执行器‒评价器(AC)结构。代表性工作有策略梯度算法、AC 算法以及各种变种DDPG、A3C、PPO等。ChatGPT使用的就是策略梯度算法PPO。
4 ChatGPT背后的技术原理
ChatGPT整体技术方案是基于 GPT-3.5 大规模语言模型通过人工反馈强化学习来微调模型,让模型一方面学习人的指令,另一方面学习回答的好不好。
本节首先阐述ChatGPT提升的效果及背后对应的技术,然后介绍ChatGPT的整体训练流程,其次介绍提升涉及几个技术细节。
4.1 核心提升了什么?
ChatGPT在对话场景核心提升了以下三方面:
1)更好的理解用户的提问,提升模型和人类意图的一致性,同时具备连续多轮对话能力。
2)大幅提升结果的准确性,主要表现在回答的更加的全面,同时可以承认错误、发现无法回答的问题。
3)具备识别非法和偏见的机制,针对不合理提问提示并拒绝回答。
ChatGPT的提升主要涉及以下三方面技术:
1)性能强大的预训练语言模型GPT3.5,使得模型具备了博学的基础。
2)webGPT等工作验证了监督学习信号可大幅提升模型准确性。
3)InstructGPT等工作引入强化学习验证了对齐模型和用户意图的能力。
4.1 整体技术流程
ChatGPT的训练过程分为微调GPT3.5模型、训练回报模型、强化学习来增强微调模型三步:
第一步:微调GPT3.5模型。让GPT 3.5在对话场景初步具备理解人类的的意图,从用户的prompt集合中采样,人工标注prompt对应的答案,然后将标注好的prompt和对应的答案去Fine-tune GPT3.5,经过微调的模型具备了一定理解人类意图的能力。
第二步:训练回报模型。第一步微调的模型显然不够好,至少他不知道自己答的好不好,这一步通过人工标注数据训练一个回报模型,让回报模型来帮助评估回答的好不好。具体做法是采样用户提交的prompt,先通过第一步微调的模型生成n个不同的答案,比如A、B、C、D。接下来人工对A、B、C、D按照相关性、有害性等标准标准并进行综合打分。有了这个人工标准数据,采取pair-wise 损失函数来训练回报模型RM。这一步实现了模型判别答案的好坏。
第三步:强化学习来增强微调模型。使用第一步微调GPT3.5模型初始化PPO模型,采样一批和前面用户提交prompt不同的集合,使用PPO模型生成答案,使用第二步回报模型对答案打分。通过产生的策略梯度去更新PPO模型。这一步利用强化学习来鼓励PPO模型生成更符合RM模型判别高质量的答案。
通过第二和第三步的迭代训练并相互促进,使得PPO模型能力越来越强。
4.3 主要涉及的技术细节
4.3.1 GPT3.5理解能力提升
ChatGPT是在GPT3.5模型技术上进行微调的,这里对GPT-3.5在GPT3基础上做的工作进行梳理,官方列举了以下GPT-3.5系列几个型号:
code-davinci-002 是一个基础模型,对于纯代码补全任务。这也是ChatGPT具备超强代码生成能力的原因。
text-davinci-002 是在code-davinci-002基础上训练的InstructGPT模型,训练策略是instructGPT+FeedRM。
text-davinci-003 是基于text-davinci-002模型的增强版本,训练策略是instructGPT+PPO。
根据如下图官方发布的模型时间线和文档,我们可以了解到ChatGPT是在text-davinci-003 基础上微调而来,这也是ChatGPT模型性能如此强大的核心要素。因为GPT-3.5系列模型是在2021年第四季度之前的文本和代码样本上训练,所以我们体验ChatGPT时候同样无法回答训练样本日期之后的问题。
4.3.2 监督信号提升效果显著
GPT3之前在预训练+微调已经是NLP任务中标准范式,GPT3模型的训练是纯自监督学习并以API的形式发布,用户不具备微调的能力,官方也是主打预训练+提示学习的能力。Prompt方法本质是挖掘语言模型本身具备的知识,恰当的提示去激发语言模型的补全能力。监督信号微调可以理解为改变了语言模型的理解能力,InstructGPT的工作可以理解为对GPT3-SFT做了数据增强提升,使得模型在理解人类指令方面更出色。但这并不影响监督信号对最终效果的价值。
在InstructGPT的工作中,我们可以看到GPT3-SFT和InstructGPT在毒性、幻觉、理解客户能力上,监督学习微调已经和强化学习对比有很大的竞争力,甚至在幻觉角度比基于强化学习的InstructGPT提升很明显。