【深度学习】GPT-3

        2020年5月,OpenAI在长达72页的论文《https://arxiv.org/pdf/2005.14165Language Models are Few-Shot Learners》中发布了GPT-3,共有1750亿参数量,需要700G的硬盘存储,(GPT-2有15亿个参数),它比GPT-2有了极大的改进。根据论文描述,GPT-3非常强大,给予任何文本提示,GPT-3将返回一个文本试图匹配用户给它的模式。用户可以给它 "编程",只需向它展示几个希望它做的例子,它就会提供一篇完整的文章或故事。GPT-3在许多NLP数据集上都取得了很强的性能,包括翻译、问题回答和cloze任务,以及一些需要即时推理或领域适应的任务,如在句子中使用一个新词或执行3位数运算。GPT-3可以生成人类评估人员难以区分的新闻文章样本。

1.GPT-3 提出背景

        OpenAI在发布GPT2后,并没有引起业界太大的影响和关注,究其原因,并不是zero-shot这种想法不够吸引人,而是GPT2表现出来的效果依然差强人意,仍然属于“人工智障”的阶段,然而OpenAI认为他们的方向没有问题,不在特定领域上做太多的微调,甚至不做微调(这样就能避免1.人工标注数据和2.重新训练模型)才是大规模语言模型的未来,因此在不久之后他们又提出了GPT-3,GPT-3也就是chatGPT的前生。

        提出问题:许多基于RNN或Transformer结构的语言模型通过“pre-train + fine-tune”在许多NLP任务和基准方面取得了实质性进展。但这种方法必须拥有大量的下游任务fine-tune样本才能取得很好的性能。相比之下,人类通常只需要几个例子或简单的指令就能完成一项新的语言任务——这是当前NLP系统仍难以做到的。GPT-3主要聚焦于更通用的NLP模型,解决当前BERT类模型的两个缺点:

        1.对领域内有标签数据的过分依赖:虽然有了预训练+精调的两段式框架,但还是少不了一定量的领域标注数据,否则很难取得不错的效果,而标注数据的成本又是很高的。

        2.对于领域数据分布的过拟合:在精调阶段,因为领域数据有限,模型只能拟合训练数据分布,如果数据较少的话就可能造成过拟合,致使模型的泛华能力下降,更加无法应用到其他领域。

2.GPT-3 简介

         GPT-3这是一个具有1750亿个参数的自回归语言模型,比之前的任何非稀疏语言模型大至少10倍,并在few-shot设置下测试其性能。对于所有任务,GPT-3都是在没有任何梯度更新或微调的情况下应用的,仅通过与模型的文本交互来指定任务。GPT-3的主要目标是用更少的领域数据、且不经过精调步骤去解决问题。

        主要贡献:证明了通过增大参数量就能让语言模型显著提高下游任务在Few-shot(仅给定任务说明和少量示例)设置下的性能。有时甚至达到了与现有最先进的微调方法相比的竞争力。 

        GPT-3模型移除fine-tune有2个解决方案:

        1.meta-learning

        模型在训练阶段具备了一系列模式识别的能力和方法,并通过在预测过程中利用这些能力和方法以快速适应一个下游任务。最近的一些研究尝试通过称为in-context learning的方法来实现上述过程,然而效果距离期待的相差甚远。

        2.Large scale transformers

        Transformer语言模型参数的每一次增大都会让文本理解能力和其他的NLP下游任务的性能得到提升。此外,有研究指出描述许多下游任务性能的log损失能让模型的性能和参数之间服从一个平滑趋势。考虑到in-context learning会将学习到的知识和方法存在模型的参数中,假设:模型的情境学习能力也会随着参数规模的增长而增长

