GPT-2:无监督多任务学习语言模型
创始人
2024-06-01 12:41:34
0

论文标题:Language Models are Unsupervised Multitask Learners

论文链接:https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf

论文来源:OpenAI

一、概述

机器学习系统现在通过使用大型数据集、高容量模型和监督学习的组合,在任务中表现出色。然而这些系统很脆弱,对数据分布和任务规范的微小变化很敏感。目前的机器学习系统更像一个狭隘的专家而非合格的通用人才。我们希望转向更通用的系统,可以执行许多任务,最终不需要为每个任务手动创建和标注训练数据集。建立机器学习系统的主要流程是为想要执行的任务训练数据来表现特定的行为,然后训练一个系统来模仿这些行为,并且在独立同分布的测试集上测试性能。这样的模式在特定场景效果的确不错,但是对于一些特定的任务(如描述模型、阅读理解、图像分类等)来说,输入的多样性和不确定性就会把缺点给暴露出来。

我们怀疑,单一领域数据集上单一任务训练的流行是当前系统中观察到的缺乏泛化性的主要原因。在当前体系结构下,向鲁棒系统的进展可能需要在广泛的领域和任务上进行训练和评估性能。最近GLUE和decaNLP这些benchmark数据集被提出以研究这一点。多任务学习是一种提升泛化性能的很有前景的框架。然而在NLP领域多任务训练才刚刚起步。最近的两项研究分别在10个和17个(dataset, objective)对上进行训练。从元学习的视角来看,每个(dataset, objective)对都是从数据集和目标函数的分布中采样出来的单个训练样本。然而目前的机器学习系统需要成本上千个样本才能获得较好的泛化性能。多任务训练可能需要同样数量的有效训练对来达成目标。使用当前的技术,要继续扩展数据集的创建和目标设计的规模,以强制实现这一点将非常困难。因此,需要探索其他方式来执行多任务学习。

目前最优的自然语言处理系统采用预训练加有监督微调的框架。这一类的方法为了执行特定的任务仍然需要监督训练。当只有很少或者没有监督数据可用时,另一类的方法为语言模型执行特定任务展现了可观的前景,比如常识推理(commonsense reasoning)和情感分析(sentiment analysis)。在本文中,我们将这两类工作联系起来,并继续采用更通用的迁移方法。我们展示了语言模型可以在zero-shot设置下执行下游任务——无需任何参数或架构修改。我们通过强调语言模型在zero-shot设置下执行广泛任务的能力,证明了这种方法的潜力。本文的GPT-2在多个任务上取得了可观的结果。

二、方法

  1. 主要思想

GPT-2的核心是语言建模。语言建模通常是基于一组样本上的无监督分布估计,每个样本也就是一个变长的符号序列。由于语言序列具有天然的顺序,因此很自然地可以将符号序列的联合概率建模成条件概率的乘积:

❝❞

这种方法允许对以及任何这样形式的条件概率进行易于处理的抽样和估计。近年来,可以计算这些条件概率的模型的表达能力有了显著的改进,例如Transformer这样的自注意架构。

学习执行单个任务可以在概率的框架中表示为估计条件分布。由于一个通用的系统应该能够执行许多不同的任务,即使对于相同的输入,它不仅应该以输入为条件,而且还应以要执行的任务为条件,也就是说应该要建模。这在多任务和元学习的形式中广泛应用。任务条件化通常可以在模型架构层面上实现,比如采用特定于任务的encoder和decoder,或者也可在算法的层面上实现,比如MAML的内外循环优化框架。不过在语言领域,正如McCann等人(2018)所示,语言提供了一种灵活的方式来将任务、输入和输出特别表示为符号序列。举例来说,一个翻译训练样本可以被写作序列(translate to french, english text, french text),一个阅读理解训练样本可以被写作序列(answer the question, document, question, answer)。McCann等人认为可以训练一个单独的模型(也就是MQAN)在这种格式的样本上推断和执行多种不同的任务。

