GPT系列论文解读:GPT-2

GPT系列

GPT(Generative Pre-trained Transformer)是一系列基于Transformer架构的预训练语言模型,由OpenAI开发。以下是GPT系列的主要模型:

  1. GPT:GPT-1是于2018年发布的第一个版本,它使用了12个Transformer编码器层和1.5亿个参数。GPT-1的训练数据包括了互联网上的大量文本。

  2. GPT-2:GPT-2于2019年发布,是GPT系列的第二个版本。它比GPT-1更大更强大,使用了24个Transformer编码器层和1.5亿到15亿个参数之间的不同配置。GPT-2在生成文本方面表现出色,但由于担心滥用风险,OpenAI最初选择限制了其训练模型的发布。

  3. GPT-3:GPT-3于2020年发布,是GPT系列的第三个版本,也是目前最先进和最强大的版本。它采用了1750亿个参数,拥有1750亿个可调节的权重。GPT-3在自然语言处理(NLP)任务中表现出色,可以生成连贯的文本、回答问题、进行对话等。

  4. GPT-3.5:GPT-3.5是在GPT-3基础上进行微调和改进的一个变种,它是对GPT-3的进一步优化和性能改进。

GPT系列的模型在自然语言处理领域取得了巨大的成功,并在多个任务上展示出了强大的生成和理解能力。它们被广泛用于文本生成、对话系统、机器翻译、摘要生成等各种应用中,对自然语言处理和人工智能领域的发展有着重要的影响。

GPT系列是当前自然语言处理领域下最流行,也是商业化效果最好的自然语言大模型,并且他的论文也对NLP的领域产生巨大影响,GPT首次将预训练-微调模型真正带入NLP领域,同时提出了多种具有前瞻性的训练方法,被后来的BERT等有重大影响的NLP论文所借鉴。

目录

  • GPT系列
  • 前言
  • Zero-Shot
  • 贡献
  • GPT-2提出的方法
    • 训练数据集
    • 输入表示
    • 模型架构

前言

BERT的横空出世,利用与GPT相似的思路,使用Transformer编码器训练了更大的模型,得到了比GPT更好的效果,但是GPT的作者Alec Radford仍然坚定Transformer解码器在此类任务中的效果同样好,几个月后发表了GPT-2,Alec Radford训练一个比BERT更大的模型,,但他发现将GPT-1模型在更大的数据集训练一个更大的模型(15亿参数)仍然与BERT模型对比优势不太明显,提到了Zero-Shot的概念(当然这个概念在GPT-1中就提到了,在GPT-2论文将其作为主要卖点)

Zero-Shot

“Zero-shot” 是一个术语,通常用于机器学习和自然语言处理领域。这个术语指的是模型在没有事先接受相关任务的训练数据的情况下执行任务的能力。换句话说,这是模型能够在未见过的情境中进行推理和处理的能力。

在自然语言处理中,zero-shot 学习通常指的是模型能够处理未知词汇或主题的能力。例如,如果一个文本分类模型在训练时没有见过关于某个特定主题的样本,但在测试时却能够正确分类相关文本,那么我们就可以说这个模型具有 zero-shot 学习能力。

这种能力的实现通常涉及到使用预训练的模型,这些模型在大量数据上进行了训练,从而学到了通用的语言和知识表示。这样的模型能够泛化到新领域或任务,即使它们在训练时没有见过相关的数据。

在这篇论文中,Zero-shot指的是在使用GPT来完成一些下游任务的时候,不需要下游任务任何标注的信息,也不需要训练模型,最终他们也得到了一些有说服力的结果。

贡献

我们先说GPT-2的贡献:

我们都知道自然语言处理任务,例如问答、机器翻译、阅读理解和摘要,通常通过对特定任务数据集的监督学习来完成。