2-1 In-context learning

        In-context learning是论文中介绍的一个重要概念,要理解in-context learning,我们需要先理解meta-learning(元学习)。对于一个少样本的任务来说,模型的初始化值非常重要,从一个好的初始化值作为起点,模型能够尽快收敛,使得到的结果非常快的逼近全局最优解。元学习的核心思想在于通过少量的数据寻找一个合适的初始化范围,使得模型能够在有限的数据集上快速拟合,并获得不错的效果。在语言模型的背景下,这意味着该模型在训练时培养了广泛的技能和模式识别能力,然后在推理时使用这些能力来快速适应或识别期望的任务

       In-context learning在训练时,使用预先训练的语言模型的文本输入作为任务规范的形式:该模型以自然语言指令和/或任务的一些演示为条件,然后通过预测下一步将发生什么来完成任务。尽管它已经显示出一些初步的希望,但这种方法仍然取得了远不如微调的结果。元学习显然需要大幅改进,才能成为解决语言任务的实用方法。

        这里的介绍使用的是MAML(Model-Agnostic Meta-Learning)算法,正常的监督学习是将一个批次的数据打包成一个batch进行学习。但是元学习是将一个个任务打包成batch,每个batch分为支持集(support set)和质询集(query set),类似于学习任务中的训练集和测试集。

        对一个网络模型f,其参数表示为θ,它的初始化值被叫做meta-initialization。MAML的目标则是学习一组meta-initialization,能够快速应用到其它任务中。MAML的迭代涉及两次参数更新,分别是内循环(inner loop)和外循环(outer loop)。内循环是根据任务标签快速的对具体的任务进行学习和适应,而外学习则是对meta-initialization进行更新。直观的理解,我用一组meta-initialization去学习多个任务,如果每个任务都学得比较好,则说明这组meta-initialization是一个不错的初始化值,否则我们就去对这组值进行更新,如图所示。目前的实验结果表明元学习距离学习一个通用的词向量模型还是有很多工作要做的。

        语言建模的另一个最新趋势可能提供了前进的方向。近年来,基于Transformer语言模型的容量大幅增加,从1亿个参数[RNSS18],到3亿个参数[DCLT18],到15亿个参数/RWC+19],到80亿个参数[SSP+19],110亿个参数RSR+19],最后是170亿个参数[Tur20]。每一次增加都带来了文本生成以及下游NLP任务的改进,有证据表明,log loss与许多下游任务密切相关,随着规模的增长,log loss呈现平稳的改善趋势[KMH+20]。由于in-context learning在模型的参数范围内吸收许多技能和任务,因此,in-context learning能力可能会随着规模的增长而表现出同样强大的增益。

2-2 Few-shot,one-shot,zero-shot learning

        情境学习(in-context learning):在被给定的几个任务示例或一个任务说明的情况下,模型应该能通过简单预测以补全任务中其他的实例。即,情境学习要求预训练模型要对任务本身进行理解。情境学习三种分类的定义和示例如下:

        1.few-shot learning

        定义:允许输入数条范例和一则任务说明

        示例:向模型输入“这个任务要求将中文翻译为英文。你好->hello,再见->goodbye,购买->purchase,销售->”,然后要求模型预测下一个输出应该是什么,正确答案应为“sell”。

        2.one-shot learning

        定义:只允许输入一条范例和一则任务说明

        示例:向模型输入“这个任务要求将中文翻译为英文。你好->hello,销售->”,然后要求模型预测下一个输出应该是什么,正确答案应为“sell”。

        3.zero-shot learning

        定义:不允许输入任何范例,只允许输入一则任务说明

        示例:向模型输入“这个任务要求将中文翻译为英文。销售->”,然后要求模型预测下一个输出应该是什么,正确答案应为“sell”。

        在few-shot learning中,提供若干个( 10 - 100 个)示例和任务描述供模型学习。one-shot laerning是提供1个示例和任务描述。zero-shot则不提供示例,只是在测试时提供任务相关的具体描述。作者对这3种学习方式分别进行了实验,实验结果表明,三个学习方式的效果都会随着模型容量的上升而上升,且few shot > one shot > zero show。

