ChatGPT中文叫作生成式预训练Transformer。生成式的意思就是类似于语言模型那样,一个Token一个Token地生成文本,也就是上面提到的解码器的原理。预训练刚刚也提过了,就是在大量语料中训练语言模型。GPT模型从GPT-1到GPT-4,一共经历了5个版本,中间的ChatGPT是3.5版。GPT-1、GPT-2和GPT-3都是有论文发表的,接下来分别介绍它们的基本思想。GPT-4也没有论文发表,只有技术报告,不过里面并没有技术细节。
GPT-1和BERT一样,用的是下游任务微调范式,也就是在不同下游任务数据上微调预训练模型,如图

GPT-1基本结构,用的是Transformer的解码器,不过这里因为没有编码器,所以不需要有和编码器交互的多头注意力模块。上图右边,这是GPT-1在各种下游任务上的处理流程。简单来说,就是针对不同的任务构造不同的输入序列,然后丢给GPT-1获取Token或句子的Embedding表示,再通过Linear+Softmax输出结果。Linear是一种最基础的网络结构,也就是线性映射,这里用于维度转换,转为输出需要的大小。Softmax主要用来把输出映射到概率分布(概率和为1)。这种拼接输入的方法在当时非常流行,紧跟其后的BERT也使用类似的方式,并引领了一个时代,直至ChatGPT的出现让我们进入大语言模型时代(不过,针对很多传统NLP任务BERT依然具备优势)。统的处理方法能够减小不同任务对模型的适配难度。因此不管什么任务,都想方设法将其变成一个席列就行比如在图中,相似匹配就是把两句话直接拼接起来,预测它们是否相似(输出标签为1或0)
GPT-1的这篇论文还有几个点,
- 第一,预训练模型中的每一层(图中的淡黄色模块)都包含用于解决目标任务的有用功能,多层(意味着模型更深)有更多能力;
- 第二,随着参数的增加,零样本获得更好的性能。简单总结就是,模型大了不仅能学到更多知识,有助于解决下游任务,还表现出了零样本能力。这里的零样本(zer0-shot)是指直接给模型输入任务,让它输出任务结果。与此类似的还有少样本(few-shot)和单样本(one-shot),即给模型提供一些(或一个)示例,然后给出任务,让它输出任务结果。
有了上面的结论,你是不是想看看更多层(更多参数)的表现如何?GPT-2来了,参数量从GPT-1的1.1亿增加到了15亿,增长了十几倍。GPT-1的博客文章“mproving languageunderstanding with unsupervised learning”中有一个“未来工作列表”,排在第一位的就是扩大规模,还有两个分别是提升微调,以及更好地理解为什么生成式预训练能提升NLU能力。
GPT-2是GPT-1的升级版,主要在两个方面进行进步研究:首先是扩大规模,然后是零样本。如果说GPT-1是观察到了“规模大、能力强的零样本”这个现象,那么GPT-2就是进一步研究这个现象。其结果自然是,模型越来越大,参数越来越多,能力越来越强GPT-2进一步验证了GPT-1的想法,下一步要做的就是继续扩大规。
GPT-2中的Token生成策略,也就是生成下一个Token的方法。前面介绍过比较优秀的集束搜索,不过它有两个比较明显的问题:
- 第一是生成的内容容易重复,
- 第二是高质量的文本和高概率并不一定相关(有时甚至完全没有关系)。
简单来看,这两个问题其实可以归结为一个问题:生成的内容依然确定性太大。人们更希望有“不一样”的内容,而不是完全可预测的内容。
现在,我们介绍一种基于采样的方法,简单来说,就是根据当前上下文得到的概率分布采样下一个Token。这里可以用一个温度(temperature)参数调整输出的概率分布,参数值越大,分布看起来就越平滑,也就是说,高概率和低概率的差距变小了(对输出不那么确定);当然,这个参数值越小的话,高概率和低概率的差距就会更明显(对输出比较确定):如果这个参数值趋近于0,那就和贪心搜索一样了。
还有一个重复惩罚参数(repetition penalty),它可以在一定程度上避免生成重复的Token。它和温度参数类似,只不过是将温度放到了“已生成的Token””上。也就是说,如果有Token之前已经生成过了,我们就会在生成下一个Token时对那些已生成的Token的分数进行平滑,让它们的概率不那么大。所以,这个参数值越大,越有可能生成和之前不重复的Token。
2018年的一篇论文”Hierarchical Neural Story Generation”另外介绍了一种新的采样方案,它很简单也很有效果,它就是GPT-2里使用到的Top-K采样。简单来说,就是在选择下一个Token时,从[op-K(根据概率从大到小的前K个)个Token里面选。这种采样方案不错,不过还有个小问题,就是Top-K采样其实是一种硬截断,根本不管第K个概率是高还是低。在极端情况下,如果某个词的概率是0.99(剩下的所有词加起来才0.01),K稍微大一点就必然会囊括进来一些概率很低的词。这会导致生成的内容不连贯。
2019年的一篇论文”The Curious Case of Neural Text Degeneration”提出了另一种采样方案-Top-P采样,GPT-2里也有用到这种采样方案。这种采样方案是从累积概率超过P的词里进行选择。这样,对于概率分布比较均匀的情况,可选的词就会多一些(可能几十个词的概率和才会超过P);对于概率分布不均匀的情况,可选的词就会少一些(可能两三个词的概率和就超过了P)。
Top-P采样看起来更优雅一些,两者也可以结合使用。不过在大部分情况下,当我们需要调参数的时候,调一个参数就好,包括前面的温度参数。如果要调多个参数,请确保理解每个参数的作用。最后需要说明的是,任何一种采样方案都不能100%保证每一次生成的效果都很好,也没办法完全避免生成重复的句子,也没有任何一种采样方案在任何场景下都适用。
GPT-3因为它的参数已经达到其他任何模型在当时都望尘莫及的量级–1750亿,是GPT-2的100多倍,没有开源。GPT-3既然有零样本能力,不调参数,顶多就要几个例子(预计下一步连例子也不要了),GPT-3就能帮你完成它们。
横坐标是样本数量,纵坐标是精准度。图1-9提供了如下信息。
- x-shot(x表示zero、one、few)在不同参数规模下差别巨大,大语言模型有超能力。
- ·在大语言模型下,单样本效果明显大幅提升,增加提示词会进-步大幅提升效果,
- 少样本的边际收益在递减。大概在8样本以下时,提示词作用明显,但从单样本到8样本,提示词的效果提升幅度也在递减。当超过10样本时,提示词基本就没有作用了。
总而言之,大语言模型具有In-Context(上下文)学习能力,这种能力使得它不需要针对不同任务再进行适应性训练(微调),大语言模型用的就是它自己本身的理解力。
接下来,我们再直观地感受一下利用这种In-Context学习能力完成任务的方式,如图下图:
图右边的微调方式需要先根据训练样本更新模型参数,之后再进行预测。图左边的三种方式都利用了大语言模型(large language model,LLM)的ln-Context学习能力,不需要更新模型,而且看起来也都不复杂,只需要按照格式把输入构建好,然后传给模型进行预测就可以了。
下一代InstructGPT(也是ChatGPT的姐妹版)以及更高级版本的方向。
- 自监督训练(也就是语言模型一般的训练方法)范式已到极限,新的训练方法迫在眉睫。未来的方向包括:从人类那里学习目标函数、强化学习微调或多模态。
- 不确定少样本是在推理时学习到新的任务,还是识别出来了在训练时学到的任务。最终,甚至不清楚人类从零开始学习与从之前的样本中学习分别学到了什么。准确理解少样本的工作原理是未来的一个方向。