chatgpt横空出世引发的一些思考
一、前言
最近很火的chatgpt进行公测,虽然不开放给中国地区但是很多小伙伴在淘宝购买账号或者购买虚拟号码注册来获得使用权,经过我一段时间的试用发现会比之前的gpt3对话更加流畅,chatgpt他能记住之前的对话内容,并且结合上下文和你进行对话,会对你的一些指示进行回答,chatgpt的输出质量确实会好很多,且会根据分点总结来回答。
chatgpt回答
但是openai并没有放出chatgpt的论文,只放出了instructgpt论文,openai表示instructgpt和chatgpt训练过程极为相似,chatgpt的主体模型和gpt3是一样的主要是训练方式的改进,所以以下内容基本是参考instructgpt的训练过程来讲的。
chatgpt的训练过程是结合了强化学习 ,我记得在知乎很多话题对nlp使用强化学习没啥信心。chatgpt的工作给生成任务 和强化学习在nlp的应用带来启示。
nlp和强化学习的讨论
二、chatgpt训练过程和原理
chatgpt训练步骤
1、对话数据进行有监督微调(Supervised FineTune,SFT)
chatgpt和gpt3不同的地方是训练并不是完全采用无监督在大量语料训练,chatgpt的起名chat其实他的重心也是方法对话上,完全的无监督训练很难保证聊天对话生成的合理性,openai也是在设计之初考虑了这点,Bert这种mask lm模型走的路也是无监督+有监督道路,chatgpt其实也是想走这条路。
监督对话数据来源:
- gpt3和openai其他对话api所保存下来的数据。
- 请40名标注人员来标注对话数据。
根据论文描述instructgpt在SFT过程中使用了余弦学习率训练了16epoch,并且发现过度拟合了对话数据集,后续发现过度拟合对话数据反而对于后面两阶段训练更加好。并且在进行监督学习的时候还引入了指示学习(Instruct Learning),指示学习 和提示学习是非常类似,下面会详细介绍下指示学习。
2、RM人工反馈模型
人工反馈机制我认为是对生成任务的一种比较好的改进,总所周知生成任务的评价一直是业界难题,评价指标经典的代表有BLEU、METEOR和ROUGE,基本都是基于ngram方式来对比,这样的评价方式很局限,基本都是要人工辅助判断。openai引入第二个模型进行对生成质量进行打分,可能是参考了gan中鉴别器和生成器,生成器负责生成,鉴别器负责对图像打分,训练的时候往复这个过程提高生成质量。RM人工反馈模型 本质上类似于回归模型, 就是将SFT微调之后的模型拆掉最后一层,论文中也说了1750亿参数 的模型在训练时很不稳定不能作为强化学习的目标值函数,改成了60亿参数 的模型训练稳定减少大量计算代价**,**RM的数据集是通过40名标注员对chatgpt生成质量进行打分。
在RM模型训练过程中如果是数据集单条更新前向传播是很容易造成RM模型过拟合,openai采用使用生成k(4<k<9)条数据进行打分,只前向更新一次这样避免RM模型过拟合。
RM模型的损失函数是最大化k条生成数据中标注者对最喜欢的生成样本和最不喜欢的生成样本之间的差值。
RM模型损失函数
公式中是提示和响应在参数为的奖励模型下的奖励值,是labeler最喜欢的生成样本,是labeler最不喜欢的生成样本。是整个训练数据集。
3、强化学习(PPO)
PPO(Proximal Policy Optimization)算法是一种新型的Policy Gradient算法,Policy Gradient算法对步长十分敏感,但是又难以选择合适的步长,在训练过程中新旧策略的的变化差异如果过大则不利于学习。PPO提出了新的目标函数可以再多个训练步骤实现小批量的更新,解决了Policy Gradient算法中步长难以确定的问题。强化学习一般训练难度很大,很容易不收敛。
PPO在训练过程中主要会遇到以下问题:
- 在强化学习训练中强化学习模型输出与强化学习值函数结果差距过大会导致RM奖励模型过度优化。
- 在强化学习中拟合PPO数据集也会导致模型在nlp通用任务上带来下降。
openai在训练的时候针对以上问题提出了解决办法:
- 避免输出和值函数差距过大所以在损失里面加入了KL惩罚项,使得输出结果和SFT微调的模型不会差距过大,从而缓解RM模型过度优化问题。
- 将预训练梯度和PPO梯度进行混合,用以提高PPO模型的通用任务的效果,在损失函数中加入了称为PPO-ptx。
PPO损失函数
三、指示学习(Instruct Learning)
像最近两年很火的提示学习(Prompt Learning)被称为NLP领域的第四范式,在少样本和零样本中能够带来超越微调的能力,指示学习和提示学习又有哪些异同点?
指示学习来源一篇Finetuned Language Models Are Zero-Shot Learners 文章,由Deepmind发表。想通过prompt来提升模型效果,激发语言模型在大数据上训练获得语言补全能力。
提示学习主要是利用mask lm模型在预训练的时候进行填空补全学习到上下文的任务,在微调阶段同样利用填空补全的方法。
提示学习的例子:
[cls]今天天气是[MASK]。[SEP] 今天天上都出太阳了,阳光明媚。[SEP]
这个是对于天气分类任务的例子,提示学习的话主要是将分类任务转化为填空补全任务,从而更好的利用预训练模型的能力。但是也有些缺点就是分类类别很多的时候,提示学习构建标签映射表就会非常庞大工作量也会很大。针对这些缺点我也做了改进方法,具体可以看我另一篇文章。
归来仍是少年:基于prompt方法打败传统微调
因为chatgpt的预训练方法也不是采用的mask lm方法,所以提示学习这种填空补全的就不是很适用,指示学习的prompt是直接告诉模型需要做什么,而不是像提示学习需要模型去猜。
chatgpt指示学习模板
主要模板分为三种Brainstorming(头脑风暴)、Generation(生成)、Rewrite(重写),让模型在训练阶段都采用指示学习的方法生成,指示学习可以让生成的内容更加可靠,约束模型乱生成的现象。
让chatgpt写诗让chatgpt写文本分类代码让chatgpt写个工作报告补充生成字数要求
从上面几张与chatgpt对话的内容可以看出来指示学习能让人与chatgpt带来更多的互动,这样就不会像我说一句你就生成一句,他还会结合上下文来做生成。指示学习算是chatgpt训练的一大亮点,也是nlp之后需要探索的重点方向之一。
四、chatgpt能够结合上下文的原理猜想
这次我们试用chatgpt的时候发现,chatgpt居然能结合我们的上下文 来回答,像gpt3这种都还是一问一答式的,openai 在instrutgpt论文中并没有提到这一点。但是我们知道要实现这种上下文功能 在多轮对话时是利用对话管理模块 ,我这里提出一个假设(只是大胆假设,因为没有证据,仅供参考)像gpt3这么大参数的模型除了模型层数的扩展之外,其实还有输入token数也变多了很多,这样可以讲上文对话内容 加上当前语句输入到对话中就可以让模型能够联系到上下文,因为chatgpt线上推理时一定开了很多进程,每个人的对话模型不可能记得不然就精分了,只能依靠输入上文内容来得到此类信息,但是我估计openai在此类处理上应该也是加入了窗口,具体这个窗口有多大的话,只有openai自己知道了。
五、chatgpt不足之处以及未来展望
chatgpt的出现足够让所有人惊艳,感觉有人工智能那种味道了,但现在nlp的发展还是处于初步阶段距离真正的智能还有很远的距离,chatgpt也是存在一些缺点需要改进。
- chatgpt的生成还是会存在一些错误,看着大体是对的,但是一些核心东西可能错了,会误导使用者。
- 生成的东西有时候过于模板化,可能也是训练数据中是比较正规的文本,缺乏多样性。
- 如果人们发出错误的指示,很容易把chatgpt带偏。
- 之前知乎上热门话题,chatgpt是否能当作搜索引擎使用,我觉得搜索引擎一大特点主要是对内容时效性要求比较高,而chatgpt的训练数据都是2021年前的语料,在时效性上面差了不少。
- chatgpt和gpt3的主体模型是一样的,都是1750亿参数,无论是训练还是推理代价都是极大,如果能小一些的模型也能达到如此效果,会大大增加实用性。
- RM的奖励模型标注主要来自于40名标注人员,对于生成内容的打分偏好也是依赖于这些人的认知,如果能够增加更多不同地区的人来进行生成内容的打标,可能使得RM对生成内容打分更加精准降低偏差。
- 训练语料中英文语料占96%,其他语言只占4%,希望能平衡占比,多增加其他语言的训练样本(哈哈哈,具有一定私心)。
总结和展望:看了openai研发出chatgpt,心里也是五味陈杂,国内的ai技术还是比美国这种ai科技强国差太多了,国内一般只会做能赚钱落地的业务,像这种不惜代价探索前沿科技的研究机构还是太少了,希望中国也能出一个像chatgpt这种惊艳世界的产品。
六、参考文献
1、https://arxiv.org/pdf/2203.02155.pdf