分类 GPT系列 下的文章

一、背景

自从transformer出来之后,后面的算法基本上都是基于这个为基础,比如bert是以Encode层,GPT系列的GPT、GPT2、GPT3都是Decode层,下面我们主要讲解一下GPT-2。

1、论文

论文名字:《Language Models are Unsupervised Multitask Learners》
论文地址:Language Models are Unsupervised Multitask Learners

2、论文发表时间

时间:2019年2月
团队:openAI、特斯拉老板马斯克的公司

3、源码

源码:https://github.com/openai/gpt-2
官网:https://www.openai.com/blog/better-language-models/

二、架构

1、架构图

20190803_b_001.png

:注意:
GPT 使用 Transformer 的 Decoder 结构,并对 Transformer Decoder 进行了一些改动,原本的 Decoder 包含了两个 Multi-Head Attention 结构,GPT 只保留了 Mask Multi-Head Attention

2、网络结构参数

因为GPT-2在刚开始的时候openAI并没有开源,而是分了四个阶段放出来,每次放出来的预训练模型参数也不一样。
网络层数:24层
参数个数:15亿
参数文件大小:
训练数据大小:40G
最大上下文字数:1024
2020092823231175.png

三、GPT-2相对于GPT的改进

GPT-2依然沿用GPT单向transformer的模式,只不过做了一些改进与改变。那GPT-2相对于GPT有哪些不同呢?看看下面几方面:

1. 增加数据集:

既然要博览群书,当然得先有书,所以GPT-2收集了更加广泛、数量更多的语料组成数据集。该数据集包含800万个网页,大小为40G。当然这些数据集是过滤后得到的高质量文本,这样效果才能更好的哦~

2. 增加网络参数:

GPT-2将Transformer堆叠的层数增加到48层,隐层的维度为1600,参数量更是达到了15亿。15亿什么概念呢,Bert的参数量也才只有3亿哦~当然,这样的参数量也不是说谁都能达到的,这也得取决于money的多少啊~

3. GPT-2去掉了fine-tuning层:

不再针对不同任务分别进行微调建模,而是不定义这个模型应该做什么任务,模型会自动识别出来需要做什么任务。这就好比一个人博览群书,你问他什么类型的问题,他都可以顺手拈来,GPT-2就是这样一个博览群书的模型。

4. 调整transformer:

将layer normalization放到每个sub-block之前,并在最后一个Self-attention后再增加一个layer normalization。

5. 其他:

GPT-2将词汇表数量增加到50257个;最大的上下文大小 (context size) 从GPT的512提升到了1024 tokens;batchsize增加到512。

6.Byte-level字节对编码

四、删除finue-tune直接做下游任务

1、Reading Comprehension:

使用 CoQA 数据集。输入是 document + conversation history + A: 来引导出答案。

2、Summarization:

用 TL;DR: 引导出摘要。

3、Translation:

为了引导模型做翻译,先找一个英法句子对 (en1, fr1),然后想翻译英语句子 en 的时候,输入是 en1 = fr1 + en =,期待模型自己通过类比知道人类是想让他做翻译。结果模型真的悟出了一点儿道,fr-en 的翻译结果是 11.5 BLEU。这一结果是令人震惊的,因为模型在预训练的时候就没见过法语。用一个 byte-level language detector(https://github.com/CLD2Owners/cld2) 做更详细的分析发现,预训练的数据里混入了 10 MB 法语语料。考虑到语料的量级很少,这一结果依然是令人震惊的。

4、Natural Questions:

也是一个 QA 任务,为引导模型做问答,先搞一个 example qa pair (q1, a1),然后给模型输入 q1 + a1 + q,模型就会回答出 q 的答案。