[论文笔记]GPT-2

引言

今天继续GPT系列论文, 这次是Language Models are Unsupervised Multitask Learners,即GPT-2,中文题目的意思是 语言模型是无监督多任务学习器。

自然语言任务,比如问答、机器翻译、阅读理解和摘要,是在任务相关数据集上利用监督学习的典型方法。作者展示了语言模型在训练名为WebText的新数据集时,即使是无监督,也能开始学习这些任务。基于一个文档和问题的情况下,语言模型生成的回答在CoQA数据集上达到了55 F1得分,超过了4个基准系统中的3个,是在没有利用剩下127000+个训练样本的情况下。

语言模型的容量对于零样本任务成功迁移至关重要,并且以对数线性的方式提高任务之间的性能。最大的GPT-2模型是一个1.5B参数的Transformer,在零样本设定下载8个测试语言模型数据集中的7个达到了SOTA结果。

总体介绍

如今,机器学习系统通过使用大量数据集、高容量模型和监督学习组合的方式,在其训练任务上表现出色。然而,这些系统对数据分布的细微变化和任务规范非常脆弱和敏感。当前的系统更适合被描述为精通单一任务的专家,而不是可以胜任各种任务的万事通。

作者怀疑在单一领域数据集上进行单一任务训练的流行是当前系统泛化能力不足的一个主要原因。在当前架构下,朝着健壮系统的进展可能需要在各种领域和任务上进行训练和性能测量。

多任务学习是提高整体性能的一个有潜力的框架。然而,在自然语言处理领域,多任务训练仍处于初级阶段。

目前在语言任务上表现最好的系统利用了预训练和监督下微调的组合。但这些方法仍然需要监督训练才能执行任务,当只有最少或没有监督数据可用时,另一条研究线路展示了语言模型在执行特定任务(如常识推理)和情感分析方面的潜力。

image-20231020161803870

在本篇工作中,作者连接了这两条研究线路,并扩展了更通用的转移方法的趋势。展示了语言模型可以在零样本设定中执行下游任务,无需任何参数或架构修改。通过突出语言模型在零样本设定中执行各种任务的能力来展示这种方法的潜力。

方法

作者方法的核心就是语言建模。语言建模通常被看成是从一组样本 ( x 1 , x 2 , ⋯ , x n ) (x_1,x_2,\cdots,x_n) (x1,x2,,xn)中无监督地估计概率分布,其中每个样本由变长符号序列 ( s 1 , s 2 , ⋯ , s n ) (s_1,s_2,\cdots,s_n) (s1,s2,,sn)组成。由于语言具有天然的顺序性,常常将符号的联合概率分解为条件概率的乘积:
p ( x ) = ∏ i = 1 n p ( s n ∣ s 1 , ⋯ , s n − 1 ) (1) p(x) = \prod_{i=1}^n p(s_n|s_1,\cdots,s_{n-1}) \tag 1 p(x)=i=1np(sns1,,sn1)(1)
这种方法允许从形如 p ( s n − k , ⋯ , s n ∣ s 1 , ⋯ , s n − k − 1 ) p(s_{n-k},\cdots,s_n|s_1,\cdots,s_{n-k-1}) p(snk,,sns1,,snk1)的条件中进行采样和估计。由于Transformer的提出,对计算这些条件概率模型的表达能力有了显著提高。

学习执行单个任务可以在概率框架中表示为估计条件分布 p ( output ∣ input ) p(\text{output}|\text{input}) p(outputinput)。由于一个通用系统应该能执行许多不同的任务,即使对于相同的输入,系统不仅依赖于输入,还要依赖要执行的任务。即系统应该建模 p ( output ∣ input,task ) p(\text{output}|\text{input,task}) p(outputinput,task)。这在多任务和元学习的设定中已经被不同程度地形式化。

正如前人指出,语言模型提供了一种灵活的方式来指定任务、输入和输出。它们都可以表示为符号序列,例如,一个翻译训练样本可以写成序列(translate to french, english text, french text)。同理,阅读理解训练样本可以写成(answer the question, document, question, answer)。通过这种格式可以训练单个模型来推理和执行许多不同的任务。

