GPT-2算法详解
一、背景
自从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、架构图
:注意:
GPT 使用 Transformer 的 Decoder 结构,并对 Transformer Decoder 进行了一些改动,原本的 Decoder 包含了两个 Multi-Head Attention 结构,GPT 只保留了 Mask Multi-Head Attention
2、网络结构参数
因为GPT-2在刚开始的时候openAI并没有开源,而是分了四个阶段放出来,每次放出来的预训练模型参数也不一样。
网络层数:24层
参数个数:15亿
参数文件大小:
训练数据大小:40G
最大上下文字数:1024
三、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 的答案。