四、GPT

  1. 目前机器学习系统通过使用大型标注数据集、高容量模型的监督学习来训练。这种方式的缺点是:对数据分布和任务目标敏感,一旦数据分布发生变化,或者任务目标发生变化,则训练好的模型就无法很好工作。

    因此这种机器学习系统是数据相关的、任务相关的狭隘系统,而不是数据无关、任务无关的通用系统。

    GPT 的目标是学得一个能够执行多种任务的、更通用的机器学习系统,同时不需要为每个任务提供标注数据集(zero-shot learning ),或者只需要提供很少的标注数据集(one-shot learning )。

4.1 GPT V1

  1. 通过未标记语料来训练词向量具有挑战性,有两个主要困难:

    • 无法确定合适的目标函数来获取通用词向量,使得词向量有助于迁移学习。

      如:生成式语言模型的目标函数是句子生成概率,判别式上下文预测模型的目标函数是给定上下文时单词出现的概率。

      每种方法在不同的任务中表现不同,没有哪一个方法在所有任务中均表现最好。

    • 无法确定合适的迁移学习方式。

      如:无监督词向量作为辅助特征引入监督学习模型,或者将无监督词向量作为监督学习模型初始化点。

  2. 论文 《Improving Language Understanding by Generative Pre-Training》 提出了GPT 模型来利用未标记语料,它采用两阶段训练任务:

    • 首先在大量的未标记语料上进行生成式预训练。
    • 然后通过标记语料对具体任务进行针对性的微调。

    其中未标记文本和标记文本可以来自不同的领域。

  3. GPT 结合了无监督预训练模型和监督微调模型,可以认为是一种半监督学习。GPT 区别于其它模型的地方在于:GPT 在微调期间仍然使用无监督预训练网络,只是针对具体的监督学习任务来调整网络的输出层。

  4. 可以认为无监督预训练是半监督学习的一种特殊情况,其目标是为监督学习任务找到一个好的初始化点。

    也可以将无监督预训练模型的隐向量作为监督学习任务的辅助特征,同时在目标任务上训练监督模型。

    这种方式涉及到为每个目标任务建立监督模型,并且每个目标任务的大量新参数需要更新。

    与之相比,GPT 只需要在迁移学习过程中对预训练模型架构进行很小的修改就能够适应所有目标任务。

4.1.1 模型

  1. 预训练阶段:通过在大量未标记预料上学习网络的初始参数。

    给定一个 token 序列 四、GPT - 图1四、GPT - 图2 为单词在词表中的编号。GPT 通过生成式语言模型来最大化概率:

    四、GPT - 图3

    其中 四、GPT - 图4 为窗口大小,四、GPT - 图5 为网络参数。

    论文通过一个多层 Transformer decoder 来建模,其中:

    四、GPT - 图6

    其中 四、GPT - 图7 为上下文,四、GPT - 图8 为词向量矩阵, 四、GPT - 图9 为位置向量矩阵, 四、GPT - 图10 为网络层数。

    原始 Transformer 采用正弦函数来产生位置向量,但这里采用模型来学习位置向量。

  2. 微调阶段:针对具体任务改变网络的输出层,并微调网络参数来匹配具体任务。

    给定监督学习语料库 四、GPT - 图11 ,设样本 四、GPT - 图12 对应的标签为 四、GPT - 图13 ,其中 四、GPT - 图14

    将预训练模型的输出层替换为线性输出层,则有:

    四、GPT - 图15

    其中 四、GPT - 图16 为预训练模型最后一层 transformer 的输出。

    因此得到监督学习任务的损失函数: 四、GPT - 图17

  3. 论文通过实验发现:在微调任务中引入语言模型能够改进监督学习的泛化性能,同时也能够加速监督学习的收敛速度。

    因此监督学习任务的损失函数为:

    四、GPT - 图18

    其中 四、GPT - 图19 为加权系数,是模型的一个超参数。

  4. 可以看到:微调过程唯一需要学习的参数是 四、GPT - 图20 ,因此网络学习参数的数量相比于重新训练网络要小得多。

  5. 对于分类任务可以简单的、直接使用微调后的模型,对于文本蕴含、知识问答等任务需要调整模型来适应这些任务。

    对所有任务都执行输入转换,不同的任务转换方式不同。

    • 对于所有任务,都在序列开始添加 start 标记 ,在序列结束添加 extract 标记 。

    • 文本分类任务:直接使用微调后的模型。

    • 文本蕴含任务:将前提Premise 和假设 Hypothesis 通过分隔符 Delim 拼接,然后使用微调后的模型。

    • 文本相似度任务:考虑到 AB 的相似度等于 BA 的相似度,即:句子之间的相似度与句子顺序无关,因此:

      • 首先将句子 Text1 和句子 Text2 通过分隔符 Delim 拼接,然后将句子 Text2 和句子 Text1 通过分隔符 Delim 拼接。
      • 将得到的两个样本输入网络得到的representation 相加,结果灌入线性输出层。
    • 问答和知识推理任务:给定文档Doc 和问题 Question,以及一组回答 Answer1,Answer2,...GPT 将其转化为一个文本分类任务。

      • 首先根据每个回答通过分隔符 Delim 来拼接文档和问题,得到样本 Doc Question Delim Answer_k

        其中上下文 Context 是文档和问题的直接拼接(未添加分隔符):Context = Doc Question

      • 然后对每个样本提取representation,灌入线性分类层(得到每个答案是否正确的概率),最后送入softmax 输出层得到归一化概率。

    四、GPT - 图21