互联网中包含大量的信息,可以无需交互式通信被动地获取。作者的推测是,具有足够容量的语言模型将开始学习推断和执行自然语言序列中展示的任务,以更好地预测它们,而不管它们的获取方式如何。如果语言模型能够做到这一点,实际上就是在执行无监督的多任务学习。作者通过分析语言模型在各种任务的零样本设置下的性能来测试这一点。

训练集

大多数先前的工作都是在单一文本领域中训练语言模型。作者的方法鼓励构建尽可能大和多样化的数据集。

一个可以获取多样和近乎无限文本数据的方法是爬虫,例如CommonCrawl,虽然这些数据比之前的语言建模数据集大很多个数量级,但它们存在严重的数据质量问题。

因此,作者创建了一个强调文本质量的爬虫,为了做到这一点,作者只爬取经过人工筛选/过滤的网页。从Reddit这个社交平台上爬取了所有至少获得3个karma的外部链接,karma这一指标可以被视为其他用户是否认为该链接有趣、存在教育意义、或仅有趣。

这样得到的数据集WebText包含了4500万个链接的文本子集,通过爬取这些链接并进行数据清理,获得了大于800万个文档,共约40G的文本。同时删除了作为其他数据集常见数据源的维基百科文档。

输入表示

一个通用的语言模型应该能够计算(并生成)任何字符串的概率。字节对编码(BPE, Byte Pair Encoding)是字符和词级语言建模之间一种折中的方法,它有效地在常见符号序列的词级输入和不常见符号序列的字符级输入之间进行插值。虽然它的名称中包含字节,但实现上通常操作的是Unicode代码点,而不是字节序列,这些实现需要包括完整的Unicode符号空间,基础词汇量将超过13万,这是一个过大的词汇量。而字节级的BPE(byte-level BPE)只需要大小为256的基础词汇。然而,直接将BPE应用于字节序列会导致子优化的合并,因为BPE使用基于频率的贪心启发式方法来构建标记词汇,BPE包含许多常见单词的多个版本,比如dog.dog!dog?。为了避免这种情况,作者阻止BPE在任何字节序列上跨字符类别进行合并。对空格添加了一个例外,这显著提高了压缩效率,同时只对多个词汇标记之间的单词进行了最小的分割。

这种输入表示方法使我们能将词级LM的经验优势与字节级方法的通用性结合起来。由于该方法可以为任何Unicode字符串分配概率,使得我们可以在任何数据集上评估我们的LM,不受预处理、分词或词汇大小的限制。

模型

在这里插入图片描述

GPT-1和GPT-2对比

作者使用了基于Transformer的架构构建语言模型,该模型很大程度上遵循了GPT-1的细节,但做了一些修改。层归一化被移动到每个子块(sub-block)的输入处(Pre-LN),并在最后一个自注意力块之后添加了一个额外的层归一化。并且使用了一种修改后的初始化方法,考虑了模型深度上残差路径的累积。在初始化时,将残差层的权重缩放因子设置为 1 / N 1/\sqrt{N} 1/N ,其中 N N N是残差层的数量。词汇表扩充到50274个词汇。将上下文大小从512扩大到1024,使用了更大的批量大小512。

实验

image-20231020161736966

训练和基准测试了四个不同大小的语言模型,如上表所示。最小的模型等同于原始的GPT模型,第二小的等同于BERT的最大模型,最大的模型称为GPT-2,比GPT模型的参数量多了一个数量级。

语言建模

作为零样本任务迁移的初始步骤,作者对WebText 语言模型在其训练的主要任务——语言建模上的零样本领域迁移进行了评估。

image-20231020162741690

WebText语言模型在不同领域和数据集之前的零样本迁移效果良好。在8个数据集的7个中改进了SOTA结果。在100万到200万个训练标记的小数据集(如Penn Treebanh和WikiText-2)上观察到了显著的改进。在用于测试长期依赖性的数据集(如LAMBADA和Children’s Book Test)上也观察到了显著的提升。

然而,在One Billion Word Benchmark数据集上仍然明显不如先前的工作。这可能是因为它既是最大的数据集,又具有一些最具破坏性的预处理方法——1BW的句子级乱序移除了所有的长距离结构。

Children’s Book Test

儿童读物测试(Children’s Book Test,CBT) 旨在检查语言模型在不同类别的单词上的表现:命名实体、名词、动词和介词。CBT不像其他评估指标一样报告困惑度,而是报告在自动构建的填空测试上的准确性,测试的任务是预测10个可能的选择中省略的单词的正确答案。

