提纲
1 简介
2 ChatGPT
3 讨论
4 总结
参考文献
1 简介
本来不想写关于ChatGPT的内容,毕竟已经有很多大佬出来解读了,我个人的见解还是远远赶不上。但是最终出于很多考虑,还是决定写一下,一方面是这几个月看了很多大佬的解析,实在是收益匪浅,另一方面也看到了不少蹭热度的文章,有点胡说八道的嫌疑。于是在这里记录下一些想法吧。
**ChatGPT是OpenAI提出的专门针对对话设计的语言模型,它可以通过以对话的形式进行交互,对话形式使得ChatGPT可以回复后续问题,承认错误,质疑不正确的前提并拒绝不适当的要求。**
图1: ChatGPT如何评价ChatGPT
2 ChatGPT
跟ChatGPT最接近的模型是22年上半年发布的InstructGPT,据官方说明, **ChatGPT跟InstructGPT的区别在于数据收集中的些许不同** ,具体有多大差异就没解释,不少人猜想ChatGPT可能特地针对对话场景在数据搜集的方式做了调整,加了很多经过设计的对话数据。至于模型的训练方法,跟之前的InstructGPT如出一辙,这里以InstructGPT的方法为例展开。
图2: InstructGPT训练流程
图3: ChatGPT训练流程
整个训练流程分为以下三个部分。
a) **通过人工收集的示例样本,通过监督学习的方式先finetune得到一版生成模型SFT。** 常规的finetune操作,用特定场景的数据在大模型上训练下,使得大模型更加适配当前场景,没什么好说的,懂得都懂。具体点,第一步的finetune过程中,发现当训练超过1个epoch后模型在验证集上就已经过拟合了,但是继续训练对于后续步骤的reward模型是有帮助的,于是在这里总共训练了16个epoch。过拟合也不是什么一直都是有害的。
b) **利用上一步生成模型生成的候选结果,利用人工对结果进行比较并打上标注,训练一个对应的reward模型** ,能给生成模型的回复打分,分数越高代表回复越受人类青睐。第二步中的reward模型是继承的上一步finetune得到的模型SFT,移除掉最后一层网络,并接上一个简单的全连接层,模型接收“prompt+回复”作为输入,输出一个对应的标量reward。使用的是6B的模型,不使用175 B的GPT3大模型是担心训练不稳定,这也是大模型的一个问题,没有太好的解决方式。 **训练目标不是pointwise,而是pairwise,将多个候选结果两两比较。** 每次让模型SFT生成K(K的取值4到9之间)个候选结果,让标注人员按照合理性对全部候选结果进行排序,训练的loss就是比对所有候选结果两两之间的排序结果。例如下图中,在给定x(常说的prompt)条件下,候选结果(常说的回复)yw 如果比yl 更合适,那么我们希望他们之间的reward之差尽可能大,通过sigmoid跟log函数后的值的就尽可能大,加上负号就是损失尽可能小了。
图4: reward模型损失
关于为什么这里选用的pairwise的方式,并选用较大的K时,可能有两个原因。一个原因是对于标注人员而言,读懂x会花费大量时间跟精力,而读懂x后对多个y进行排序则没那么费力,一个x搭配一个y的pointwise方法太低效了,另一个原因是1个x对应K个候选结果可能得到K*(K-1)/2的pair,但是计算着K个候选结果的reward只需要进行K次推理即可。也就是每一个候选结果可以算K-1次损失,但是它的reward之需要计算一次。
c) **利用上一步训练好的reward模型,用强化学习的方法通过最大化reward的方式来对第一步训练完成生成模型SFT做进一步的训练优化** 。优化目标如下图所示,黄色部分是希望生成模型生成的回复更符合reward模型的要求,让生成模型生成reward模型打更多分的话术。蓝色部分是一个正则项,希望生成模型不断优化,但不要偏离第一步完成的SFT模型太远。这两部分就是PPO的目标,而绿色部分是语言模型预训练的损失(ptx),是为了防止语言模型在其他数据上性能下降而加入的。
图5: RL损失
最终结果如下图所示,可以看出第三阶段的训练对于整体性能的提升非常明显。
图6: 模型评测结果
3 讨论
RLHF
Reinforcement Learning from Human Feedback确实很重要,但是重要的是RL还是HF?目前不少人认为human feedback更为重要,只要能搜集到足够多高质量数据,做常规的finetune也能得到很不错的模型,不一定需要强化学习,也就是只用到上述流程中的第一阶段即可。
DATA
训练数据的质量,多样性对于RLHF是不能欠缺的,可以从InstructGPT,Sparrow等论文中看到,人工标注的训练数据量级都是数万,对于大模型的训练而言应该是非常渺小的, 但是由于对于标注的严格要求,这批数据对于模型效果起到非常关键的作用。
Model
ChatGPT的成功离不开底层的GPT3.5,要训练好这样的一个模型国内也没几个公司可以做到,也不是一朝一夕能够做到的,有的大模型的价值只是为了刷榜,orz。网上也有人直接用对话形式对比这些大模型之间的差异,感觉也不太合适,毕竟国内很多大模型不是针对对话设计的,这样对比有点有失偏颇。
Bert+finetune还是GPT+few shot
跟大多数人一样,在预训练模型+finetune的时代,我算是比较坚定的Bert+finetune这一派,很大程度归因于我是面向业务的,做的大部分业务都对于可控性有严格要求,随便一个bad case就可能被带上风口浪尖。ChatGPT的出现还是让我想法有了很多改变,当初凭着神经网络淘汰掉特征工程的那批人,会不会在下一个路口被一批新的人淘汰呢?据说刚进入这个领域的人
ChatGPT无敌了吗?
也不见得,在[对话机器人之InstructGPT](http://mp.weixin.qq.com/s?__biz=Mzk0NzMwNjU5Nw==&mid=2247484588&idx=1&sn=6b84371768c28e78a21252367bc16da6&chksm=c379ada6f40e24b0ca8b862973b22ba66eb238091916b4870e67164ec55689140af36fa6b25b&scene=21#wechat_redirect)那篇文章里,我提及了ChatGPT相比于Sparrow,LaMDA有两个潜在的问题,
a) 不具备检索外部知识源的能力,我当时瞎猜是不是不好调google搜索的api,我能想到的问题,OpenAI怎么想不到呢,于是就出现微软Bing的新版本要接入ChatGPT的能力。
b) 没有为生成结果的安全性等方面额外设计任务,我在安全性这些方面OpenAI还是花了蛮大功夫的,只是在博客或者InstructGPT的论文没有体现。我怀疑它有一个后处理模块,专门针对这些问题进行过滤。因为网友们发现的涉及政治,宗教,道德伦理等bad case或者热度极高的催眠教程总是在很多时间内被官方修复,从时间节点看,不大可能是生成模型本身短时间内能优化得到的结果。
**实测后确实感叹到ChatGPT的强大,但也不是万能的,还是能测出一些安全性问题,一本正经的胡说八道,忘记对话内容等等。**
OpenAI vs Google
目前网上有不少人都在唱衰谷歌,从技术上看,我觉得在技术上Google并不落后于OpenAI,只是大家对于创业公司有更高的容忍度,就OpenAI测出的bad case,放在Google身上,网友早就爆炸了。
禁用ChatGPT
试想一下,如果以后小说网上的小说是ChatGPT编的,知乎或者百度上的答案是ChatGP T写的等等,等到大部分网络数据都是ChatGPT写了以后,网上的数据还有多少可信?预训练模型的数据还能从网上收集吗?会变成ChatGPT自己学自己吗?这样想想是不是就能理解国外很多大学跟网站为什么要禁止ChatGPT的使用了?
4 总结
ChatGPT的出现还是惊艳到我了,上一个如此火热的话题还是元宇宙(我确实想象不到未来的世界),想当年Bert出现的时候异常兴奋,觉得大展身手的时候到了,ChatGPT出现则带给了更多是思考,个人能在这里做点什么呢?模型又不开源(OpenAI真的不改名叫做ClosedAI嘛) ,即便开源了在我的场景下能怎么用?怎么写prompt?怎么部署?成本跟收益真的cover得住吗?。。。
历史的车轮滚滚向前,像我这样的普通人,只能去拥抱变化,期望能够跟上大佬们的脚步,在可能的风口上做个会飞的🐷。
参考文献
-
InstrucGPT论文: https://arxiv.org/abs/2203.02155
-
机器之心解读: https://jmq.xet.tech/s/2lec6b
