大数据文摘出品
来源:github
编译:小七、池俊辉、Andy
今年,我们见识了许多令人眼花缭乱的机器学习的应用成果。其中OpenAI训练的GPT-2模型就展示出了惊艳的能力,它能够撰写出连贯而富有激情的论文,比当下其他所有的语言模型写的都好。
GPT-2其实并不是一种特别新颖的架构,它的架构非常类似于Transformer模型的Decoder结构。然而,GPT2是一个非常大的基于Transformer的语言模型,需要基于大量数据集进行训练。在这篇文章中,我们将介绍什么样的结构能够让模型产生好的结果,深入研究模型中的self-attention层,此外,我们将研究除语言建模之外的Transformer模型Decoder结构的应用。
我写本文主要是为了补充我之前的“图解Transformer模型”系列。
系列链接:
通过图解的方式更直观地解释Transformer模型的内部工作原理,以及它们自发布以来的演变过程。我希望通过这种图形示例能够更容易地解释后来基于Transformer的模型,毕竟它们的内部工作原理是在不断发展的。
本文主要从以下几方面展开阐述
第一部分:GPT2和语言建模
语言模型的含义
用于语言建模的Transformers模型
与BERT的区别
Transformer 架构的演变
速成课程:探索GPT-2内部工作原理
深入了解内幕
GPT-2小结
第二部分:图解Self-Attention(自我关注)模型
自注意力(Self-Attention,不加mask)
创建查询向量、键向量和值向量
打分
求和
图解Masked Self-Attention
GPT-2的Masked Self-Attention
你做到了!
第三部分:语言建模番外
机器翻译
生成摘要
迁移学习
音乐生成
结论
第一部分 GPT2和语言模型
第一部分 GPT2和语言模型
那么究竟什么是语言模型呢?
语言模型的含义
语言模型的含义
在The Illustrated Word2vec中,我们研究了语言模型是什么,它是能根据一个句子前半部分的单词预测出下一个单词的机器学习模型。最著名的语言模型是智能手机键盘,可以根据您当前键入的内容建议出下一个单词。
The Illustrated Word2vec:
从这个意义上讲,我们可以说GPT-2基本上是键盘应用程序的下一个单词预测功能,但它比你手机上的键盘输入法具有更大更复杂的功能。GPT-2是基于一个名为WebText大型数据集进行的训练,这个数据集大约有40G,是OpenAI研究人员为了研究从互联网上爬下来的。就存储大小来说,我使用的键盘应用程序SwiftKey占用了78MB的空间。训练出来的GPT-2的最小变体,占用500MB的存储空间来存储其所有参数。GPT-2的最大变体是最小变体的13倍,因此它可能需要占用超过6.5 GB的存储空间。
使用AllenAI GPT-2 Explorer来进行GPT-2建模是一个很好的方法,它使用GPT-2显示10个对下一个单词的预测结果,以及它们的概率分数。您可以选择其中一个单词,然后再查看下一个预测列表,循序渐进,持续不断地写下去。
用于语言建模的Transformers模型
用于语言建模的Transformers模型
正如我们在“图解Transformer模型”中看到的那样,原始的 transformer模型由encoder和decoder组成,每个都是我们称之为 transformer 架构的堆栈。这种架构是合理的,因为该模型解决了机器翻译问题——过去encoder-decoder结构解决的问题。
在随后的许多研究工作中,这种架构要么去掉了encoder,要么去掉了decoder,只使用其中一种transformer堆栈,并尽可能高地堆叠它们,为它们提供大量的训练文本,并投入大量的计算机设备,以训练其中一部分语言模型,这一研究需要花费数十万美元,就像在研究AlphaStar时也投入了数百万美元的资金。
那么我们可以将这些块堆叠多高呢?事实证明,堆叠的高度是不同的GPT2模型之间大小有别的主要影响因素之一。
与BERT的区别
与BERT的区别
GPT-2是基于 transformer模型的decoder架构构建的。而BERT则是基于 transformer模型的encoder结构构建的。我们将在以下部分中研究两者的差异。两者之间的一个关键区别是,GPT2与传统语言模型一样,一次输出一个token。接下来让我们来举例说明,经过训练的GPT-2是如何背诵机器人第一定律(First Law of Robotics)的。
这些模型实际工作的方式是在生成每个token之后,添加到输入序列中,而新序列将成为下一步模型的输入。这就是“自回归(auto-regression)”的思想。但这种想法也使得RNN的效率大打折扣。
GPT2以及一些后来的模型如TransformerXL和XLNet本质上都是自回归的。而BERT不是,它是一种权衡。在失去自回归的过程中,BERT可以获得两边的单词,以结合上下文去获得更好的结果。而XLNet既使用了自回归,同时也找到了根据两边单词融合上下文的替代方法。
Transformer架构的演变
Transformer架构的演变
一个是encoder结构,如下图所示:
来自原始 transformer论文的encoder模块可以输入直到某个最大序列长度(例如512个token)。如果输入序列短于此限制,我们可以填充序列的其余部分。
另一个是decoder结构,这个结构与encoder具有较小的体系结构差异——多了一层用于关注encoder中的特定片段:
self-attention层的一个关键区别在于它隐藏了未来的tokens,而不是像BERT那样,将单词更改为[mask(掩码)],而是通过干扰阻止了从正在计算的位置右侧的tokens中得到的信息进入到self-attention层计算。
例如,如果我们要强调位置#4的路径,我们可以看到它只允许参与当前和之前的tokens:
重要的是,BERT使用的self-attention和GPT-2使用的masked self-attention之间的区别是明确的。正常的self-attention允许在其右侧的tokens达到峰值。而Masked self-attention可防止这种情况发生:
<