走进ChatGPT
最近ChatGPT比较火,正好组里要做分享,整理了一些相关资料,顺便发在这里,希望能帮到别人
因为ChatGPT目前没有开源也没有论文,很多内容都是来自网上copy和个人理解,不一定全对,没有很专业,也没有太深入,幼儿园级别的科普。有问题也欢迎交流哈。下面开整
关于AI内容生成
显然,目前AI的相关技术还是在持续发展中的。随着AI的能力提升,现在人类对AI的要求越来越高,需求也会慢慢增多。AI目前被广泛应用和依赖的能力,还是集中在理解与判断上(比如人脸识别、目标检测、文本分类、信息抽取等等),但是输出及创造能力也是在持续探索中。从被动理解到主动去表达,去创造,才能带来更大价值,真正地支棱起来
无论在语音、图像还是文字各种形式上,AI目前的内容生成能力已经有了很明显的提升了。比如AI配音,满大街的“这个男人叫做小帅”。再比如最近很火的AI绘画,虽然有时候会gay里gay气,但是也经常能产出惊艳的效果,至少怎么也是淘宝平均接单水平吧(当然也因为本身存在很大的侵权问题,目前也在被绘圈所抵制,就不多评价了)
至于AI在语言及对话上的能力,ChatGPT可以作为目前的天花板了吧,基本已经颠覆我个人的认知了。虽然距离真正的强人工智能还远着,至少可以摆脱“人工智障”的标签了
ChatGPT的实际演示效果我就不贴了,网上随便搜就能有,主要是我没账号(艹
对话机器人的发展
最早的对话机器人在1960s就诞生了。后来随着互联网的普及以及信息检索技术的发展,产生了很多早期问答系统。再到后来依托深度学习及NLP技术的崛起,目前我们最经常接触到的对话机器人,就是各种“智能助手”了,比如siri、Cortana、小爱同学之类的,至于什么水平,大家都用过,心里也都有数。所以我一直以为对话机器人也就这样了,直到接触到ChatGPT,我的内心就是一个woc,无论是写代码改bug,谈天扯地,还是编故事过家家,完全一点毛病没有
在前几年的时候,文本生成技术还只能尽量让模型说人话,基本的语法合理性和语义合理性还很难满足。语法合理性就是像正常人说的话,没有语法问题;语义合理性就是符合上下文情境,不是我说地你说天。从目前ChatGPT的效果来看,语法和语义合理性已经不再是问题了,甚至还能展示出一内内的知识储备、联想及逻辑计算能力。证明对话机器人的能力正在向下一阶段进化
而目前存在的最大问题就是内容真实性。就是偶尔也会张嘴就来,信口胡诌。属于有脑子,但不多。但或许有一天这些也不再是问题
另外还想说,虽然ChatGPT现在效果不错,但距离能落实到我们身边还是需要一些时间的。目前工业界真正广泛使用的对话系统,都不是一个end2end的独立模型,而是需要由多个模块拼搭而成的庞大系统,背后需要全套NLP技术模块以及人工运营成果积累而成的。而ChatGPT本质更像一个来自实验室的demo,他的使命是展示最前沿的技术能力,而不是进入你的生活
讲原理,先说语言模型
什么是语言模型?就是机器通过无监督训练从大量数据中对人类语言规律进行学习与归纳。具体来说,比较典型的应用:给定前几个词,预测下一个词是什么,这是GPT语言模型的最基本任务,背后的原理就是语言的马尔科夫性,就是下面这个公式
翻译成人话就是,我下面要说什么字(w_m),要根据我之前说了哪些字来决定(w_1到w_m-1)
放一个GPT-2的例子感受一下:给定一些上文线索,然后模型就会一个字一个字的把话接下去
那同样都是语言模型,GPT和BERT有什么区别呢?三点
从基础任务上:GPT是给前几个词,预测下一个词,算单向语言模型;而BERT那种,给定周围几个词,预测中间被挖空的词(即Masked Language Model),算双向语言模型从应用上:因为是单向语言模型,从前到后逐个预测,GPT比较适合用于自然语言生成的任务;而BERT在自然语言理解的任务上,表现更好从网络结构上:两者本质都是基于Transformer,没什么区别。放在sequence2sequence结构里,BERT相当于只关注Encoder部分,而GPT只关注Decoder部分(下图中只以单层Transformer举例,实际上两个模型都是很多层Transformer堆叠而成)
从GPT到ChatGPT
ChatGPT不是突然产生的,从最早的GPT一步步进化到今天,是OpenAI背后无数人多年积累的结果。中间经历的几个主要版本:
GPT:只有简单的单向语言模型任务GPT-2:使用更多的数据,更大的模型,又新增了几个辅助的训练任务GPT-3:使用45TB的超大规模数据,175B的超大参数量模型。另外加入了Meta-learning的训练任务,提高了Few/Zero-shot(即少样本/无样本)任务上的表现InstructGPT:加入了近两年流行的prompt-learning。另外更重要的是,加入了强化学习,即RLHF(Reinforcement Learning from Human Feedback),基于人工反馈机制的强化学习,也是后面着重介绍的模块ChatGPT:目前没有开源代码或论文参考,从网上的推测来看,应该是在InstructGPT的基础上,进一步优化了多轮对话效果
关于GPT到GPT-3就不多提了,因为也没什么可细讲的,网上也能搜到很多资料。prompt-learning也是近两年很流行的模式,下面会简单解释一下,但不会太详细地展开。那么个人理解,从GPT-3到ChatGPT,最大的改进,就是这个RLHF了,下面主要讲这个RLHF
RLHF(Reinforcement Learning from Human Feedback)
先说强化学习,就是下面这样一个结构
在这里
agent=智能体,就是我们要训练的Modelstate=状态,就是之前已经说过的话action=动作,就是生成文本(单词)reward=收益,就是生成的文本质量好不好
简单来说就是:根据之前已经说的话,说出下一句话,得到一个收益反馈,再根据状态和收益决定下一句再说什么话
在NLP场景下,使用这种框架一般需要解决以下几个问题
Reward怎么定义?谁来给出Reward?Reward如何影响模型的训练?
针对这些几个问题,ChatGPT的做法如下:
Reward是通过另一个模型RM(Reward Model),来对生成的句子打分得到的。而训练这个模型的数据从哪来呢?来自于Human Feedback,也就是人工标注。针对同样的输入,生成模型先产生几个不同结果,人工对各个结果进行排序,再基于这个排序结果去训练Reward Model得到Reward打分后,使用强化学习中的Policy Gradient策略,当训练生成模型时,在loss计算中融入Reward作为权重系数,从而影响生成模型的训练过程。当然这个不是首创,之前seqGAN也是这么做的。不过在此基础上,ChatGPT又引入了PPO(Proximal Policy Optimization)策略,这个到后面再细讲
下面逐步详细看一下,具体是怎么做的
Step 1. 首先有一个现成的预训练语言模型,也就是GPT-3。然后在GPT-3的基础上,进行prompt-learning,而prompt-learning的数据,也是来自于人工标注。prompt-learning的过程也比较简单,首先有一个prompt库,包含了很多常见的prompt,然后针对这些prompt,人工标注者会手动写出期望的标注答案,然后模型就用这个数据去进行微调训练
这里的prompt可以理解成一些常见或典型的问题模版、对话模版之类的东西,就像咱们考试做题,每种题都有一种答题模式,比如应用题要写个解字,选择题要回答ABCD一样,人类提出的问题,也可以找到一批比较有代表性的模版,比如“请给一个8岁的孩子解释一下什么叫惊喜”,或者“以下哪个人发明了计算机?A.冯诺依曼;B.刘波;C.钝角”等等。通过prompt-learning,不仅能强化模型在一些典型对话模版上的表现,并且能进一步提高模型的泛化能力
这里把微调后的生成模型,即经过prompt-learning的GPT-3,称为SFT
Step 2. 下面就要训练Reward Model了。针对每个输入的prompt,SFT会产生多个结果,然后再让人工判断哪个回答更好,哪个回答更差,标注一个排序结果。然后基于这些排序结果,来训练打分模型RM。RM的训练使用朴素的网络结构就可以(GPT-3有175B参数量,相比之下RM只有6B)。训练好的RM就可以对SFT生成的句子进行打分了
这里有两个问题需要说明:
既然是训练打分模型,为什么标注时,不直接让人工打分?因为人工直接打分很难,人类很难说出什么样的回答可以得0.8分,什么样的回答可以得0.1分,但是排序很简单,人类很好判断哪个回答更好,哪个回答更差只有排序结果,能训练一个打分模型吗?可以,参考Elo排名系统。Elo系统现在广泛应用在各种比赛(比如围棋)以及电竞游戏(比如DOTA)中。简单来说,就是每个人有一个初始分,然后不断比赛,赢了就加分,输了就减分,具体加/减多少,也要综合考虑你的期望水平以及对方的水平如何。这和打分模型的训练也是类似的:初始对于每个句子,模型可能都打0.5分,但随着训练,不断地根据排序结果来更新参数调整输出,有的句子排在前面的次数多,分数就会慢慢提升上去
如上图所示,假设人工标注了4个句子的排序结果,那么这4个句子就两两组成一对,分别计算loss,然后再对6个loss求和
Step 3. 我们已经可以得到每个句子的Reward了。那么这个Reward要如何参与到我们原本的生成模型SFT的训练中,去优化他的效果呢?方法就是强化学习中的Policy Gradient策略
这里需要提一下GAN。ChatGPT这种“生成模型+打分模型”的模式,跟对抗学习(Adversarial Learning),即GAN的“Generator+Discriminator”模式,不能说十分相似,只能说没有区别。但是之前GAN这种结构应用在NLP领域,存在的最大问题就是,单词是离散特征,不是图像像素值这种连续特征,离散分布依概率采样后存在梯度不可传递的问题。举个例子,如下图所展示,生成模型输出的结果是softmax后的词表上的概率分布,然后通过argmax取top1得到对应的结果,也就是生成的单词。把这个文本输入到打分模型,打分模型计算loss,将梯度反向传播回去影响生成模型。这时就出问题了,因为单词是通过argmax取top1得到的,不可导,梯度传不回去了。所以后来很多方法都是拿强化学习Policy Gradient这一套,去解决这个问题,比如seqGAN
那么Policy Gradient是咋做的呢?掰开来说很简单,就是在生成模型原本的logloss(也就是交叉熵)的基础上,将Reward作为权重系数乘上去。相当于Reward大的样本,计算loss的时候增大一点,优化效果就增强一些。公式如下,前面带log相当于logloss,后面的f(s,a)就相当于Reward
不过,ChatGPT其实用的还不是Policy Gradient策略,而是PPO(Proximal Policy Optimization),区别就是PPO又加了一个小的KL散度偏置项。偏置项的计算方法,就是计算未参与强化学习调整的SFT和更新后的SFT之间的KL散度,相当于是衡量两者区别的一个东西,把这个东西加到loss里,就是不希望两者差别太大。为什么呢?这是为了避免模型在强化学习过程中太放飞自我,从而通过trick的方式来取悦打分模型,步入歧途,而不是规规矩矩去好好生成文本
如下图所示,左侧绿色模型是原始模型SFT,右边是强化学习优化后的模型,两者计算KL散度,再加到强化学习原本的loss上,再去计算梯度,更新模型
OK以上就是关于ChatGPT一些核心技术点(其实是InstructGPT,但我目前还没找到关于ChatGPT在InstructGPT基础上又做了什么大动作的资料)。总结起来就是
数据。在GPT-3原本的45TB恐怖数据量的基础上,又加入了人工标注数据。据说为了实现RLHF,OpenAI找了40多个博士标注了很长时间。这成本,这质量。这要是在国内,没点大病的Leader谁敢整这个活加入了prompt-learning,也是进一步验证了这个继BERT之后又一个全面流行起来的方法的有效性。该方法最大的价值就是可以大大提高模型的泛化性能加入了RLHF,即基于人工反馈的强化学习。这应该是原创的、最重要的,也是最具价值的点了。同时也验证了强化学习+NLP这条路,不仅是可行的,而且还是可以往上走到很高的地方的
最后,关于ChatGPT的一些思考
首先一个问题:为什么ChatGPT突然就火起来了?并且很快就火出圈了?
个人理解,答案就是几个字:效果惊艳,颠覆认知
实力真的是硬道理,比多少钱的宣传都好使。当我最开始上网看到ChatGPT的交互实例时,我满脑子都是woc。举一个我印象最深的例子,就是这个
来源:https://twitter.com/clowwindy/status/1599568181668253697?s=46&t=S0yFvZBhMWOOZ3oGh_QKrA
这个例子中,用户让自己扮演一个机器,机器上有一个带bug的程序,然后让ChatGPT扮演一个程序员,通过输入命令跟他交互,找到文件以及bug的位置,并修复bug
说实话我到今天都不太敢确认这个事是不是瞎编的。如果是真的,那ChatGPT所体现出来的交互性、记忆性以及逻辑性,绝对是颠覆性的。以我的理解,绝对没法相信现在的模型,基于大数据、概率论和最大似然估计这套东西,能完成这个事
但是ChatGPT的效果确实有目共睹,是实打实的好。一个事物想要火出圈,都得是外行看热闹,内行看门道。从大众角度,这个东西好玩,好玩过现在市面上所有的智能这个智能那个。从AI行业以及NLP领域从业者的角度,也能从ChatGPT的成功看到,困扰对话领域多年的内容连贯性、逻辑合理性、指代消歧、记忆性这些问题,都是可以得到解决的。另外,现在各大公司的架势都是在沿着大规模语言模型这一条路走到黑,而幸运的是,ChatGPT证明了,这条路还没有达到上限,还能继续往下走
还是上面提过的,虽然ChatGPT现在更像一个来自于实验室的demo,很难说现在马上就能落实到我们的生活中,去带来什么,去影响什么。但他的出现,这件事本身,就已经是对我们最大的影响了。给这个凛冬将临的行业,带来了一丝光和希望。而希望,就是最有价值的东西了
References
[1] Training language models to follow instructions with human feedback. https://arxiv.org/pdf/2203.02155.pdf[2] Illustrating Reinforcement Learning from Human Feedback (RLHF) https://huggingface.co/blog/rlhf[3] Improving Language Understanding by Generative Pre-Training https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf[4] Language Models are Unsupervised Multitask Learnershttps://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf[5] Language Models are Few-Shot Learners https://proceedings.neurips.cc/paper/2020/file/1457c0d6bfcb4967418bfb8ac142f64a-Paper.pdf[6] 全网唯一,不忽悠的ChatGPT 全网唯一,不忽悠的ChatGPT