目录
1. 论文简介
2. GPT与ELMO区别与联系.
3. 贡献或主要改进
3.1. Transformer 的半监督学习
why
how
3.2. 基于不同任务在fine-tuning阶段对GPT输入数据改造。
4. 其它
4.1. 为什么GPT可以并行,虽然它也是自回归语言模型(AR模型)
Paper:GPT: Improving Language Understandingby Generative Pre-Training
Code:GPT
GPT是“Generative Pre-Training”的简称,是指的生成式的预训练。GPT采用两阶段过程,第一个阶段是利用语言模型进行预训练,第二阶段通过Fine-tuning的模式解决下游任务。下图展示了GPT的预训练过程。
(1)相同点:GPT和ELMO是类似的都是两阶段模型。
(2)不同点:首先,特征抽取器不是用的RNN,而是用的Transformer,它的特征抽取能力要强于RNN;其次,GPT的预训练虽然仍然是以语言模型作为目标任务,但是采用的是单向的
监督学习的问题,这里的监督学习是只用大量手动标记的数据去训练模型。
我们采用两阶段训练方式。 首先,我们使用语言模型在未标记的数据来学习神经网络模型的初始参数。 随后,我们根据下游的有标记的数据对语言模型进行Fine-tuning.x
下图左一是Transformer模型结构图和右图是GPT模型
GPT整个过程如上右图所示,词向量(token embedding)和位置向量(position embedding)的和作为输入,经过12层的Masked Multi-Head Attention和Feed Forward(当然中间也包括Layer Norm),得到预测的向量和最后一个词的向量,最后一个词的词向量会作为后续fine-tuning的输入。
(左)Transformer Decoder 架构和训练目标。 (右)输入用于微调不同任务的转换。 我们将所有结构化输入转换为令牌由我们的预训练模型处理的序列,然后是一个线性+softmax 层。
关键是在于这个Masked Self attention. 自回归是利用下面Masked的Self attention实现。
Masking的目的是确保左边得看不到右边的。比如下面这个图。横轴是Query,纵轴是Key. 空心的是Masked了值。
输入是1时,它什么也看不到,输入2时,它可以看到1.输入3时,它可以看到1,2. 依此类推,如果要实现,可以根据下面这个Masked self attention 实现。
1->2->3->4->5->6
这样就可以并行实现自回归了。不像RNN或LSTM这种串行方式实现自回归。
代码实现
import numpy as np
def test1():
nd = 6
ns = 6
i = np.arange(nd)[:, None]
j = np.arange(ns)
m = i >= j - ns + nd
print(m)
if __name__ == '__main__':
test1()
输出结果
[[ True False False False False False]
[ True True False False False False]
[ True True True False False False]
[ True True True True False False]
[ True True True True True False]
[ True True True True True True]]
使用BPE (bytepaire encoding)