作者证明了GPT模型可以在没有任何有标签的数据(也就是上面讲的Zero-shot)进行训练后就可以在多个任务中取得良好的效果。他们在包含数百万个网页(称为 WebText)的新数据集上进行训练时,语言模型开始在没有任何显式监督的情况下学习这些任务。当以文档加问题为条件时,语言模型生成的答案在 CoQA 数据集上达到 55 F1 - 在不使用 127,000 多个训练示例的情况下,匹配或超过 4 个基线系统中的 3 个的性能。语言模型的容量对于零样本任务迁移的成功至关重要,增加它的容量可以提高跨任务的对数线性方式的性能。我们最大的模型 GPT-2 是一个 1.5B 参数 Transformer,它在零样本设置下的 8 个测试语言建模数据集中的 7 个上取得了最先进的结果,但仍然不适合 WebText。模型中的示例反映了这些改进并包含连贯的文本段落。这些发现为构建语言处理系统提供了一条有希望的道路,该系统可以从自然发生的演示中学习执行任务。

GPT-2提出的方法

下面我们讲讲GPT-2做了什么事情:
GPT团队有很大野心,他们认为自己开发的通用系统框架应该能够执行不同的任务,即使对于相同的输入,它不仅以输入为条件,也要以执行的任务为条件。简单来说我们知道一般的语言模型都基于下面的公式:
P ( 输出 ∣ 输入 ) P(输出|输入) P(输出输入)
但是GPT-2对于下面的公式建模:
P ( 输出 ∣ 输入 , 任务 ) P(输出|输入,任务) P(输出输入,任务)

举个例子:
对于翻译任务,训练集的形式应为如下:
( 翻译为法语 , 中文文本 , 法语文本 ) (翻译为法语, 中文文本,法语文本) (翻译为法语,中文文本,法语文本)
对于阅读理解的任务,训练集的形式应为如下:
( 回答问题 , 段落 , 问题 , 答案 ) (回答问题,段落,问题,答案) (回答问题,段落,问题,答案)

训练数据集

一般以任务为驱动的模型训练都是基于一个特定领域的数据集上的,但是GPT想要做的是通用的模型,所以在数据集上,他们选择的是网络爬虫。

GPT团队创建了一个强调文档质量的新的网页抓取方法。为了做到这一点,他们只抓取了经人工筛选/过滤的网页。手动筛选完整的网页抓取将非常昂贵,因此作为起点,我们抓取了所有来自社交媒体平台Reddit的外部链接,这些链接至少获得了3个赞(karma)。这可以被视为一个启发式指标,用于判断其他用户是否认为该链接有趣、有教育意义或仅仅是好笑的。

简单介绍一下Reddit:
Reddit是一个社交新闻聚合、讨论和内容分享的网站。它是由史蒂夫·霍夫曼(Steve Huffman)和亚伦·斯沃茨(Aaron Swartz)于2005年创建的。Reddit的用户可以在各种主题的论坛(称为"subreddit")上发布文本、链接、图像和视频等内容,并与其他用户进行讨论和互动。

利用上面的方法抓取出了4500万个链接,GPT团队获取其HTML响应,经过一些预处理后,提出其中有自然语言意义的内容,创建了WebText数据集,它包含超过800万个文档,总共40GB的文本。

论文中给出在WebText数据集中部分有关法语和英语翻译的自然发生的演示示例:
在这里插入图片描述

输入表示

GPT团队认为:通用语言模型(LM)应该能够计算(并生成)任何字符串的概率。当前的大规模 LM 包括预处理步骤,例如小写、标记化和词汇表外标记,这些步骤限制了可建模字符串的空间。

字节对编码(Byte Pair Encoding,简称BPE)是一种介于字符级和词级语言建模之间的实用方法,它有效地在常见符号序列使用词级输入,在不常见符号序列使用字符级输入之间进行插值。尽管其名称中包含"byte"(字节),但参考的BPE实现通常是基于Unicode代码点而不是字节序列进行操作的。为了对所有Unicode字符串进行建模,这些实现需要包含完整的Unicode符号空间。这将导致基本词汇量超过130,000个,在添加任何多符号标记之前就已经非常庞大。相比之下,通常使用BPE的标记词汇量为32,000到64,000个,这是可以接受的范围。

与此相反,字节级的BPE版本只需要一个大小为256的基本词汇表。然而,直接将BPE应用于字节序列会导致合并的次优选择,因为BPE使用基于频率的贪心启发式方法来构建标记词汇表。我们观察到BPE会包含许多常见单词的多个变体,比如dog、dog!、dog?、dog.等。这导致词汇表有限的位置和模型容量分配不够优化。为了避免这种情况,我们阻止BPE在任何字节序列中跨字符类别进行合并。我们对空格(space)做了一个例外,这显著提高了压缩效率,同时只对一些单词在多个词汇标记之间进行了最小程度的分割。

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

