ChatGPT参数只有200亿?扩散代码模型,意外泄露
添加书签![](https://static-img-job.rpa-cn.com/www.open-cx.com/2023/11/20231101114034900.jpeg)
专注AIGC领域的专业社区,关注微软OpenAI、百度文心一言、讯飞星火等大语言模型(LLM)的发展和应用落地,聚焦LLM的市场研究和AIGC开发者生态,欢迎关注!
微软的研究部门发布了一篇关于预训练扩散代码模型CodeFusion的论文。在展示代码生成任务的基线数据对比时,发现了一个有趣的事情,ChatGPT(gpt-3.5-turbo)的参数只有200亿。
要知道,gpt-3.5-turbo是OpenAI中应用最多、最成熟的型号之一,而它的前任GPT-3.5已经公布是1750亿参数。如此小的参数,在性能、效率方面比大参数的模型更强,使用价格却更低。
这也从侧面验证了年初Meta首次开源Llama时的说法,小参数的模型在庞大、高质量的数据集训练下,性能并不一定就比高参数的差。
事实上,很多国内外知名的开源大模型项目如百川大模型、LLaMA-2、Falcon-40B等,在多个知名评测中击败了更高的参数模型,资源消耗却更低。
论文地址:https://arxiv.org/abs/2310.17680
言归正传,继续为大家介绍微软发布的这个创新代码模型CodeFusion。
GitHub Copilot Chat等产品已经充分验证了大语言模型在编程领域的可行性和重要作用,通过文本描述就能快速生成各种类型代码,极大提升了开发效率。
但是生成的代码经常会出现错误、质量不佳等难题,为了解决这一痛点,微软提出了创新代码模型CodeFusion。
CodeFusion与传统代码模型不同的是,引入了“扩散过程”模式,通过逐步添加噪声,让代码从简单向复杂过渡,然后再逐步减少噪声回到纯净状态。
受Midjourney等扩散模型启发,研究人员设计了独特的“去噪”机制,使得模型可以自动学习代码语法,生成更精准的高质量代码。
为了评估CodeFusion的效果,研究团队在多种编程语言上进行了比较。包括Python、Bash和Excel公式。与T5、CodeT5、GPT-3、CodeGen等主流代码生成模型相比, CodeFusion取得了惊人的效果,无论是单次生成的成功率,还是多次生成后正确代码出现的概率,都有明显的优势。
在Python语言上, CodeFusion的单次生成精确度达80.7%,超过了GPT-3;考虑前5次生成, CodeFusion包含正确代码的概率高达90.3%,其它模型最高只达到85.8%。在Bash和Excel语言上, CodeFusion同样表现出了强劲的性能。
在代码多样性测试中, CodeFusion生成的前5个候选代码,新增代码行覆盖率达到81%,是其它模型的两倍之多。
值得一提的是, CodeFusion只有7500万参数,远小于测试模型中的数十亿、上百亿甚至上千亿参数模型。这也再次验证了上面所说的小参数模型,同样可以比高参数模型性能更强。
CodeFusion评测数据
从论文介绍来看,CodeFusion的架构主要包含编码器、去噪器和解码器三大模块。
编码器
编码器的作用是将自然文本提问的编码转换成向量表示。编码器会先将自然语言文本进行分词,然后输入到一个预训练的转换器编码器中,例如T5的编码器。每个词会被映射为一个稠密的词向量。
接着,转换器编码器会通过多层自注意力和前馈全连接网络,学习输入文本的上下文语义信息,输出文本的最终语义向量表示。主要技术关键点如下:
使用预训练模型:直接利用在大规模语料上预训练的编码器,可以有效学习语义信息,无需从零训练。
输出全局语义向量:通过自注意力捕获输入文本的全局上下文语义,不同位置的词语都互相影响,最后形成整体的语义向量。
高效编码:相比RNN等顺序模型,转换器编码器可以高效并行计算,对长文本也有很强的建模能力。
去噪器
去噪器的作用是进行扩散过程,向编码器输出添加高斯噪声。去噪器会首先随机初始化一个噪声向量,然后依据扩散步数,通过加权平均的方式,将编码器输出语义向量与噪声向量融合,得到噪声新增的隐状态向量。
随着迭代步数增加,融入的噪声占比会渐渐增大,所以状态向量会逐步偏离原始语义,加入更多随机性。这模拟了物理扩散过程。
去噪器的输出是一个噪声复杂程度逐步增强的状态序列。这为解码阶段提供了一个从简单到复杂的目标函数,使模型更容易优化。
解码器
解码器需要逐步从复杂的噪声状态中,还原出编码器对应的源文本提示语义,以生成准确、高质量代码。
解码器会使用类似的转换器结构,每一步接收上一步去噪器输出的状态向量,并结合源语义向量,通过自注意力学习状态内部的语义,并通过交叉注意力学习与源语义的匹配关系。
然后,解码器需要预测从当前状态中需要减去的噪声量,以获得上一步的干净状态。重复这一过程,直到还原出源语义向量。
最后,解码器完成从扩散隐状态到源语义再到代码符号的映射,实现了从自然语言提示到代码的转换。
本文素材来源微软CodeFusion论文,如有侵权请联系删除
END