原则上,语言建模也能够学习McCann等人(2018)的任务,而不需要明确监督哪些符号是要预测的输出。由于监督目标与无监督目标相同,监督任务只是在序列的子集上进行测试,无监督目标的全局最小值也是监督目标的全局最小值。这意味着,如果我们可以在无监督目标函数下找到全局最小值,那么监督目标函数也会得到优化。在这种简要的设置中,对密度估计作为一个合理的训练目标的关注是被回避的。这个问题转而变成了我们能否在实践中将无监督的目标函数优化到收敛。初步的实验证实,足够大的语言模型能够在这种toy-ish的设置下执行多任务学习,但学习速度比显式监督的方法要慢得多。

从精心设计的实验设置转向从“混乱”的自然语言中学习是很大的一步。Weston(2016)认为在对话的背景下需要开发能够直接从自然语言中学习的系统,并证明了一种概念——通过对teacher模型的输出进行前向预测来学习问答任务,而不需要奖励信号。问答任务虽然是种有吸引力的方法,但是本文认为这会受到一些限制,主要是因为互联网中的大量信息只需要被动获取,而非需要(像问答任务一样)互动交流。作者的推测是,一个具有足够容量的语言模型将开始学习推断和执行自然语言序列中展示的任务,以更好地预测它们,而不管它们的获取方法如何,下图是GPT-2训练语料中的一些翻译任务的自然语言演示。如果一个语言模型能够做到这一点,它将实际上执行无监督的多任务学习。作者通过分析语言模型在zero-shot设置下的表现来测试这个想法的可行性。

3c1fb4ec1225ebced34fa88f86f0bb44.png
自然语言演示
  1. 训练数据集

大多数先前的研究在一个域的文本上训练语言模型比如新闻文章、维基百科、小说类书籍等。我们的方法促使构建尽可能大且多样化的数据集,以便在尽可能多的领域和上下文中收集任务的自然语言演示。本文利用网络爬虫来构建大规模的训练文本数据,然而常规的不加筛选的爬取方式将会导致数据集面临严重的文档质量问题。因此本文采用一种新的强调文档质量的网络爬取方式。为了做到这一点,我们只抓取了由人类策划/过滤的网页。我们从社交媒体平台Reddit抓取了所有的出站链接,每个链接至少得到3个karma(Reddit平台通过被点赞获得的分数)。这可以被认为是一种启发式指标,用于判断其他用户是否认为该链接有趣、有教育意义或只是好笑。通过这种方式本文构建了WebText数据集,其包含这样的4500万个链接的文本子集。本文使用初步版本的WebText,它包含超过800万份文档,总文本量为40GB。

  1. 输入表示

通用语言模型应该能够计算任何字符串的概率或者生成任何字符串。目前大规模的语言模型包括一些预处理步骤,如小写、token化和out-of-vocabulary token的处理,这些步骤限制了可建模字符串的空间。将Unicode字符串处理成UTF-8字符序列可以满足这个需求,然而目前的研究表明字符级的语言模型相比与word级的语言模型并没有竞争力,本文在实验中也观察到了这一点。

Byte Pair Encoding (BPE)是一种实际上介于字符和word级别语言建模之间的方法,它有效地插值了频繁出现的符号序列的word级别输入和不频繁出现的符号序列的字符级别输入。然而,BPE的实现通常是基于Unicode编码点而不是字节序列的,这要求包括Unicode的全部符号才能建模所有的Unicode字符串。这会导致一个超过130,000的基本词汇表(不包括多符号token),与BPE通常使用的32,000到64,000令牌词汇表相比,这是无法承受的。如果采用字符级别的BPE版本,它只需要大小为256的基本词汇表。然而,直接将BPE应用于字符序列会导致合并效果不佳,因为BPE使用一种贪心的基于频率的启发式算法来构建token词汇表。作者发现BPE包括了许多常见单词的多个版本,比如dog.、dog!、dog?等,这会导致有限的词汇槽和模型容量的分配不够优化。为了避免这种情况,作者防止BPE在任何字节序列中跨字符类别(dog和.!?属于不同的字符类别)合并。他们为空格添加了一个例外,这显著提高了压缩效率,同时只对多个词汇token中的单词进行了最小的分段处理。