模型架构

GPT-2模型很大程度上遵循 OpenAI GPT-1模型的细节,。对于GPT-1的架构,这里我们不过多介绍,只放出架构图供读者复习,想了解具体的细节请看之前文章:点击此处
在这里插入图片描述
有如下的细节调整:

  1. 层归一化(Ba et al., 2016)被移至每个子块的输入,类似于预激活残差网络。
  2. 在最终的自注意力块之后添加了额外的层归一化。
  3. 使用了修改后的初始化,该初始化考虑了残差路径上随模型深度的累积。我们在初始化时将残差层的权重缩放为 1 / N 1/\sqrt{N} 1/N ,其中 N 是残差层的数量。词汇量扩大到50,257个。我们还将上下文大小从 512 个标记增加到 1024 个标记,并使用更大的批量大小 512。

以上就是所有GPT-2的改动,看似改动不大,但是它却奠定了整个LLM的发展方向,给出了自然语言通用架构的解决方法,并设计了超大高质量的自然语言模型无监督训练数据集,论文主要在讨论在没有给出明确任务的情况下,使用大量语料训练出来的语言模型不需要额外的微调,也可以完成许多自然语言任务,得到比较满意的结果。

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

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

相关文章

企业微信机器人对接GPT

现在网上大部分微信机器人项目都是基于个人微信实现的,常见的类库都是模拟网页版微信接口。 个人微信作为我们自己日常使用的工具,也用于支付场景,很怕因为违规而被封。这时,可以使用我们的企业微信机器人,利用企业微信…

【数据结构】排序(1) ——插入排序 希尔排序

目录 一. 直接插入排序 基本思想 代码实现 时间和空间复杂度 稳定性 二. 希尔排序 基本思想 代码实现 时间和空间复杂度 稳定性 一. 直接插入排序 基本思想 把待排序的记录按其关键码值的大小依次插入到一个已经排好序的有序序列中,直到所有的记录插入完为止&…

程序三高的方法

程序三高的方法 目录概述需求: 设计思路实现思路分析1.1)高并发 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,c…

全志ARM926 Melis2.0系统的开发指引⑤

全志ARM926 Melis2.0系统的开发指引⑤ 编写目的8. 固件修改工具(ImageModify)使用8.1.界面说明8.2.操作步骤8.2.1. 配置平台8.2.2. 选择固件8.2.3. 选择要替换的文件8.2.4. 替换文件8.2.5. 保存固件 8.3.注意事项8.4.增加固件修改权限设置8.4.1. 概述8.4.2. 操作说明8.4.2.1.打…

竞赛选题 机器视觉目标检测 - opencv 深度学习

文章目录 0 前言2 目标检测概念3 目标分类、定位、检测示例4 传统目标检测5 两类目标检测算法5.1 相关研究5.1.1 选择性搜索5.1.2 OverFeat 5.2 基于区域提名的方法5.2.1 R-CNN5.2.2 SPP-net5.2.3 Fast R-CNN 5.3 端到端的方法YOLOSSD 6 人体检测结果7 最后 0 前言 &#x1f5…

Jetpack生命周期感知组件ViewModel

ViewModel Jetpack ViewModel是Android Jetpack组件库中的一个组件,用于帮助开发者管理UI相关的数据和状态。ViewModel的主要作用是存储和管理与UI相关的数据,以及处理UI的状态变化。 使用ViewModel可以解决以下问题: 避免配置变更&#x…

【JavaScript】相等运算符(== 和 ===)

如果x和y的类型相同,JavaScript会用equals 方法比较这两个值或对象。 没有出现在表格中的情况都会返回 false。(表格中的方法都是内部规定的) 对于 toNumber 方法: 对于 toPrimitive 方法: // 举个例子: c…

用JMeter对HTTP接口进行压测(一)压测脚本的书写、调试思路

