GPT(Improving Language Understandingby Generative Pre-Training) 论文笔记

目录

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

1. 论文简介

GPT是“Generative Pre-Training”的简称,是指的生成式的预训练。GPT采用两阶段过程,第一个阶段是利用语言模型进行预训练,第二阶段通过Fine-tuning的模式解决下游任务。下图展示了GPT的预训练过程。

2. GPT与ELMO区别与联系.


(1)相同点:GPT和ELMO是类似的都是两阶段模型。
(2)不同点:首先,特征抽取器不是用的RNN,而是用的Transformer,它的特征抽取能力要强于RNN;其次,GPT的预训练虽然仍然是以语言模型作为目标任务,但是采用的是单向的

3. 贡献或主要改进

3.1. Transformer 的半监督学习

why 

监督学习的问题,这里的监督学习是只用大量手动标记的数据去训练模型。

  • 大多数深度学习方法需要大量的手动标记的数据,但是其实我们是没有那么多的手动标记的数据,这限制了它们在许多受领域的适用性。
  • 一些可以利用无监督学习到语言信息,如果你利用手动标记的数据去学习。那么可能既耗时又昂贵
  • 即使在大量监督的情况下可用,以无监督的方式学习良好的表示可以提供一个重要的性能提升。迄今为止,最令人信服的证据是广泛使用预训练的词嵌入来提高一系列 NLP 任务的性能

how 

我们采用两阶段训练方式。 首先,我们使用语言模型在未标记的数据来学习神经网络模型的初始参数。 随后,我们根据下游的有标记的数据对语言模型进行Fine-tuning.x

下图左一是Transformer模型结构图和右图是GPT模型 

GPT(Improving Language Understandingby Generative Pre-Training) 论文笔记_第1张图片

GPT整个过程如上右图所示,词向量(token embedding)和位置向量(position embedding)的和作为输入,经过12层的Masked Multi-Head Attention和Feed Forward(当然中间也包括Layer Norm),得到预测的向量和最后一个词的向量,最后一个词的词向量会作为后续fine-tuning的输入。

3.2. 基于不同任务在fine-tuning阶段对GPT输入数据改造。

GPT(Improving Language Understandingby Generative Pre-Training) 论文笔记_第2张图片

(左)Transformer Decoder 架构和训练目标。 (右)输入用于微调不同任务的转换。 我们将所有结构化输入转换为令牌由我们的预训练模型处理的序列,然后是一个线性+softmax 层。

4. 其它

4.1. 为什么GPT可以并行,虽然它也是自回归语言模型(AR模型)

关键是在于这个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这种串行方式实现自回归。

GPT(Improving Language Understandingby Generative Pre-Training) 论文笔记_第3张图片

代码实现

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)  

 

你可能感兴趣的:(Python,nlp)