GPT(Generative Pre-Training)模型相对于 Bert 模型更擅长解决生成任务(NLG),Bert 使用 MLM 和 NSP 语言模型进行训练,而 GPT 则是使用上文来预测单词,例如 “我爱你”,通过输入 “我爱” 来预测 “你”。Bert 模型采用 Transformer 的 Encoder 部分,GPT 采用的是 Transformer 的 Decoder 部分。
GPT 目前有:GPT、GPT-2、GPT-3,它们的区别如下:
- GPT2 比 GPT 层数更多,模型容量更大,参数量大概是 GPT 的 10 倍
- GPT 对下游任务采用有监督的学习方式,GPT-2 对下游采用无监督的学习方式;
- GPT-3 模型尺寸更大,从语言任务到图像任务的变化,以及其希望不经过微调就能解决问题。
GPT 与 GPT-2 具有基本相同的架构,区别是对下游任务的处理方式不同。接下来总结下 GPT-2 模型的相关内容。GPT 版本如下:
- Small 版本,词嵌入维度是 768,共使用了12 个 Decoder,有 117M参 数量;
- Medium 版本,词嵌入维度是 1024,共使用 24 个 Decoder,有 345M 参数量;
- Large 版本,词嵌入维度是 1280,共使用 36 个 Decoder,有 762M 参数量;
- Extra-Large,词嵌入维度是 1600,共使用 48 个 Decoder,有 1542M 参数量。
Bert 能处理的最长输入是 512,GPT 能处理的最长输入是 1024。
Bert 采用的时 Multi-Head Attention 来表征输入,GPT-2 采用的是传统的语言模型,应用于生成类任务,当生成下一个字/词时,我们通常只会依赖上文,而忽略下文,例如:”我爱你”,预测 “爱” 时,我们通常依赖前面的 “我”,而不是下文的 “你”。所以,GPT-2 模型采用的是 Masked Multi-Head Attention,很显然这个 Masked 是对输入进行掩码处理的,为的就是避免预测时模型看到下文。例如:”我爱你”,预测 “爱” 时,把 “你” 掩盖掉,这样模型只看到了当前的上文。
另外,GPT-2 仅仅使用的是 Transformer 的 Decoder,所以原始 Transformer Decoder 中的 Encoder-Decoder 的 Attention 也就去掉了。
GPT-2 的输入会经过两个 Embedding:
- Token Embedding
- Position Embedding
- Input Embedding = Token Embedding + Position Embedding
相比 Bert 模型,这里没有 Segment Embedding。Token Embedding 和 Position Embedding 对应的两个矩阵会在训练过程中进行学习。Position Embedding 在不同层是不变的。
GPT-2 在最后一层会输出当前预测词向量,然后将每个词向量乘以 Token Embedding 矩阵,例如:我们使用 Small 版本的 GPT-2,此时输出的向量维度为 768,假设词表 size 为 10000,每个词嵌入维度也为 768,会得到 10000 个 logits,再经过 SoftMax 计算得到每个词的预测概率,得到预测的结果。