4.1.2 实验结论

  1. 模型结构:GPT 模型采用12层的、仅包含 decoderTransformer 模型。Transformer 的结构为:

    • 12 个 maskedself attention head,其隐向量为 768 维。
    • Feed Forward 的输出为 3072 维。
  2. GPT 模型在不同任务上的表现:

    • 文本蕴含任务:其中 5x 表示集成了 5 个模型。

      自然语言推理任务natural language inference:NLI 也称作文本蕴含任务 textual entailment ,其目标是:给定一对句子,判定其关系是蕴含、矛盾、还是中立。这里评估了5个不同来源的数据集,包括图片标题SNLI、新闻文章RTE、维基百科文章 QNLI、科学考试SciTail、转录语音&通俗小说&政府报告 MNLI

      四、GPT - 图22

    • 问答和知识推理任务:其中 9x 表示集成了 9 个模型。

      问答和知识推理任务包含两个数据集:

      • RACE 数据集:包含来自初中、高中考试的一些问答题。
      • Story Cloze 数据集:该任务从两个选项中选择一个来作为故事的正确结尾。

      四、GPT - 图23

    • 语义相似度任务:其中 mc 表示 Mathews 相关系数,acc 表示准确率,pc 表示皮尔逊系数。

      语义相似度任务检测两个句子在语义上是否等价。这里采用了3个数据集:Microsoft Paraphrase corpus:MRPCQuora Question Pairs:QQPSemantic Textual Similarity benchmark:STS-B

      四、GPT - 图24

  3. 实验表明:迁移学习时 GPT 的每一层都对目标任务有帮助。下图为采用不同层数时,模型在 RACEMultiNLI 任务上的表现。即:迁移学习时并不是使用 四、GPT - 图25 ,而是 四、GPT - 图26

    四、GPT - 图27

  4. LSTM 结构相比,Transformer 能够捕捉到更长的语言结构。因此 Transformer 的迁移学习效果更好,且表现更加稳定。

    下图为直接使用预训练模型而不进行微调时,二者在新任务上的表现对比:LSTM 的预测结果更差,且波动更大。

    四、GPT - 图28

  5. 通过实验表明:GPT 在微调任务中引入语言模型的损失这个辅助目标可以提升监督任务的性能。

    实际上辅助目标对于大数据集有效,对于小数据集效果不佳。

    下表中:

    • aux LM 表示使用预训练模型和辅助目标
    • o pre-training 表示不使用预训练模型,也不使用辅助目标
    • o aux LM 表示使用预训练模型,但是不使用辅助目标

    四、GPT - 图29

4.2 GPT V2

  1. 论文 《Language Models are Unsupervised Multitask Learners》 提出了 GPT V2 模型,其基本结构与 GPT V1 相同,其区别在于:

    • GPT V2 具有 15亿参数,网络层数更深、网络容量更大。

      下表中最小的模型等价于 GPT V1,次小的模型等价于 BERT 中的最大模型。最大的模型为 GPT V2

    • 网络结构微调:

      • GPT V2Layer Normalization 移动到每个子块的输入之后,类似于pre-activation 残差网络。
      • GPT V2 在最终的self-attention 块结束之后添加额外的layer normalization 层。
    • 权重初始化方式微调:GPT V2 将残差层的权重初始化缩放到GPT 1四、GPT - 图30,其中 四、GPT - 图31 为残差层的数量。

    • GPT V2 扩大词表到 50247 个词汇。

    • GPT V2 将上下文大小从 512 token 扩大到 1024 token

    • GPT V2 使用更大的 batch size (512)

    四、GPT - 图32

  2. GPT V2 通过实验结果说明了语言模型可以基于 zero-shot 来执行下游任务,而无需修改任何参数或者网络架构。