image-20231020162901232

如图2所示,随着模型规模的增加,性能稳步提高,并且在这个测试中缩小了与人类表现之间的差距。GPT-2在普通名词上取得了93.3%的最新最佳结果,并在命名实体上取得了89.1%的最佳结果。

LAMBADA

image-20231020163226891

LAMBADA数据集测试系统在文本中建模长距离依赖关系的能力。任务是预测句子的最后一个单词,这需要至少50个上下文标记才能让人类成功预测。GPT-2将最新研究的困惑度从99.8降低到8.6,并将语言模型在这个测试中的准确性从19%提高到52.66%。

Winograd Schema challenge

image-20231020163400760

Winograd模式挑战旨在通过衡量系统解决文本中歧义的能力来衡量系统进行常识推理的能力。最近,有研究者使用语言模型在这个挑战上取得了显著进展,通过预测具有更高概率的歧义解决方案来解决问题。作者遵循他们的问题表述,并在图3中使用完整和部分评分技术来展示模型的性能。GPT-2将最新研究的准确性提高了7%,达到70.70%。

阅读理解

CoQA测试阅读理解能力,以及模型回答依赖于对话历史的问题(如为什么)的能力。

当GPT-2在给定文档、相关对话历史和最后一个标记 A A A的条件下使用贪心解码时,在开发集上达到了55 F1的性能。这与4个基准系统中的3个的性能相匹配或超过,而这些基准系统是在127000多个手动收集的问答对上进行训练的。

目前监督学习的最佳方法是基于BERT的系统,其F1性能接近于人类的89。虽然GPT-2的性能对于没有任何监督训练的系统来说令人兴奋,但对其答案和错误的一些检查表明,GPT-2经常使用简单的基于检索的启发式方法。

摘要

image-20231020164052238

在CNN和Daily Mail数据集上测试了GPT-2进行摘要生成的能力。为了引导摘要生成行为,作者在文章后面添加了文本TL;DR:,并使用Top-k随机采样生成了100个标记,其中k = 2,以减少重复,并鼓励比贪心解码更抽象的摘要。

使用这100个标记中的前3个生成的句子作为摘要。在ROUGE 1,2,L指标上,生成的摘要只是开始接近经典神经网络基线的性能,并且刚好优于从文章中选择3个随机句子。当移除任务提示时,GPT-2的性能在综合指标上下降了6.4个点,这表明它可以通过自然语言来调用特定任务的行为能力。在摘要生成方面表现一般。

翻译

测试了GPT-2是否已经开始学习如何将一种语言翻译成另一种语言。为了帮助它推断出这是所期望的任务,做将语言模型的条件设置为一个样本对的上下文,格式为english sentence = french sentence,然后在最后一个提示的english sentence = ,使用贪心解码从模型中进行抽样,并将第一个生成的句子作为翻译结果。

在WMT-14英法测试集上,GPT-2获得了5个BLEU分数,略低于以前在无监督词汇翻译研究中推断出的逐词替换双语词典的方法。在WMT-14法英测试集上,GPT-2能够利用其非常强大的英语语言模型表现得更好,达到了11.5个BLEU分数。这超过了几个无监督机器翻译基线,但仍远远不及当前最好的无监督机器翻译方法的33.5个BLEU分数。

问答

测试语言模型中包含的信息的一种潜在方法是评估它在事实型问题中生成正确答案的概率。类似于翻译,语言模型的上下文样本以问答对的形式进行初始化,这有助于模型推断出数据集的短答案风格。当使用类似于SQUAD的阅读理解数据集上常用的完全匹配度量来评估时,GPT-2在问题回答上的准确率为4.1%。

image-20231021092931597

GPT-2对其生成的答案赋予的概率是很好校准的,在它最有信心的1%的问题上准确率为63.1%。GPT-2在开发集问题上生成的30个最有信心的答案显示在表5中。与将信息检索与抽取式文档问题回答相混合的开放域问答系统的30%至50%的准确率范围相比,GPT-2的性能仍然要差得多。

讨论

许多工作致力于学习理解和对有监督和无监督预训练方法的表示进行批判性评估。研究结果表明,无监督任务学习是一个值得探索的有前途的研究领域。这些发现可能有助于解释预训练技术在下游自然语言处理任务中的广泛成功,因为作者展示了在极限情况下,其中一种预训练技术开始直接学习执行任务,而无需进行有监督的调整或修改。