2-3 数据集

        GPT-3共训练了5个不同的语料,分别是低质量的Common Crawl,高质量的WebText2,Books1,Books2和Wikipedia,GPT-3根据数据集的不同的质量赋予了不同的权值,权值越高的在训练的时候越容易抽样到,如表所示。

2-4 模型结构

GPT-3沿用了GPT-2的结构,但是在网络容量上做了很大的提升,具体如下:

        1.GPT-3采用了 96 层的多头transformer,头的个数为 96 ;

        2.词向量的长度是 12,888 ;

        3.上下文划窗的窗口大小提升至 2,048 个token;

        4.使用了alternating dense和locally banded sparse attention。

2-5 GPT-3的性能

        在大量的语言模型数据集中,GPT-3超过了绝大多数的zero-shot或者few-shot的state-of-the-art方法。另外GPT-3在很多复杂的NLP任务中也超过了fine-tune之后的state-of-the-art方法,例如闭卷问答,模式解析,机器翻译等。除了这些传统的NLP任务,GPT-3在一些其他的领域也取得了非常震惊的效果,例如进行数学加法,文章生成,编写代码等。

        GPT3整个模型的参数量达到了1750亿个,且做few-shot时不改变模型,而是在输入指定任务后,再输入一些针对任务的样例,如要求英语翻法语,就在translate English to French:后面加上一些翻译的样例,最后再输入你的问题如cheese => 其中=>也是提示词,示意模型进行输出。这是基于transformer架构的自注意力机制实现的。但是每一次都要给样本,因为模型没法存下样本的影响。

3. 总结

        GPT系列从1到3,通通采用的是transformer架构,可以说模型结构并没有创新性的设计。在微软的资金支持下,这更像是一场赤裸裸的炫富:1750亿的参数,31个分工明确的作者,超强算力的计算机( 285,000 个CPU, 10,000 个GPU),1200万的训练费用,45TB的训练数据(维基百科的全部数据只相当于其中的 0.6% )。甚至在训练GPT-3时出现了一个bug,OpenAI自己也没有资金重新训练了。

        GPT-3的本质还是通过海量的参数学习海量的数据,然后依赖transformer强大的拟合能力使得模型能够收敛。基于这个原因,GPT-3学到的模型分布也很难摆脱这个数据集的分布情况。得益于庞大的数据集,GPT-3可以完成一些令人感到惊喜的任务,但是GPT-3也不是万能的,对于一些明显不在这个分布或者和这个分布有冲突的任务来说,GPT-3还是无能为力的。例如通过目前的测试来看,GPT-3还有很多缺点的:

        1.对于一些命题没有意义的问题,GPT-3不会判断命题有效与否,而是拟合一个没有意义的答案出来;

        2.由于40TB海量数据的存在,很难保证GPT-3生成的文章不包含一些非常敏感的内容,例如种族歧视,性别歧视,宗教偏见等;

        3.受限于transformer的建模能力,GPT-3并不能保证生成的一篇长文章或者一本书籍的连贯性,存在下文不停重复上文的问题。

        4.难以生成长文本,序列太长效果就会差。由于采用的是解码器,不能从后往前看,在gpt里每个词都是同样重要的,没有重点并且难以解释究竟是模型记住了样例还是模型学到了具体意义,难以解释每个权重是做什么的,可解释性差。

        GPT-3如此强大性能的语言模型的提出,为下游各种类型的NLP任务提供了非常优秀的词向量模型。近年来,硬件的性能在飞速发展,而算法的研究似乎遇见了瓶颈,GPT-3给冷清的AI领域注入了一剂强心剂,告诉各大硬件厂商它们的工作还要加油,只要算力足够强,AI的性能还有不断提升的上界。

4.思考

4-1 有监督模型向半监督甚至无监督方向发展

        数据的规模的增长速度远远超过了数据的标注速度,这也就导致了大量无标签数据的产生。这些无标签的数据并非没有价值,相反,如果找到合适的“炼金术”,将可以从这些海量的数据中获取意想不到的价值。如何利用上这些无标签的数据来改善任务的表现变成了一个越来越无法轻视的问题。