这种输入表示允许我们将词级语言模型的好处与字符级方法的一般性结合起来。由于我们的方法可以为任何Unicode字符串计算概率,这允许我们在任何数据集上评估,而不管预处理、token化或词汇表大小。

  1. 模型

GPT-2的模型与GPT差不多,只是做了一些修改。Layer normalization被转移到每个sub-block的输入上,并且在最后一个自注意力block后添加一个layer normalization。采用一种改进的初始化方法,该方法考虑了残差路径与模型深度的累积。在初始化时将残差层的权重按的因子进行缩放,其中是残差层的数量。词汇表扩大到50,257。我们还将上下文大小从512增加到1024个token,并使用512的更大的batchsize。

三、实验

  1. 模型大小

GPT-2主要包括四个size的模型:

58623576ee26cd94e7fefdf1bb2913bd.png
模型大小
  1. 主要实验结果

GPT-2在多个数据集上的zero-shot实验性能:

de66df8059a901271090d99f852f023d.png
实验
  1. 其他实验

Children’s Book Test数据集上性能与模型容量的关系:

d8f06e9905e08fae137d2334994a9ffb.png
实验

Winograd Schema challenge实验性能与模型容量的关系:

e51d2469780401d85f75c9280eab10fa.png
实验

Summarization实验:

f1a6e05b87c5b5f33d3e75e3a9ca9985.png
实验

问答实验的前30个信心分数最高的回答:

3ba6d88c7671d19fc105f9df4c77b51f.png
实验

为了分析模型是在泛化还是记忆,调研了数据集直接的重复比例:

c8b2f48fe9e4fd86a4d12a2973d5c8bd.png
实验

WebText上的性能,下图表明即使是最大size的GPT-2对于WebText数据集仍然是欠拟合的:

52c38ce57e6151dd9be1a7b8feff0a75.png
实验

相关内容

热门资讯

122.(leaflet篇)l... 听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
Vue使用pdf-lib为文件... 之前也写过两篇预览pdf的,但是没有加水印,这是链接:Vu...
PyQt5数据库开发1 4.1... 文章目录 前言 步骤/方法 1 使用windows身份登录 2 启用混合登录模式 3 允许远程连接服...
Android studio ... 解决 Android studio 出现“The emulator process for AVD ...
Linux基础命令大全(上) ♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维...
再谈解决“因为文件包含病毒或潜... 前面出了一篇博文专门来解决“因为文件包含病毒或潜在的垃圾软件”的问题,其中第二种方法有...
南京邮电大学通达学院2023c... 题目展示 一.问题描述 实验题目1 定义一个学生类,其中包括如下内容: (1)私有数据成员 ①年龄 ...
PageObject 六大原则 PageObject六大原则: 1.封装服务的方法 2.不要暴露页面的细节 3.通过r...
【Linux网络编程】01:S... Socket多进程 OVERVIEWSocket多进程1.Server2.Client3.bug&...
数据结构刷题(二十五):122... 1.122. 买卖股票的最佳时机 II思路:贪心。把利润分解为每天为单位的维度,然后收...
浏览器事件循环 事件循环 浏览器的进程模型 何为进程? 程序运行需要有它自己专属的内存空间࿰...
8个免费图片/照片压缩工具帮您... 继续查看一些最好的图像压缩工具,以提升用户体验和存储空间以及网站使用支持。 无数图像压...
计算机二级Python备考(2... 目录  一、选择题 1.在Python语言中: 2.知识点 二、基本操作题 1. j...
端电压 相电压 线电压 记得刚接触矢量控制的时候,拿到板子,就赶紧去测各种波形,结...
如何使用Python检测和识别... 车牌检测与识别技术用途广泛,可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计...
带环链表详解 目录 一、什么是环形链表 二、判断是否为环形链表 2.1 具体题目 2.2 具体思路 2.3 思路的...
【C语言进阶:刨根究底字符串函... 本节重点内容: 深入理解strcpy函数的使用学会strcpy函数的模拟实现⚡strc...
Django web开发(一)... 文章目录前端开发1.快速开发网站2.标签2.1 编码2.2 title2.3 标题2.4 div和s...