在阅读理解任务中,GPT-2的性能在零样本设置下与有监督基线相媲美。然而,在其他任务(摘要)上,根据定量指标,其性能仍然很基础。尽管作为研究结果具有指导意义,但从实际应用的角度来看,GPT-2的零样本性能仍远未达到可用的水平。

作者研究了WebText语言模型在许多经典自然语言处理任务上的零样本性能,但还有许多其他任务可以进行评估。毫无疑问,仍有许多实际任务,GPT-2的性能仍然不如随机结果。即使在评估的常见任务中,如问答和翻译,只有当语言模型具有足够的容量时,它们才开始超过简单的基线

虽然零样本性能为GPT-2在许多任务上的潜在性能建立了一个基准,但目前还不清楚微调的上限在哪里。在某些任务上,GPT-2的完全抽象输出与基于抽取式指针网络的输出有显著区别,后者目前在许多问答和阅读理解数据集上是最先进的。

结论

当一个大型语言模型在足够大且多样化的数据集上进行训练时,它能够在许多领域和数据集上表现出色。GPT-2在8个测试的语言建模数据集中,有7个达到了最先进的性能。模型在零样本设置下能够执行的任务的多样性表明,训练容量高的模型在最大化足够多样化文本语料库的似然性时,开始学习如何执行许多令人惊讶的任务,而无需监督。

总结

⭐ 作者提出了GPT-2,针对GPT-1进行了一些修改,基于无监督训练。使用Pre-LN的层归一化方法;在最后一个自注意力块后添加了一个额外的层归一化;修改了残差层权重缩放因子;扩充了词汇表;将上下文大小从512扩充到了1024;使用了更大的批次512。

作者开始注意到零样本设定下的表现,观察到语言模型的容量对性能至关重要。给最终性能超群的175B参数GPT-3一个启发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/167131.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

框架篇

一、Spring中的单例Bean是线程安全的吗 二、AOP相关面试题 三、Spring中的事务 四、Spring中事务失效的场景有 五、Spring bean的生命周期 六、Spring的循环依赖 七、SpringMVC的执行流程 八、自动配置原理 九、Spring框架常见的注解 十、Mybatis的执行流程 十一、MyBatis延迟加…

postgresql(openGauss)模糊匹配参数