4.2.1 训练数据集

  1. 为了构建尽可能大和多样性的训练数据集,从而收集尽可能自然的语言分布,GPT V2 采用爬取网页文本的方式。

    但是这种方式爬取的大多数网页的内容难以理解,因此严重降低了文本的质量。GPT V2 的解决方案是:仅仅爬取由人类编辑、筛选的网页。

  2. GPT V2 构建训练数据集的步骤:

    • 首先从 Reddit 抓取出站计数超过3的所有超链接,最终爬取到4500万条超链接。

    • 然后爬取这些超链接的 HTML 文本,并进行过滤。

      • 剔除2017年12月之后创建的超链接。这是为了划定时间范围,从而给定一个不可变的文档集合。
      • 删除所有维基百科文档,因为它是很多任务的公共数据源,可能会对后续的迁移学习任务评估有影响。
      • 去重。

      最终得到 800多万文档,超过 40GB 的文本。该数据集称作 WebText 数据集。

4.2.2 预处理

  1. 通用语言模型应该能计算任何字符串的概率。但是,由于当前的大规模语言模型包含一些预处理步骤,如:大写字符转小写、词干化tokenization、表外标记OOV token ,这些步骤限制了字符串的模型空间。

    一种解决方案是将字符串转换为 UTF-8 字节序列。但是实验表明:在大型数据集上,bytes-level 字节粒度的语言模型不如 word-level 单词级别的自然语言模型。

  2. GTP V2 采用 Byte pari Encoding:BPE 方案,该方案 结合了word-level 的效果优势和 bytes-leve 的通用性,是二者之间的折中方案。

    • BPE 对高频的符号采用word-level 的输入,对低频的符号采用 char-level 的输入。

    • 事实上 BPE 并不是采用字节,而是采用Unicode 码点。

      考虑到码点的数量较大(超过 13万个),而常见的单词词表大小在32000到 64000,因此也可以采用 bytes-levelBPE,它仅仅对词表引入 256个额外的 token

  3. GPT V2 不需要执行词干化,也不需要执行其它的有损预处理(如OOV 标记)。

    但是,对于标点符号需要特殊处理。由于英文是空格来分词,因此对于 dog? 这类带标点符号的单词需要将其拆分为 dog 和标点符号两个token 。 这是因为 GPT V2 没有词干化,所以 dog? 并未归一化到单词 dog

4.2.3 实验结论

  1. GPT V2 在8个数据集上与其它模型进行比较,结果在其中 7 个数据集上 GPT V2 取得了最佳效果。

    • 实验表明:数据集越小,GPT V2 的优势越大。

    • 对于 One Billion Word Benchmark 数据集,GPT V2 差得多。原因可能有两个:

      • One Billion Word benchmark 本身就是一个超大数据集,在它之上训练的专用模型效果已经非常好。
      • One Billion Word benchmark 数据集执行了某些破坏性的预处理:进行了句子级别的混洗。这会破坏所有的长范围的结构。
    • 评估指标:PPL 困惑度、ACC准确率、BPBBPC

    • 评估数据集:

      • LAMBADA 数据集:预测句子的最后一个单词。它测试了模型对文本长期依赖关系建模的能力。

      • CBT 数据集:Children’s Book Test 数据集,预测省略单词的10个中哪个可能是正确的。它考察模型在不同类别的单词(命名实体、名字、动词)上的表现。

        CBT-CN 为普通名词数据集,CBT-NE 为命名实体数据集。

    四、GPT - 图33

  2. 在语言模型中困惑度 perplexity是一个比较重要的指标,它刻画了一个生成一个给定句子的概率。

    困惑度常用于评估语言模型的好坏:给测试集的句子赋予较高概率值的语言模型较好,否则语言模型较差。

    对于给定句子 四、GPT - 图34 ,其定义为:

    四、GPT - 图35

    句子概率越大则困惑度越小,因此模型也就越好。

  3. 计算机视觉领域最近的研究表明:普通的图像数据集包含了大量的近似重复图像,如:CIFAR-10 数据集在训练集和测试集之间有 3.3% 的重复。这会导致模型的泛化能力被高估。

    随着数据集大小的增长,这个问题可能会越来越严重:训练集越大,测试集中的样本越可能重复出现在训练集中。因此 GPT V2 的优秀表现有可能是由于测试集的测试样本曾经出现在训练集中,导致模型 “记住” 了这些样本。

    通过两个证据可以说明 GPT V2 的优秀表现是因为其本身泛化能力较强,而不是因为 “记忆” 效果。

    • 通过 Bloom 过滤器来检查不同数据集中,测试集和训练集的重复度。

      数据表明: WebText train 的测试集、训练集的重复度较低。

      四、GPT - 图36

    • 通过考察模型容量的性能表明:随着模型容量的增大,模型在训练集和测试集上的表现都在提升。

      这说明更大的模型可以得到更好的效果,模型目前处于欠拟合(而不是过拟合)阶段。

      四、GPT - 图37