GPT-2模型详解:乘车探索Transformer语言模型的可视化之旅

全文共
9517
字,预计学习时长
28
分钟

来源:Pexels

今年,各种机器学习的应用程序纷纷涌现。其中OpenAI GPT-2能够创作出逻辑清晰且激情盎然的文章,远远超出了人们对当前语言模型创造力的预期,给公众留下了深刻的印象。GPT-2并不是专门写小说的语言架构——结构与仅含解码器的transformer相似,但它实则是基于transformer的语言模型,规模巨大,在海量的数据集上进行训练。本文将介绍能让模型生成结果的架构,深入到自注意力(self-attention)层,接着会讲一些仅含解码器的transformer在语言建模之外的应用。

我之前写过Illustrated Transformer一文,本文是对其的补充,将会更加直观地解释transformer的内部操作,以及是如何从初级阶段演变的。希望本文使用的可视化语言会让后文中基于transformer模型的解释更为简单,毕竟这些模型的内部操作会不断演变。

目录

·       第一部分:GPT2和语言模型

o  什么是语言模型

o  语言模型中的transformer

o  与BERT的区别

o  Transformer模块的演变历程

o  速成课:揭开GPT-2的面纱

o  进一步深入了解

o  小结: GPT-2

·       第二部分:详解自注意力机制

o  不使用掩模的自注意力机制

o  1. 创建查询、键和值向量

o  2. 注意力得分

o  3. 求和

o  掩模自注意力机制

o  GPT-2的掩模自注意力机制

o  超越语言模型

o  你已经完成了!

·       第三部分:超越语言模型

o  机器翻译

o  概述

o  迁移学习

o  音乐生成

第一部分:GPT2和语言模型

到底什么是语言模型?

什么是语言模型

通过Illustrated Word2vec,我们已经看了语言模型的样子——其实就是一种机器学习模型,在看到句子的某部分后可以预测后面的文字。最常见的语言模型就是在手机上打字的时候,系统会依据所输内容自动推荐接下来的文字。

在这个意义上,可以说GPT-2实则就是比手机内语言系统更庞大、更复杂的应用程序,其功能就是预测文字。OpenAI 的研究员为了实验研究,从网上收集了40GB大的数据集(名为WebText),对GPT-2进行了训练。就存储大小而言,笔者使用的键盘软件SwiftKey占手机内存的78MB。而训练的GPT-2中规模最小的也需500MB空间才能存储其所有参数,最大的所需空间是其13倍,那也就是说存储空间将不止6.5GB。

对GPT-2进行实验,有一个很妙的方式——使用AllenAI GPT-2文件资源管理器。通过GPT-2,将会显示10个可能的词组以及各自的概率。你可以选择一个单词,看看接下来的那些预测,然后继续编辑文章。

语言模型中的transformer

正如Illustrated Transformer一文中所介绍的,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论文中的编码器模块可以接受长度不超过最大序列长度(如 512 个词)的输入。如果序列长度小于该限制,就在其后填入预先定义的空白词。

解码器模块

其次是解码器模块,带有来自编码器模块的一个小构架模型——该层允许关注编码器的特定片段:

两个模块的自注意力层之间的主要区别在于后者生成新词的过程——不是像BERT那样把单词改为[mask],而是干扰自注意力层的计算,阻止来自正在计算部分右侧词所传递的信息。

举个例子,从下图中可以看出如果要强调#4词的路径,只可以处理当前和先前的词:

BERT中的自注意力和GPT-2中的掩模自注意力(masked self-attention)的区别很明显,这点很关键。一般的自注意力模块允许某位置右侧的词计算时处于最大值。而掩模自注意力会阻止这种情况发生:

仅含解码器的模块

延续着先前的论文,一篇名为Generating Wikipedia bySummarizing Long Sequences的论文提出了另一种能够生成语言建模的transformer模块排序。该模型摒弃了transformer的编码器,所以,可以称其为“Transformer-Decoder”。它是早期基于transformer的语言模型,由6个transformer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值