4-2 从少量数据复杂模型到大量数据简单模型

        深度神经网络的拟合能力非常的强大,一个简单的神经网络模型就足以拟合任何函数。但无奈使用越简单的网络结构完成同一个任务,对数据量的要求也更高。数据量越是上升,数据质量越是提高,往往对模型的要求就会越会降低。数据量越大,模型就越容易捕捉到符合真实世界分布的特征。Word2Vec就是一个例子,它所使用的目标函数非常的简单,但是由于使用了大量的文本,于是训练出的词向量中就包含了许多有趣的特性。

 4-3 从专用模型向通用模型发展

        GPT、BERT、MT-DNN、GPT-2都使用了经过预训练的通用模型来继续进行下游的机器学习任务,并不需要对模型本身再做太多的修改。如果一个模型的表达能力足够的强,训练时候使用的数据量足够的大,那么模型的通用性就会更强,就不需要针对特定的任务做太多的修改。最极端的情况就像是GPT-2这个样子,训练时甚至完全不需要知道后续的下游任务是什么,就能够训练出一个通用的多任务模型。

4-4 对数据的规模和质量提高

        GPT、BERT、MT-DNN、GPT-2虽然先后刷榜,在成绩的提升中,数据规模的提升占有比结构调整更大的比重。随着模型的通用化和简单化,为提升模型的性能,今后更多的注意力将会从如何设计一个复杂、专用的模型转移到如何获取、清洗、精化出质量更加出众的、大量的数据上。数据的处理方式调整的作用将会大于模型结构调整的作用。

Reference:
1.https://www.zhihu.com/question/398114261/answer/1253942032
2.预训练语言模型之GPT-1,GPT-2和GPT-3 - 知乎

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

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

相关文章

钉钉返回:访问ip不在白名单之中,请参考FAQ

新版钉钉 在开发管理-服务器出口IP-配置返回错误信息返回给你的requestIp

k8s部署新版elasticsearch+kibana并配置快照备份

版本:es 7.17.6 kibana 7.17.6 k8s:1.19.16 一、介绍 Elasticsearch和Kibana是一对强大的开源工具,通常一起使用以构建实时数据分析和可视化解决方案。 Elasticsearch: Elasticsearch是一个分布式、高性能的实时搜索和分析引擎。它构建在开源搜索引擎库Lucene之上…

【C++】开源:Redis数据库配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Redis数据库配置与使用。 无专精则不能成,无涉猎则不能通。。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&#xff0c…

边缘计算对现代交通的重要作用

边缘计算之所以重要,是在于即使在5G真正商用之时,可以实现超大带宽(eMBB)的应用场景,但庞大数据量的涌现也就意味着需要在云和端传输过程中找到一个承接点,对数据进行预处理再选择是否上云。 边缘计算应用演…

【Python入门【推导式创建序列、字典推导式、集合推导式】(九)

👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…

SkyWalking链路追踪-技术文档首页

SkyWalking 文档中文版(社区提供) (skyapm.github.io)https://skyapm.github.io/document-cn-translation-of-skywalking/ SkyWalking-基本概念 SkyWalking链路追踪是一个用于分布式系统的性能监控工具,它帮助开发人员了解系统中各组件之间…

工程安全监测无线振弦采集仪在建筑物的应用分析

工程安全监测无线振弦采集仪在建筑物的应用分析 工程安全监测无线振弦采集仪是一种在建筑物中应用的重要设备。它通过无线采集建筑物内部的振动信息,对建筑物的安全性进行监测和评估,为建筑物的施工和使用提供了可靠的技术支持。本文将详细介绍工程安全…

ElasticSearch基础篇-安装与基本操作

ElasticSearch基础篇 安装 官网 下载地址 下载完成后对文件进行解压,项目结构如下 进入bin目录点击elasticsearch.bat启动服务 9300 端口为 Elasticsearch 集群间组件的通信端口, 9200 端口为浏览器访问的 http协议 RESTful 端口 打开浏览器&#…

