前几天有一篇微软的论文引起了研究人员的注意,虽然一部分人已经知道了很多人真正关注的点。但是,这篇论文本身也很有意思,我们还是先介绍一下这篇文章,然后再讨论最有意思的一个点。
1.用Diffusion模型生成代码?
可能有人一上来就感到疑惑,特别是对AI有一定熟悉度的朋友,很多人也许会问“Diffusion模型不是AI绘画用的模型吗?为什么拿来做自然语言处理的活了?”
哎,其实在前不久的一篇专栏中也提到了一个用语言模型生成图片的工作:
【花师小哲】当代炼金术(神经网络)前沿(44)——语言模型战胜了Diffusion?!
大家还是要建立一个认识,一套模型架构不是只能针对同一种任务来设计,况且很多任务之间都是有办法相互转化的,我在学神经网络初期也一度以为CNN(卷积神经网络)就是只能在CV(计算机视觉)领域用的,实际上NLP(自然语言处理)也可以用。
事实上,代码生成很多时候也不是被当做自然语言生成的一个子集来处理的,根据原语生成、根据AST生成以及各种奇形怪状的网络都拿来作为代码生成的模型的,只不过LLM(大语言模型)出现后对代码生成任务的其他研究造成了降维打击,现在才开始流行Code LLM。
言归正传,Diffusion模型本质上只是学习一个去噪器,并没有绑定图像生成任务。
2.具体架构
好了,我们之前只是说了Diffusion能作为代码生成模型的可能性,但是想法要落地还是需要给出方案的,直接上图:
我们不细讲这张图了,这向来不是这一系列专题的目标(目标就是告诉大家现在AI都在搞哪一方面的研究,这样搞有什么好处以及个人和这个主题相关的小故事等。对提到论文的具体方法有兴趣的大家自行查看原文)
但是对于图生成Diffusion模型大家应该很熟悉它们的输入输出,实际上,输入是随机噪声,因为Diffusion的核心是去噪,就是上图中中间的那个东西。我们输入的文本一般被叫做prompt,实际上是作为一种“附加信息”的,对应于图中左侧的结构,只不过图中是把自然语言(就是要求模型最终生成什么功能的代码)输入了,Encoder的作用只是把自然语言变成模型能理解的信息(所以叫编码器嘛),右边的Decoder(解码器)的作用就是把去噪器的结果转换成人类可以理解的形式,在一般的图生成Diffusion模型中输出是图像,这边就是代码了。
3.优点与缺点
简单说几个这样做的优点与缺点吧
优点:1.Diffusion也是研究的比较成熟的模型了;2.这样做的好处是能一定程度上保证代码生成前top n的稳定性(语言模型的采样随机性还是太大了)
缺点:1.慢。可能大家能体会出来,现在的ChatGPT等模型实际上很多已经能生成的非常快了,但是很多AI绘图还是需要等一段时间的;2.最大的问题还是多样性低。目前模型只能解决英文输入和少数编程语言,而且知识储备也存在一定的问题,拿来刷几个榜倒还可以(实际上这个模型很小的,效果也已经很不错了),但放到实际问题中应用还是太有限
4.ChatGPT的参数量
没错,重点来了,在这篇论文的一个表格中,竟然明晃晃地写着ChatGPT的参数量只有20B。
我们知道,GPT-3的参数量是175B(也就是1750亿),虽然GPT-3.5家族很多也不是基于175B的GPT-3修改来的,但ChatGPT这种强大如斯(世界上只存在两类模型,一类是GPT-4和ChatGPT,另一类是其他模型),难道真的就20B吗?要知道,现在市面上比20B大的模型一抓一大把,然而和ChatGPT的能力比起来简直更是一个天上一个地下(希德:没错我又来客串了,我就是那个习惯用别人更少的魔力和对方打五五开的变态。再次证明希德就是大模型(bushi)
关于这一点,大家也是有各种猜测:
(1)应该是微软人写错了(简单笔误),实际上应该是120B或者200B之类的(众所周知,微软对OpenAI投资是很大的,微软很可能确实知道ChatGPT和GPT-4的技术细节)
(2)从ChatGPT刚发布的时候,很多人就猜测可能比175B还大,所以就是单纯写错了(不是笔误的那种),主要依据是强大的能力
(3)确实只有20B,甚至是10B的规模。这主要是由于ChatGPT的速度实际上是很快的,刚出来的时候就有人算过,ChatGPT的参数量应该不会很大
(4)ChatGPT的参数量是慢慢变小的。有些学者认为,一开始版本的ChatGPT确实很大,但是随着版本更替,参数量逐渐变少了,主要是是因为(体感上)ChatGPT的速度实际上是变快的,也就是OpenAI一直在蒸馏模型(蒸馏简单来说就是把大模型的能力压缩进小模型),OpenAI最近确实很关注压缩视角的大模型,这不就对上了嘛。
当然,在这时候还要保证ChatGPT的能力不会下降,实际上我们可能是需要一个比ChatGPT大得多的奖励模型的,换句话说,ChatGPT现在的20B的背后可能是一些更大的模型,甚至可能比GPT-3的175B还要大。之前也有小道消息说OpenAI其实相比于市面上的人来说更加关注那个看起来好像是用完就扔的奖励模型的,也许我们相反了,不是用一个小的奖励模型来对齐大的实际的模型,而是一个大的奖励模型对齐一个小的时间模型(这一步,OpenAI又在大气层了)
当然,以上全部都是猜测,大家也就当看个乐就行了。