文章目录 安装JMeter和Groovy为什么选择Groovy? 压测需求以及思路准备JMeter脚本以及脚本正确性验证使用Test Script Recorder来获取整条业务线上涉及的接口为什么使用Test Script Recorder? 配置Test Script Recorder对接口进行动态化处理处理全局变量以…

W25Q128芯片手册精读

文章目录 前言1. 概述2. 特性3. 封装类型和引脚配置3.1 8焊盘WSON 8x6 mm3.2其他封装 4. 引脚描述4.1 片选4.2 串行数据输入输出4.3 写保护4.4 保持脚4.5 时钟 5. 块图6. 功能描述6.1 SPI功能6.1.1 标准SPI6.1.2 双通道SPI6.1.3 四通道SPI6.1.4 保持功能 6.2 写保护6.2.1 写保护…

SRT服务器SLS

目前互联网上的视频直播有两种,一种是基于RTMP协议的直播,这种直播方式上行推流使用RTMP协议,下行播放使用RTMP,HTTPFLV或者HLS,直播延时一般大于3秒,广泛应用秀场、游戏、赛事和事件直播,满足了…

用go获取IPv4地址,WLAN的IPv4地址,本机公网IP地址详解

文章目录 获取IPv4地址获取WLAN的IPv4地址获取本机公网IP地址 获取IPv4地址 下面的代码会打印出本机所有的IPv4地址。这个方法可能会返回多个IP地址,因为一台机器可能有多个网络接口,每个接口可能有一个或多个IP地址。 package mainimport ("fmt&…

GPX可视化工具 GPX航迹预览工具

背景 当我们收到别人分享的航迹文档,即gpx文档时,如何快速的进行浏览呢?我们可以使用GIS软件来打开gpx文档并显示gpx中所记录的航迹,例如常用的GIS软件有googleEarth, Basecamp, GPXsee, GPX E…

超详细DeepLabv3 介绍与使用指南 – 使用 PyTorch 推理

DeepLab 模型首次在 ICLR 14 中首次亮相,是一系列旨在解决语义分割问题的深度学习架构。经过多年的迭代改进,谷歌研究人员的同一个团队在 17 年底发布了广受欢迎的“DeepLabv3”。当时,DeepLabv3 在 Pascal VOC 2012 测试集上实现了最先进的 (SOTA) 性能,在著名的 Cityscap…

VC6 WIN32,Dialog为主窗口编程

VC6是Microsoft非常经典的开发环境,尤其是Windows API方式开发,自从Quick C for win以来基本保持着同样的风格和API,在它上面做习练很不错。下面是习练完成的界面,它是在自动创建的WIN32 application模板下,增加一个Di…

Linux shell编程学习笔记4:修改命令行提示符格式(内容和颜色)

一、命令行提示符格式内容因shell类型而异 Linux终端命令行提示符内容格式则因shell的类型而异,例如CoreLinux默认的shell是sh,其命令行提示符为黑底白字,内容为: tcbox:/$ 其中,tc为当前用户名,box为主机…

Postman使用实例

Postman使用实例 实体类Emp package com.example.springboot_postman.pojo;import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import javax.persistence.*; import j…

基于SpringBoot的图书进销存管理系统

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 图书类型管理 商品退货管理 客户信息管理 图书添加 客户添加 应收金额 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实…

c语言练习78:执⾏操作后的变量值

字符串函数汇总 1. strlen :计算字符串的⻓度。 2. strcpy :将⼀个字符串复制到另⼀个字符串中。 3. strcat :将⼀个字符串连接到另⼀个字符串的末尾。 4. strcmp :⽐较两个字符串是否相等。 5. strncmp :⽐较两个…

JavaEE-网络编程套接字(UDP/TCP)

下面写一个简单的UDP客户端服务器流程 思路: 对于服务器端:读取请求,并解析–> 根据解析出的请求,做出响应(这里是一个回显,)–>把响应写回客户端 对于客户端:从控制台读取用户输入的内容–>从控制…

微服务的初步使用

环境说明 jdk1.8 maven3.6.3 mysql8 idea2022 spring cloud2022.0.8 微服务案例的搭建 新建父工程 打开IDEA,File->New ->Project,填写Name(工程名称)和Location(工程存储位置),选…