力扣热门100题之矩阵置0【中等】

题目描述 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]] 示例 2&#xff…

C++ - list介绍 和 list的模拟实现

list介绍 list 是一个支持在常数范围内,任意位置进行插入删除的序列式容器,且这个容器可以前后双向迭代。我们可以把 list 理解为 双向循环链表的结构。 于其他结构的容器相比,list在 任意位置进行插入和函数的效率要高很多;而li…

SWF格式视频怎么转换成AVI格式?简单的转换方法分享

当你想要在不同的设备上播放视频时,将SWF格式视频转换成AVI格式是非常有用的。因为SWF格式通常只能在特定的软件或网页上播放,而AVI格式则可以在更广泛的设备上播放,包括智能手机,平板电脑和电视机等。那么我们怎么将SWF转换成AVI…

AI学习笔记四:yolov5训练自己的数据集

若该文为原创文章,转载请注明原文出处。 一般情况下,大部分人的电脑都是没有cpu的,cpu也是可以训练的,但花费的时间太长,实际200张图片,使用CPU训练300轮花了3天,本章记录使用云服务器来训练自…

SkyWalking链路追踪-搭建-spring-boot-cloud-单机环境 之《10 分钟快速搭建 SkyWalking 服务》

首先了解一下单机环境 第一步,搭建一个 Elasticsearch 服务。第二步,下载 SkyWalking 软件包。第三步,搭建一个 SkyWalking OAP 服务。第四步,启动一个 Spring Boot 应用,并配置 SkyWalking Agent。第五步,…

Docker Compose 容器编排

Docker compose Docker compose 实现单机容器集群编排管理(使用一个模板文件定义多个应用容器的启动参数和依赖关系,并使用docker compose来根据这个模板文件的配置来启动容器) 通俗来说就是把之前的多条docker run启动容器命令 转换为docker…

【小白学编程5】我的房子在哪儿?理解类型和变量

我的房子在哪儿? 理解类型和变量 - 《小白学编程》系列第五讲 - 《小白学编程》系列课程过半,为满足更多同学的时间需求,课程直播时间改为了晚上八点。 昨晚八点准时开始课程的第五讲,其主题为:“我的房子在哪儿?理解…

学习 C语言第二天 :C语言数据类型和变量(下)

目录: 1.变量的介绍以及存储 2.算术操作符、赋值操作符、单目操作符 3.scanf和printf的介绍 1.变量的介绍以及存储 1.1.变量的创建 了解了什么是类型了,类型是用来创建变量的。 变量是什么呢?在C语言当中不经常变的量称为常量,经常…

【雕爷学编程】Arduino动手做(95)---GY9960手势传感器模块3

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

直播平台源码开发提高直播质量的关键:视频编码和解码技术

在互联网日益发展的今天,直播平台成为人们互联网生活的主力军,直播平台功能的多样化与智能化使我们的生活有了极大地改变,比如短视频功能,它让我们既可以随时随地去发布自己所拍摄到的东西让世界各地的用户看到,也能让…

Windows下基于VSCode搭建C++开发环境(包含整合MinGW64、CMake的详细流程)

最近想写写C,装了VisualStudio 2022,折腾半天。对于一个用惯VSCode的人来说,总感觉IDE太笨重。于是自己网上各种查资料,自己琢磨,搭建了一套Windows下基于VSCode和CMake的C轻量级开发环境。 具体搭建步骤 1. 下载并安…

国产数据库-内核特性-gbase8a智能索引

国产数据库-内核特性-gbase8a智能索引 南大通用gbase8a MPP Cluster是一款分析型MPP数据库,有个特性鲜明的功能就是智能索引。该索引建立膨胀率不超过百分之一,包含基于列的统计信息,可以有效过滤数据,大幅降低数据库磁盘IO&#…