前沿重器
栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经是20年的事了!)
2022年的文章合集,累积起来有60w字,在这:CS的陋室60w字原创算法经验分享-2022版。
往期回顾
前沿重器[26] | 预训练模型的领域适配问题
前沿重器[27] | 从遗忘问题到预训练轻量化微调
前沿重器[28] | 前沿的向量召回都是怎么做的
前沿重器[29] | ERNIE-Search:向交互式学习的表征式语义匹配代表作
前沿重器[30] | 聊综述-预训练模型在信息检索中的应用
最近的ChatGPT可谓是非常火,但是目前看的信息来看都更像是一些外宣类的文章,对于一些技术的讲解和解读,却是比较少的,这对于在做技术的我们来说其实挺尴尬,为了让大家更好地理解这个模型,给大家讲一些ChatGPT的技术细节以及我的理解和分析,而不是看热闹就完了。
懒人目录:
简单说说原理。
有关里面的细节讨论。
优点和缺点。
他真就那么强吗?
先叠甲,我本身不是做对话生成的,对这块比较陌生,再者对prompt也不是很擅长,所以聊的可能会有不对,大家轻喷。
说实话,现在知乎百度搜的内容,基本都是新闻和一些简述,很硬核的文章是真的难找,这里给大家一些推荐吧,这些事我看的比较好的材料,大家可以参考:
ChatGPT会取代搜索引擎吗?https://zhuanlan.zhihu.com/p/589533490,张俊林前辈的大作。
InstructGPT与Instruction Tuning: 管中窥豹ChatGPT,https://zhuanlan.zhihu.com/p/589734619。
ChatGPT内核:InstructGPT,基于反馈指令的PPO强化学习.https://zhuanlan.zhihu.com/p/589747432
ChatGPT/InstructGPT详解:https://zhuanlan.zhihu.com/p/590311003
剩下还有不少,我都会放在最后的参考里。
有这些资料,基本能够理解这个chatgpt的基本原理和技术点了。
这里我还是简单聊一下,主要思路是根据张俊林前辈的来会更好理解一些吧,主要是3个阶段。
通过人工标注等方式,使用监督学习的模式对GPT3模型(对这个是chatGPT模型的base)进行初步训练(有监督微调,SFT),从而得到一个初步能够理解语言的模型,尤其是prompt的模式。
训练回报模型,或者说打分模型,这是一个强化学习专用的概念(缺课的去补补哈),这个打分模型是用来给“提示-答案”这个组合打分的,使用的数据和阶段1类似,用模型生成的可选项,进行人工标注,最后构造pair wise的learning to rank任务训练得到。
第三阶段则是使用强化学习,即阶段2的回报模型reward来对模型进行训练。模型生成结果,reward进行打分,然后reward能够往前传递,这里有提到一个概念就是PPO(Proximal Policy Optimization[5]),是强化学习的一种策略,详情可看(Proximal policy optimization algorithms)。
可见,2阶段的回报模型是3阶段优化的关键,当且仅当这个回报模型足够的好,后续训出来的模型才是可靠的。
首先是强化学习,这点其实是我自己比较想聊的,毕竟在知乎,就是不久前其实就有不少的声音在说强化学习并不适合在NLP任务上使用,但在这里,强化学习似乎存在一定的,甚至比较大程度的贡献,说打脸应该没什么毛病,至少这个实验验证来看还是能用的,至于用得好不好,比其他策略好还是差,可能有待进一步实验。
在部分观点看来,强化学习的贡献似乎不是一个关键因素[1],强化学习强调的是用这个回报函数构造强化学习来进行调优,然而换个看起来比较下位的策略,就是基于这个回报函数,构造训练数据来直接finetuning模型,可能也能取得更好的效果,其实本质是调整为更为朴素的反向传播,可能也能取得类似的效果。
没试验过,不好说结论,但好像多少是有些道理的,具体可能要做消融之类的才能够充分验证吧。
在阶段3的训练过程中,可能会逐步偏离两个出发点的核心,分别是阶段1的有监督微调和阶段2的汇报模型背后的分布,对于前者,此处是对训练目标增加了一个通用的语言模型指标,一定程度保证模型的通用型,而后者,则是采用KL散度惩罚项的方式,惩罚那些模型生成的和汇报模型数据分布不一致的部分[4]。
数据应该是这篇文章,乃至背后的内核InstructGPT,其成功很大程度依赖一个关键因素,那就是数据,这个数据构造里面也是大有说法。
首先是阶段1,即有监督学习的数据,其实是人工标注的,标注的内容是,根据内容编写prompt来得到的,具体包括以下几种情况:
简单任务:标注者给出一个简单的提示,并且还要确保提示的多样性。
Few-shot任务:单个指示,有多个query-response对。
用户相关的:从接口中获取用例(实际对话的例子),标注者通过用例编写提示。
而在阶段2,其实就是要训练一个可靠的回报函数,这批数据的产生来源是模型,模型会生成一批候选样本,标注者会对他们进行排序,这个排序的背后其实就是打分了。
阶段3没有进行人工标注,是直接用GPT-3API的用户数据,对应不同的任务的数据,包含生成、问答等。
我们可能会猜想数据和任务的设计可能会很复杂,然而现在看来,好像比想象要简单一些,标注任务其实是简单的,然而对标注人员的挑战其实不小,例如对prompt的编写。
挺多文章都有聊过这套模型和方案的优缺点,我这里汇总一下吧,基本上是参考了[4]和[7]的,带了一些自己的见解。
首先是优点:
相比他们的base,即GPT3,具有更强的泛化和生成能力,最终预测的结果会有更真实,这点毋庸置疑了,大家都有去试这个东西,多少有些感受。
我想大家也有发现,模型似乎有更强的coding能力,对一些简单的任务,他是能生成可用可执行的代码的,这个点似乎在GPT3上也有体现,据说是因为本身这类数据也有在训练数据里。
有关安全性这点,有些文章会提到它的安全性有提升,但是在实际体验上,模型似乎还是会因为诱导,说一些妈见打或者是容易被封的言论的,这个特别指出,我自己是不太想把这个放在优点里吧。
至于缺点,其实还挺多的,这有待各位大神进一步深入研究。
首先还是大模型的问题,这个是大模型共有的问题,长期关注我的朋友都有发现,这个问题仍然是大问题,要解。相似相关的论点其实在车万翔老师的文章里也有提到[7],这其实会衍生很多问题,这点有时间我也会展开聊一下,此处先不赘述。
在通用任务上的能力会下降。这个可能是意料之中的事,毕竟他把任务专注到了特定的内容上了,别的领域或者任务就可能会出现效果下降的情况,前面有提到在损失函数上加上惩罚,这个能一定程度上有优化吧,但这其实还是专注任务和通用性之间的权衡罢了。
安全性问题仍旧存在,这点还是不好控制。
模型对prompt的过度敏感,这个可能和数据量有关吧,这个本身人工标注生成就有限,模型的训练只能依赖这个,很难避免,后续更好的方式还有待提出吧。
对长结果、详细结果的倾向性。
生成模型老生常谈的“一本正经的胡说八道”的问题,这个背后的原因很大程度和知识的原因有关,毕竟模型现在已经具备输出流畅结果的能力了,但和诺问题和知识挂钩,例如鲁迅的生卒年之类的问题,如果接触不到,自然就回答不了或者回答不对,此时模型会很直接的随便写个时间了。
这里其实人工标注的依赖比较明显,毕竟其实NLP场景,尤其是对话系统,其实很少有什么好的用户反馈路径,导致我们无法闭环获取可供训练的可靠数据。类似搜索、推荐可能还有点击数据,偶尔可能会吐槽一下数据质量问题,但是对话系统,很多时候是真的没有。
鉴于现在全网在吹,各种热度(em...包括我也在蹭),但是我还是想泼点冷水吧。我分几个角度来聊。
GPT其实吃过一次亏的,众所周知,GPT其实发布在BERT之前,BERT却取得了很大的热度,与之类似的还有ELMO这种里程碑式的技术被淹没,正面的例子也有prompt之前无人问,在综述出来后天下知,除了本身的效果原因,很大程度原因我自己更希望归结于一个优秀的外宣,其内核InstructGPT的发布时间是3月份,很多博客的原理解读其实都是围绕这篇论文来讲的,然而却在12月份火了起来,很大程度上和这个API接口的发布有关,他被搭建成一个可供用户交互的产品被发布出来,用的人多觉得有趣,而且很多人其实对这个领域不了解,用这个感觉很流畅就开始觉得很厉害了。
很多人可能试了几个就觉得牛,但其实本质上牛的点可能不见得是InstructGPT牛导致的:
流畅性这点,生成领域的不多说,现有技术基本能达到,差距可能只有在大的数据集下用统计指标测才可以分出高下。
试了几个就说牛,只能说是比较外行了。。。抛开统计指标谈效果没什么意义对吧。
有关coding的问题,考据到GPT3似乎就已经一定程度具备了,只是大家没有试罢了,具体效果不知道多好就不知道了。
所以我首先想说的,这个东西之所以火,很大程度是因为这次成功的产品化和成功的外宣,当然,背后的技术也撑得起这次的外宣,从而形成了团队、模型、产品的多方面成功。而作为技术人而言,也可能不只是技术人,想做的更有深度的话,在尝试完之后就该开始思考内部的技术细节以及我们能不能逼近和超越或者在他们基础上做一些什么别的事情。
再叠个甲,我没说技术不行,但是只把火或者是出头归结于技术,是肯定局限了的。
rumor最近发了一篇有关ChatGPT的闭环问题的文章(只有我一个人对ChatGPT感到蕉绿吗?),诚然对话系统的一个很痛的问题,就是闭环问题,对话系统在很多场景是真的没法闭环,哪怕是一些客服系统有“满意or不满意”之类的让用户填的东西,但是用户多半不填,量太少撑不住,所以归结起来我们很难得到闭环数据,先别说质量问题了。
然而ChatGPT做到了吗,我的观点是,前进了一步但是还不算做到。前进一步,是真的在用了生成,结合回报函数来进行迭代优化,但未算做到是因为他仍旧依赖了人工标注数据,这个数量可能在这个问题下比较少,但是泛用性约束在此,而且是在比较关键的1和2阶段,而且还不只是标注那么简单,而是去写prompt,这对标注人员能力要求似乎还更高了,再者,他这只是针对一个任务,而在多任务下,通用任务下,他的效果其实反而有所降低,这点其实在前面的文章里有提到。
也可能是我对闭环的要求比较高吧,一个反馈信息可以盘活整个系统,但是偏偏这个反馈,对话系统还是无法从根本上绕开标注这个用来做反馈优化的步骤。
工业界会更倾向于非端到端的模式来做,原因很多,这个我最近的文章正好就在聊这个(心法利器[78] | 端到端任务的拆解设计),主要是出于可控性、可维护性、安全性等原因吧,例如chatapi因为很多原因,大家对安全性的容忍度很高,但是到了很多实际产品中,安全性的问题可以被上升到很大程度,所以一定需要加以控制,而这种控制模型不见得能做得很好,所以很多时候我们会搭建一个生成模块后,会辅以一个安全模块来监控。
这个问题其实是生成领域里经常谈到的问题了,对于一些模型不知道的知识,模型在回答策略上更倾向于说一些通顺但逻辑上不对的话,不像人有更为丰富的对话策略(例如搪塞、反问或者直接拒绝回答),这里有好多衍生点:
让模型尽可能可以多获取或者多学习丰富的知识,但是学无止境,现阶段技术可能无法做得到。
模型可能需要具备更新知识的能力。
模型需要有意识地识别出什么问题能回答,回答的对不对等,其实有这个意识就已经是一个大突破了。
生成模型在对话策略的选择上,可以更为丰富,这点其实也是为什么非端到端的形式能成为主流的原因,因为策略上是可控的。
我觉得要分开看,这要把他区分为把chatgpt当做产品看,还是当做技术看。
如果是当做产品看,这个产品无疑是替代不了搜索的,一个很简单的道理,搜索需要多样性,这给一个答案的样子,很难满足很多多样化的搜索需求。这个本质更像是一个对话产品,一个功能相对丰富但是形态比较简单的对话产品,他只有文本回复,而没有更加多模态的回复(当然期待一手GPT4能做更多事情了),例如商品搜索、音乐搜索,这些事目前的他也做不到,所以说替代真的为时尚早。
至于当做技术来看,我自己是觉得,会成为一种比较新颖的方式吧,在一些问答之类的场景下,他能给出精准而又详细的回复,是可以当做是检索结果之一的,最终的筛选排序,可以进行综合判断,例如置信度高才出来,否则不出,其实也是不错的。而更深层次,这里的数据处理方式、训练策略等,这些东西可能会被借鉴,最终用在搜索里吧。
不会吧不会吧,不会真有人觉得程序员的工作只有写代码吧。
按照我的经验,对于一个熟练的程序员,写代码本身其实是时间最少也是最后的工作,难点在于,要写什么代码,写在哪以及怎么写,这也就是前期的技术方案确定,这件事对目前的AI来说还太难了,他可能可以帮你实现一个冒泡排序,但是他绝对不能告诉你该在哪里写,为什么要写。
对于现在的AI,顶多只是个生成器罢了,而且,最近也有消息流出Stack Overflow禁止 ChatGPT,上面说的一本正经的胡说八道的问题在程序员这个领域会被放大的,因为他说的话我们也无法完全判别对错,只有去尝试才会知道,踩坑了就真的坑。
怎么说呢,我们手里有技术,不该把这事当做一个危机,而应该是一个机会吧。
[1] ChatGPT会取代搜索引擎吗?https://zhuanlan.zhihu.com/p/589533490
[2] InstructGPT与Instruction Tuning: 管中窥豹ChatGPT,https://zhuanlan.zhihu.com/p/589734619
[3] ChatGPT内核:InstructGPT,基于反馈指令的PPO强化学习.https://zhuanlan.zhihu.com/p/589747432
[4] ChatGPT/InstructGPT详解:https://zhuanlan.zhihu.com/p/590311003
[5] Proximal policy optimization algorithms
[6] 哈工大车万翔:自然语言处理范式正在变迁:https://mp.weixin.qq.com/s/FoY888g9nv5mw2kz4IWY5A
[7] 只有我一个人对ChatGPT感到蕉绿吗?https://mp.weixin.qq.com/s/vKiy2zEPWa9FL4BFJpUgcQ
[8] Training language models to follow instructions with human feedback:https://arxiv.org/abs/2203.02155