概述
在GPT-1的基础上,OpenAI提出了包含15亿参数(GPT-1参数量的10倍以上)的GPT-2模型。该模型在一个更大规模的文本数据集WebText上进行预训练。与GPT-1依赖特定任务上的有监督微调来提升性能不同,GPT-2具备更强的零样本(zero shot)学习能力,能在未专门微调的任务上表现出色。
Zero shot learning(零样本学习):模型能够在没有见过特定类别训练数据的情况下识别新类别。
GPT-2框架
训练数据
大多数先前的工作都在单一文本领域上(新闻文章、维基百科等)训练语言模型。为此,本文构建了一个更大,更多样性的数据集WebText,该数据集中包含了超过800万个文档,总数据量达到了40GB。
输入表示
GPT-2采用Byte Pair Encoding(BPE)方式来对文本进行编码,BPE 是一种常用于压缩和处理自然语言的算法,它通过反复合并最频繁出现的字符对,将词汇分割为子词单元,以生成固定大小的词汇表。这种方法使模型可以处理常见词、罕见词,甚至是未见过的词。
关于BPE,维基百科给出了一个很好的示例。假定要编码的数据为:
aaabdaaabac
其中字节对aa
出现的最频繁,因此它将被数据中未使用的字节替换,例如Z
。替换结果如下:
ZabdZabac
Z=aa
之后可以看出ab
出现的最频繁,采用同样的方式,用Y
来替换它:
ZYdZYac
Y=ab
Z=aa
剩下的唯一字节对ac
仅出现一次,编码可以在此处停止。或者,可以继续进行压缩编码,即将出现多次的ZY
用X
来替换:
XdXac
X=ZY
Y=ab
Z=aa
该数据无法通过字节对编码进一步压缩,压缩过程结束。在解压时,只需按相反顺序执行替换即可。
需要注意的是,GPT-2对BPE进行了改进。文中指出,BPE 包含了许多常见单词的不同版本,比如 dog
,因为它们在很多变体中出现,如 dog
、dog!
、dog?
。这导致了有限词汇槽和模型容量的次优分配。为了避免这种情况,GPT-2阻止 BPE 在任何字节序列中跨字符类别进行合并。但空格例外,这显著提高了压缩效率。
模型
GPT-2的架构仍然是基于Transformer解码器,但对Transformer进行了一些的修改:
- Layer Normalization被移动到每个子模块的输入,并在最后的自注意块之后添加额外的Layer Normalization。
- 在初始化时按 1 / N 1/\sqrt{N} 1/N 的比例缩放残差层的权重,其中 N N N 为残差层的数量。
- 词汇扩展到 50 , 257 50,257 50,257。
- 上下文长度从 512 512 512增加到 1024 1024 1024,这意味着GPT-2 能够处理更长的文本片段,从而在生成和理解长文本时表现更好。
- 使用了更大的批处理大小 512 512 512。
在实验中设置了4中不同容量的模型版本,具体见下图,其中参数量最小的模型相当于GPT-1,第二小的模型相当于BERT的最大模型,参数量最大的模型被称之为GPT-2。
结语
GPT-2通过将参数数量提升一个数量级,采用字节对编码(BPE)技术进行文本编码,并在更广阔的数据集上进行预训练,同时在训练过程中将上下文长度增加了一倍。这些改进显著增强了GPT-2相对于其前身GPT-1的文本生成能力。
以上便是本文的全部内容,若是觉得不错可以支持一下博主,你们的支持是博主更新的不竭动力。若是有任何问题也敬请批评指正。