从算法工程看ChatGPT的原理与应用
一、Chat GPT的背景以及简单介绍
Chat GPT属于AIGC领域,即人工智能生成内容,与之相对应的是用户生成内容。在AIGC领域它可以
分为以下几种:文本的生成;音频、图像的生成;视频生成以及多模态生成。
AIGC的技术发展路径:2014年, GAI模型提出,被用来做图片的风格迁移以及图片的生成,当时效果
非常好;2017年,谷歌提出Transformer模型,从此深度学习的领域就开始都走向了大的预训练模
型;2022年7月,Stable Diffusion扩散模型提出并且开源,它是用来做文本生成图片的模型,给模型
输入一个提示,模型会输出一张图片,它具备快速出图并且质量很高的特点,引发了AIGC的热潮。
目前的AIGC海外公司的发展明显领先于国内,比如 Jasper公司,他是面向内容创作者的,可以帮助分
享想法、修改媒体上的内容。还比如TracksterAI 7.49公司,用户可以制定一个角色,比如你喜欢的明
星,与AI对话可以营造出与真人对话的感觉。还比如Tommy公司,它可以根据输入的主题自动生成
PPT,写出大纲描述以及配上图片,这属于多模态生成的领域。目前国内企业的人力和算力都投入不
足,又由于语料等等原因,技术基础技术的进展会比较慢。语料方面,互联网上中文数据的质量比较
低,一些模型虽然上线,但缺乏对真实世界数据的调用和迭代。由于GPU等芯片问题,国内的算力一
定程度上不如国外,还存在模型训练不够充分等等问题。另外就是大公司目前更重视短期内可以盈利
的业务,缺乏长期主义,一些项目缺乏生长土壤。
Chat GPT是根据文本生成文本的模型,OpenAI在2022年的11月底发布了聊天机器人模型,他能够学
习理解人类的语言来进行对话,根据聊天的上下文进行互动,像真人一样进行交流。目前它的每月用
户数已经达到了一个亿,成为了史上增长最快的互联网应用。从NLP的领域来说,模型可以分为以下
三个层次:感知、理解和推理,目前Chat GPT可以在推理任务上有非常好的效果。
下面我们可以看几个例子,首先是一个自定义的文本分类任务,比如我跟他对话中告诉他,我现在需
要对文本进行分类,分类只能是说订机票、通讯录、打电话、发短信这四种中的一种,然后给他说一
段话,它可以学习到并且对这句话进行文本分类。后面是我给了他另一句话,告诉他说帮我预约一个
会议室,然后他会告诉你说你刚才的这句话并不能分在刚才的四种技能中,你可以去添加技能等,他
在文本分类的任务上比传统的需要大量语料的训练来得更快。另外可以做一些比如风格迁移或者是代
码编写的任务,然后这里的话是给了一个例子,就是说让他去仿照李清照的风格去写注释,并且解决
一个问题,然后求解一元一次方程。可以看一下下面的他给出的代码,代码没有问题,并且它的注释
仿照了李清照的风格,另外还可以用它来做一个故事创作,给它一个主题,并且一些限制条件,然后
它会根据这个条件来生成一个故事。还有就是一些知识问答的领域,比如说可以去问他这个菜怎么
做,他会把他学习到的信息反馈出来,然后给我们答案。
二、模型的训练原理
Chat GPT是属于OpenAI公司GPT系列模型中的一个,目前已经公布的有GPT1、GPT2和GPT3,接下
来会公布GPT4,它是一个多模态的模型,Chat GPT和InstructGPT是一对孪生模型,目前会被称作
GPT3.5,二者在模型的结构和训练方式上完全一致,不同之处在于数据采集上会有差别。GPT的网络
结构是以Transformer Encoder结构为基础,把很多的Transformer的编码层串起来,然后一层一层地
叠加,最后输出,它是一个生成式的模型,比如说我现在给他一个问题,他输入以后会逐字地把答案
预测出来,就类似于文字接龙的游戏。GPT1、GPT2、GPT3都是大规模的预训练模型,都只用了无监督学习,基于海量的互联网上的文本数
据直接输入到模型中,让模型不断学习接龙的过程,不断的预测下一个字,以此来迭代模型的参数。
GPT3比GPT1、GPT2用了更多的预训练数据,并且参数量是大两个数量级的,但是这样的大模型可能
对于正常使用很难去用,因为它预测得非常慢。另外的话还有一个问题,由于这些模型都是用无监督
学习学出来的,还存在着输出不对齐的问题。在模型的训练语料中可能会有大量的互联网上扒取的文
本,比如这里有一个 triple AI的会议主题是什么,这段文本介绍了triple AI是人工智能领域的顶级会议
等等,确实是介绍了他这个会议主题。但是训练语料中还有很多的文本,比如说关于联合国大会,我
们收集了同学们提出的很多问题,包括大会主题是什么,大会在哪里举行等等更多的语料。那么在问
模型triple AI会议的主题是什么的时候,我们希望得到的是 VCL主题的介绍,但实际上模型可能学习
到的 VCL的会议在哪里举行,什么时候举行等等,这就是模型的输出与我们的期望不对齐的问题。
InstructGPT以及Chat GPT中就使用了基于人工反馈的强化学习的方式来解决模型输出与期望不对齐
的问题。
人工反馈的强化学习的方法主要分三个步骤:
第一步先由人工来选取一些提示以及人工希望得到的答案,并组成样本队,然后用这些样本队来微调
GPT3或者GP3.5,在这个基础上得到了一个SFT模型,这个模型可以看作是一个有监督学习的过程,
即让模型学习到人类希望得到的一些输入。
第二步是继续给模型输入一些提示,模型可以输出不同的几种答案,人工对这几个答案进行排序,选
出这些答案中哪些更好、哪些更坏,然后把答案和样本对输入到打分模型Reward Model中,如果用
户不喜欢答案,得分就会更低,用这些数据来训练模型,于是产生了打分模型。
第三步就是说首先用微调过的SFT模型的参数去初始化强化学习的模型,对于任何给定的提示,让PPO
模型回答,于是得到了一个答案,把这个答案输入到打分模型中,打分模型会给刚才的答案打分。打
分如果高,它就会反馈给PPO模型并让其继续强化,更容易输出这样的回答;反之,原来的模型就会
去学习,尽量不要给出这种答案。以此迭代模型,这样就把人工的选择以及喜好都让模型学习到。