NLP GPT算法笔记

发布于:2023-05-01 ⋅ 阅读:(206) ⋅ 点赞:(0)

从这个意义上讲,我们可以说GPT-2本质上是键盘应用程序的下一个单词预测功能,但是它比您的手机具有更大,更复杂的功能。 GPT-2在称为WebText的庞大40GB数据集上进行了训练,作为研究工作的一部分,OpenAI研究人员从互联网上进行了爬网。 为了比较存储空间,我使用的键盘应用程序SwiftKey占用了78MB的空间。 经过训练的GPT-2的最小变体,占用500MB的存储空间来存储其所有参数。 最大的GPT-2变体大小是其13倍,因此可能会占用6.5 GB以上的存储空间。

OPENAI GPT

遵循ELMo的类似想法,OpenAI GPT(Generative Pre-training Transformer(Radford et al。,2018)的缩写)通过在庞大的自由文本语料库上进行训练,将无监督语言模型扩展到了更大的规模。 尽管有相似之处,但GPT与ELMo有两个主要区别。

  1. 模型体系结构不同:ELMo使用经过独立训练的从左到右和从右到左的多层LSTM的浅层连接,而GPT是多层变压器解码器。
  2. 在下游任务中使用上下文化嵌入的方式有所不同:ELMo将嵌入作为特定功能添加到针对特定任务而定制的模型中,作为附加功能,而GPT则针对所有最终任务微调相同的基本模型。

transform解码器作为语言模型

与原始转换器架构相比,转换器解码器模型舍弃了编码器部分,因此只有一个输入语句,而不是两个单独的源序列和目标序列。

该模型将多个转换器块应用于输入序列的嵌入。 每个块都包含一个蒙版的多头自我注意层和一个逐点前馈层。 在softmax归一化之后,最终输出在目标令牌上产生分布。

在这里插入图片描述

损失是负对数似然性,与ELMo相同,但没有后向计算。 假设大小为k的上下文窗口位于目标单词之前,则损失看起来像:

在这里插入图片描述

BPE
字节对编码(BPE)用于编码输入序列。 BPE最初是在1990年代提出的一种数据压缩算法,后来被采用来解决机器翻译中的词汇公开问题,因为在翻译成新语言时,我们很容易遇到稀有和未知的单词。 出于直观的认识,经常将稀有和未知的词分解为多个子词,BPE通过迭代和贪婪地合并频繁的字符对来找到最佳词分割。

监督微调
OpenAI GPT提出的最实质性的升级是摆脱特定于任务的模型,而直接使用经过预先训练的语言模型!

让我们以分类为例。假设在标记的数据集中,每个输入都有n个标记f {x} =(x_1,…,x_n)和一个标记y。 GPT首先通过预训练的变压器解码器处理输入序列f {x},最后一个令牌x_n的最后一层输出为f {h} _L ^ {(n)}。然后,仅使用一个新的可训练权重矩阵f {W} _y,它就可以预测类标签上的分布。

在这里插入图片描述

损失是为了最小化真实标签的负面对数可能性。此外,发现将LM损耗作为辅助损耗是有益的,因为:

(1)有助于加速训练过程中的收敛
(2)有望改善监督模型的泛化性。

在这里插入图片描述

对于类似的设计,其他最终任务不需要定制的模型结构(请参见图2)。如果任务输入包含多个句子,则在每对句子之间添加一个特殊的定界符标记($)。这个定界符标记的嵌入是我们需要学习的新参数,但是应该很小。

对于句子相似性任务,因为顺序无关紧要,所以两个顺序都包括在内。对于多项选择任务,将上下文与每个答案候选者配对。

OPENAI GPT-2

OpenAI GPT-2语言模型是GPT的直接继承者。 GPT-2具有1.5B参数,是原始GPT的10倍,并且它在零触发传输设置下可在8个经过测试的语言建模数据集中的7个数据集中获得7个SOTA结果,而无需进行任何特定于任务的微调。 预先训练的数据集包含800万个网页,这些网页是通过爬网Reddit的合格出站链接而收集的。 特别是在小型数据集和用于测量长期依赖性的数据集上,OpenAI GPT-2的重大改进尤为明显。

GPT-2的预培训任务仅是语言建模。所有下游语言任务都被构造为预测条件概率,并且没有针对特定任务的微调。

使用LM可以直接生成文本。
机器翻译任务(例如,英语到中文)是通过在最后以“英语句子=中文句子”和“目标英语句子=”对为条件的LM来诱导的。

For example, the conditional probability to predict might look like: P(? | I like green apples. = 我喜欢绿苹果。 A cat meows at him. = 一只猫对他喵。It is raining cats and dogs. =")

质量检查任务的格式类似于翻译,在上下文中带有成对的问题和答案。
通过在上下文中的文章后面添加TL; DR:来进行汇总任务。

BPE在字节序列上

与原始GPT相同,GPT-2使用BPE,但使用UTF-8字节序列。每个字节可以在8位中表示256个不同的值,而UTF-8最多可以为一个字符使用4个字节,总共支持最多2 ^ {31}个字符。因此,使用字节序列表示,我们只需要一个大小为256的词汇表,而不必担心预处理,标记化等问题。尽管有好处,但当前的字节级LM与SOTA字的性能差距仍然不可忽略级LM。

BPE以贪婪的方式合并频繁出现的字节对。为了防止它生成常见单词的多个版本(例如,“ dog”,“ dog!”和“ dog”代表“ dog”一词),GPT-2防止BPE合并跨类别的字符(因此,dog不能与。,!和。这样的标点符号合并。 ?)。此技巧有助于提高最终字节分段的质量。

使用字节序列表示,GPT-2能够将概率分配给任何Unicode字符串,而不考虑任何预处理步骤。

模型修改
与GPT相比,GPT-2除了具有更多的变压器层和参数外,仅进行了一些架构修改:

层归一化被移动到每个子块的输入,类似于“构造块”类型的剩余单元(与原始类型“瓶颈”不同,它在权重层之前应用了批量归一化)。
在最后的自我关注块之后,添加了额外的图层归一化。
根据模型深度构造修改后的初始化。
残留层的权重最初按1 / sqrt {N}的比例进行缩放,其中N是残留层的数量。
使用更大的词汇量和上下文大小

本文含有隐藏内容,请 开通VIP 后查看