被pg系这个show要求精准匹配参数恶心的不轻。 原理是用.psqlrc(openGauss用.gsqlrc)文件set一个select常量进去,需要用:调用这个常量。理论上也可以增强其他的各种功能。 我在openGauss做的一个例子 .gsqlrc(.psqlrc…

自学SLAM(4)《第二讲:三维物体刚体运动》作业

前言 小编研究生的研究方向是视觉SLAM,目前在自学,本篇文章为初学高翔老师课的第二次作业。 文章目录 前言1.熟悉 Eigen 矩阵运算2.几何运算练习3.旋转的表达4.罗德里格斯公式的证明5.四元数运算性质的验证6.熟悉 C11 1.熟悉 Eigen 矩阵运算 设线性⽅程 …

分布式共识算法及落地

摘要 本文介绍常见的分布式共识算法,使用场景,以及相关已经落地了的程序或框架 1. 为什么要分布式共识算法 在分布式系统中,不同节点之间可能存在网络延迟、故障等原因导致彼此之间存在数据不一致的情况,为了保证分布式系统中的…

[TCP1P 2023] 部分crypto,pwn,reverse

Crypto Final Consensus 这是个AES爆破密钥的题,加密方法是先后用两个密钥加密。远程先给出加密后的flag,然后允许输入值并进行加密。 from Crypto.Cipher import AES import random from Crypto.Util.Padding import pada b"" b b"&…

系统架构师考试科目一:综合知识

某软件公司欲开发一个 Windows 平台上的公告板系统。在明确用户需求后,该公司的 架构师决定采用 Command 模式实现该系统的界面显示部分,并设计 UML 类图如下 图所示。图中与 Command 模式中的 Invoker 角色相对应的类是( ) ,与 ConcreteComm…

一篇文章讲懂mysql中的锁

事务的隔离性是由锁来实现的。 为什么需要锁 锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤其是针对一些敏感的数据(比如订单、金额等)&#x…

C语言 ——宽字符

前言: 过去C语⾔并不适合⾮英语国家(地区)使⽤。 C语⾔最初假定字符都是单字节的。但是这些假定并不是在世界的任何地⽅都适⽤。 C语⾔字符默认是采⽤ASCII编码的,ASCII字符集采⽤的是单字节编码,且只使⽤了单字节中…

Opensuse Tumbleweed快速部署K8S-1.28.2

** #查看你的网卡信息 nmcli device show#设置你的静态IP nmcli connection modify ens32 ipv4.method manual \ipv4.addresses 172.16.20.214/24 ipv4.gateway 172.16.20.1 \ipv4.dns 114.114.114.114#重启网卡生效 nmcli c down ens32 && nmcli c up ens32#添加DNS …

代码随想录算法训练营第二十九天 | 回溯算法总结

​ 代码随想录算法训练营第二十九天 | 回溯算法总结 1. 组合问题 1.1 组合问题 在77. 组合中,我们开始用回溯法解决第一道题目:组合问题。 回溯算法跟k层for循环同样是暴力解法,为什么用回溯呢?回溯法的魅力,用递…

解决appium或selenium使用时driver.find_element_by_xpath中间有删除线问题

一、问题描述 Darren洋在公司电脑搭建完成appium后准备运行appium2.0版本执行脚本时发现执行脚本中的driver.find_element_by_xpath中间有删除线,说明较高版本的appium及selenium中该方法已被弃用。 二、解决办法 该问题解决办法为将driver.find_element_by_xpath()…

Linux线程--创建及等待

1.进程与线程 典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。  线程是操作系统能够进行运算调度的…

Android Studio快速实现Flutter应用的国际化和多语言支持

文章目录 Flutter实现国际化和多语言支持添加依赖库Android Studio 安装flutter Intl插件项目初始化增加语言app中使用国际化在应用中切换语言:运行应用 总结easy_localization 插件intl 包Flutter GetX 包flutter_i18n 插件JSON 文件 Flutter实现国际化和多语言支持…

01、Python 的数据类型

目录 数据类型Python变量具有如下两个特征:输出变量 标识符规则整型四种表示形式浮点数复数 数据类型 使用Python变量 Python的基础类型 Python变量具有如下两个特征: 变量无需声明即可直接赋值:对一个不存在的变量赋值就相当于定义了一个…

html表格标签

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><!--表格table 行 tr 列 td --> <table border"1px"><tr> <!--colsp…

mac 升级node到指定版本

node版本14.15.1升级到最新稳定版18.18.2 mac系统 先查看一下自己的node版本 node -v开始升级 第一步 清除node的缓存 sudo npm cache clean -f第二步 安装n模块【管理模块 n是管理 nodejs版本】 sudo npm install -g n第三步升级node sudo n stable // 把当前系统的 Node…

【试题039】 多个逻辑或例题

题目&#xff1a;设int n;,执行表达式(n0)||(n1)||(n2)||(n3)后,n的值是&#xff1f;代码分析&#xff1a; //设int n; , 执行表达式(n 0) || (n 1) ||(n 2) ||(n 3)后, n的值是?int n;printf("n%d\n", (n 0) || (n 1) || (n 2) || (n 3));//分析&#xff1…

[Spring] SpringBoot2 简介(一)—— 基础配置

目录 一、SpringBoot 简介 1、Spring 的缺点 2、SpringBoot 功能 二、SpringBoot 入门案例 1、实现步骤 2、访问服务器 3、入门小结 4、Idea 快速构建 SpringBoot 工程 5、起步依赖无需版本号 6、主启动类的在项目中的位置&#xff08;*重要*&#xff09; 三、Sprin…

【Unity3D编辑器拓展】Unity3D的IMGUI、GUI、GUILayout、EditorGUI、EditorGUILayout、OnGUI【全面总结】

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中&#xff0c;常常会遇到要使用OnGUI的地方。 也会遇到…

如何在linux服务器上安装Anaconda与pytorch

如何在linux服务器上安装Anaconda与pytorch 1&#xff0c;安装anaconda1.1 下载anaconda安装包1.2 安装anaconda1.3 设计环境变量1.4 安装完成验证 2 Anaconda安装pytorch2.1 创建虚拟环境2.2 查看现存环境2.3 激活环境2.4 选择合适的pytorch版本下载2.5 检测是否安装成功&…