ChatGPT是基于GPT(生成式预训练语言模型)和RLHF(基于人工反馈的强化学习),这里我们重点从这两方面来分析chatGPT的结构及其原理。
1、GPT架构及其原理
GPT可以简单理解为一套数学模型,数据输入给GPT,GPT输出一套数据。例如:输入一段话,GPT模型根据语言/语料概率来自动生成回答的每一个字(词句)。即利用已经说过的一段话作为输入条件,预测下一个时刻不同语句甚至语言集合出现的概率分布。
GPT是生成式预训练语言模型,到目前,有GPT-1、GPT-2、GPT-3三个版本。三个版本首先,都是用无监督的方法,即在大量无标注的语料数据中,预训练出一个与下游任务无关的模型,三个版本在这里的主要区别是模型的参数越来越大。其次,在使用阶段,三个版本分别试验了在具体任务中通过任务数据微调模型、不通过具体任务数据来微调模型以及通过少量任务数据交互来解决具体任务应用问题。
GPT模型架构如图1,它采用的以Transformer为核心结构的模型,其中Trm是一个Transformer结构,一个Trm可以简单理解为一套数据流转的结构。
图1 GPT系列的模型架构
GPT-1的完整结构如图2,其中左边是GPT使用的12层Transformer结构,右图是预训练模型根据不同任务进行微调的结构。这里重点是构建了一套具有强大自然语言理解能力的与任务无关的单模型框架:生成式预训练和判别式微调。预训练与微调的定义如下:
预训练:用标准的语言模型的目标函数,即似然函数,根据前k个词预测下一个词的概率。GPT预训练阶段其作者使用语言模型(LM)的训练方式,模型使用的是transformer的变体,即多层transformer-decoder。
微调:用的是完整的输入序列+标签。目标函数=有监督的目标函数+λ*无监督的目标函数。
通过上面可以看出,对预训练好的模型,叠加对应下游任务的层,就可实现不同下游任务。预训练语言模型能够充分利用大规模的无标注数据学习通用的语言模型,然后再使用下游任务的少量有标注数据进行模型微调,来使具体的任务获得较好的效果。
图2 GPT-1模型架构
GPT-2、GPT-3主要是增大了模型的容量,并去掉了监督微调。其作者认为大的模型应该能学习出多任务的能力,而不需要大的标注数据集来解决具体的任务问题,当然到此为止,实际上还没有达到预期。
2、GPT发展阶段
这里我们通过一个GPT模型的发展历程,介绍chatGPT的主要经历了哪些变化。这里我们先看一下chatGPT的发展史:
图3 chatGPT历代版本及区别
如上图所示,基于文本预训练的GPT-1,GPT-2,GPT-3三代模型都是采用的以Transformer为核心结构的模型(图3),主要的不同的是参数方面,也就是后边的版本模型非常大了。而ChatGPT则在此基础上,增加了人工强化学习的反馈(RLHF)。
GPT-1是在无标注的文本语料中进行生成式预训练,然后进行判别式微调,在具体的任务场景上获得能力的提升。
GPT-2相对于GPT-1,模型结构并没有做大的调整,只是使用了更多参数的模型和更多的训练数据。GPT-2在诞生之初也引发了不少的轰动,它生成的新闻足以欺骗大多数人类,达到以假乱真的效果。当时得出了一个结论:当一个大型语言模型在足够大的多样化数据集上进行无监督训练,就能在很多领域数据集上执行任务。
基于上述结论,提出了GPT-3,GPT-3大大加大了参数的数量,拥有1750亿。GPT-3除了能完成常见的NLP任务外,研究者意外的发现GPT-3在写SQL,JavaScript等语言的代码,进行简单的数学运算上也有不错的表现效果。GPT-3的基本训练方法,包括模型,数据,训练都类似于GPT-2。
上面介绍了GPT系列模型,主要是参数的增大、数据量及其多样性的增加。这个预测和实验结果,带来了良好的效果,但仍然达不到使用的预期,于是,研究者又在此基础上,利用人工反馈的强化学习方法来对体系进行优化。下面重点介绍RLHF。
3、基于人工反馈的强化学习训练过程
除了上述GPT越来越大的模型外,ChatGPT使用来自人类反馈的强化学习进行训练,这种方法通过人类干预来增强机器学习以获得更好的效果。在训练过程中,人类训练者扮演着用户和人工智能助手的角色,并通过近端策略优化算法进行微调。RLHF的训练步骤如如图4所示,其过程主要包括:收集数据训练监督策略模型(SFT)、收集比较数据并训练奖励模型(RM)和采用PPO强化学习算法针对奖励模型来优化策略三个阶段。
图4 ChatGPT的训练优化过程
1)收集数据训练监督策略模型(SFT)
这里OpenAI是先设计了一个prompt dataset,里面有大量的提示样本,给出了各种各样的任务描述;其次,找了一个标注团队对这个prompt dataset进行标注(本质就是人工回答高质量答案);最后,用这个标注过的数据集微调GPT-3.5,这个微调好的GPT-3.5我们称之为SFT模型(监督微调,全称Supervised fine-tuning,简称SFT),此时的模型在遵循指令/对话方面已经优于GPT-3,但不一定符合人类偏好。具体步骤如下:
1、从数据集中抽取问题;
2、标引员写出高质量答案;
3、使用这些数据微调gpt-3.5。
2)收集比较数据并训练奖励模型(Reward Mode,RM)
这个阶段主要是通过人工标注训练数据(约33K个数据),来训练奖励模型。首先,在数据集中随机抽取问题,然后使用第一阶段生成的模型,对于每个问题,生成多个不同的回答。最后,人类标注者对这些结果综合考虑给出排名顺序。
接下来,使用这个排序结果数据来训练奖励模型。对多个排序结果,两两组合,形成多个训练数据对。RM模型接受一个输入,给出评价回答质量的分数。这样,对于一对训练数据,调节参数使得高质量回答的打分比低质量的打分要高。具体步骤如下:
1、采样问题和模型的多个回答;
2、标引员对输出进行打分并排序;
3、使用排序比较数据训练奖励模型。
3)采用PPO(Proximal Policy Optimization,近端策略优化)强化学习算法针对奖励模型来优化策略。
这一阶段利用第二阶段训练好的奖励模型,靠奖励打分来更新预训练模型参数。具体做法是,再次让SFT模型去回答prompt dataset某个问题,然后此时不再让人工评估好坏,而是让阶段2训练好的奖励模型去给SFT模型的预测结果进行打分排序。具体步骤如下:
1、采样一个新的问题;
2、基于有监督策略初始化ppo模型;
3、让策略模型(SFT)生成回答;
4、奖励模型数据对产生的回答计算奖励;
5、奖励模型使用ppo更新策略模型(SFT)。
最后,如果我们不断重复第二和第三阶段,即以一个奖励模型(RM)来判断模型生成的文本是否优质(迎合人类偏好),这样不断生成、评估、优化,如此循环进行迭代,最终训练出更高质量的ChatGPT模型。