
学习目标:掌握 GPT2 的架构、训练任务和模型细节
GPT2 的架构
从模型架构上看,GPT2 并没有特别新颖的架构,它和只带有解码器模块的 Transformer 很像。
所谓语言模型,作用就是根据已有句子的一部分,来预测下一个单词会是什么。现实应用中大家最熟悉的一个语言模型应用,就是智能手机上的输入法,它可以根据当前输入的内容智能推荐下一个要打的字。

GPT2 也是一个语言预测生成模型,只不过比手机上应用的模型要大很多,也更加复杂。常见的手机端应用的输入法模型基本占用 50MB 空间,而 OpenAI 的研究人员使用了 40GB 的超大数据集来训练 GPT2,训练后的 GPT2 模型最小的版本也要占用超过 500MB 空间来存储所有的参数,至于最大版本的 GPT2 则需要超过 6.5GB 的存储空间。
自从 Transformer 问世以来,很多预训练语言模型的工作都在尝试将编码器或解码器堆叠的尽可能高,那类似的模型可以堆叠到多深呢?事实上,这个问题的答案也就是区别不同 GPT2 版本的主要因素之一。比如最小版本的 GPT2 堆叠了 12 层,中号的 24 层,大号的 36 层,超大号的堆叠了整整 48 层!

GPT2 模型的细节
以机器人第一法则为例,来具体看 GPT2 的工作细节。* 机器人第一法则:机器人不得伤害人类,或者目睹人类将遭受危险而袖手旁观。
模型过程
首先明确一点:GPT2 的工作流程很像传统语言模型,一次只输出一个单词 (token)。
GPT2 之所以在生成式任务中表现优秀,是因为在每个新单词 (token) 产生后,该单词就被添加在之前生成的单词序列后面,添加后的新序列又会成为模型下一步的新输入。这种机制就叫做自回归 (auto-regression),如下所示:

其次明确一点:GPT2 模型是一个只包含了 Transformer Decoder 模块的模型。
和 BERT 模型相比,GPT2 的解码器在 self-attention 层上有一个关键的差异:它将后面的单词 (token) 遮掩掉,而 BERT 是按照一定规则将单词替换成[MASK]。
举个例子,如果我们重点关注 4 号位置的单词及其前序路径,我们可以让模型只允许注意当前计算的单词和它之前的单词,如下图所示:

注意:能够清楚的区分 BERT 使用的自注意力模块 (self-attention) 和 GPT2 使用的带掩码的自注意力模块 (masked self-attention) 很重要!普通的 self-attention 允许模型的任意一个位置看到它右侧的信息 (下图左侧),而带掩码的 self-attention 则不允许这么做 (下图右侧)。



















