全文共字,预计学习时长28分钟
来源:Pexels今年,各种机器学习的应用程序纷纷涌现。其中OpenAIGPT-2能够创作出逻辑清晰且激情盎然的文章,远远超出了人们对当前语言模型创造力的预期,给公众留下了深刻的印象。GPT-2并不是专门写小说的语言架构——结构与仅含解码器的transformer相似,但它实则是基于transformer的语言模型,规模巨大,在海量的数据集上进行训练。本文将介绍能让模型生成结果的架构,深入到自注意力(self-attention)层,接着会讲一些仅含解码器的transformer在语言建模之外的应用。
我之前写过IllustratedTransformer一文,本文是对其的补充,将会更加直观地解释transformer的内部操作,以及是如何从初级阶段演变的。希望本文使用的可视化语言会让后文中基于transformer模型的解释更为简单,毕竟这些模型的内部操作会不断演变。
目录
·第一部分:GPT2和语言模型
o什么是语言模型
o语言模型中的transformer
o与BERT的区别
oTransformer模块的演变历程
o速成课:揭开GPT-2的面纱
o进一步深入了解
o小结:GPT-2
·第二部分:详解自注意力机制
o不使用掩模的自注意力机制
o1.创建查询、键和值向量
o2.注意力得分
o3.求和
o掩模自注意力机制
oGPT-2的掩模自注意力机制
o超越语言模型
o你已经完成了!
·第三部分:超越语言模型
o机器翻译
o概述
o迁移学习
o音乐生成
第一部分:GPT2和语言模型
到底什么是语言模型?
什么是语言模型
通过IllustratedWord2vec,我们已经看了语言模型的样子——其实就是一种机器学习模型,在看到句子的某部分后可以预测后面的文字。最常见的语言模型就是在手机上打字的时候,系统会依据所输内容自动推荐接下来的文字。
在这个意义上,可以说GPT-2实则就是比手机内语言系统更庞大、更复杂的应用程序,其功能就是预测文字。OpenAI的研究员为了实验研究,从网上收集了40GB大的数据集(名为WebText),对GPT-2进行了训练。就存储大小而言,笔者使用的键盘软件SwiftKey占手机内存的78MB。而训练的GPT-2中规模最小的也需MB空间才能存储其所有参数,最大的所需空间是其13倍,那也就是说存储空间将不止6.5GB。
对GPT-2进行实验,有一个很妙的方式——使用AllenAIGPT-2文件资源管理器。通过GPT-2,将会显示10个可能的词组以及各自的概率。你可以选择一个单词,看看接下来的那些预测,然后继续编辑文章。
语言模型中的transformer
正如IllustratedTransformer一文中所介绍的,transformer模型最初由编码器(encoder)和解码器(decoder)组成——两个都是所谓的transformer模块的堆栈。该架构之所以合适是因为能够处理机器翻译,而机器翻译是编码-解码架构在过去取得成功的一处问题。
后续的很多调查都发现架构要么隐藏编码器,要么隐藏解码器,而且只用一个transformer模块的堆栈——堆得尽可能高,输入海量的训练文本,再进行大量运算。
这些模块能堆多高呢?事实证明这是能区分不同规模GPT2模型的主要因素:
如图所示,小规模的GPT-2模型堆叠了12层,中等规模的是24层,大规模的是36层,还有一个特大规模的堆叠了48层。
与BERT的区别
机器人第一定律
机器人不得伤害人,也不得见人受到伤害而袖手旁观。
GPT-2是通过transformer解码器模块构建的,而BERT是通过transformer的编码器模块构建的。下文会探讨它们之间的差异,但其中最主要的一个就是GPT2会像传统的语言模型一样,每次输出一个词。我们可以试着激发一个训练过的GPT2,令其背诵机器人第一定律:
这些模型实际操作的流程就是每次生成词(token)后,将其添加到输入序列。新的序列就会作为模型下一步的输入内容。该理念称为“自回归(auto-regression)”,也是促成RNN高效的理念之一。
GPT2以及后来的一些模型比如TransformerXL和XLNet本质上讲都是自回归模型。但BERT是个例外,没有自回归,不过可以结合上下文来创作更好的文章。XLNet的出现让自回归重回公众的视野,与此同时,人们也找到了另一种可以结合上下文创作的途径。
Transformer模块的演变历程
最初的transformer论文介绍了两种transformer模块:
编码器模块
首先映入眼帘的是编码器模块:
如图所示,原始transformer论文中的编码器模块可以接受长度不超过最大序列长度(如个词)的输入。如果序列长度小于该限制,就在其后填入预先定义的空白词。
解码器模块
其次是解码器模块,带有来自编码器模块的一个小构架模型——该层允许