当前位置: 首页 > news >正文

大语言模型系列-GPT-2

文章目录

  • 前言
  • 一、GPT-2做的改进
  • 二、GPT-2的表现
  • 总结

前言

《Language Models are Unsupervised Multitask Learners,2019》

前文提到,GPT-1利用不同的模型结构微调初步解决了多任务学习的问题,但是仍然是预训练+微调的形式,GPT-1在未经微调的任务上有一定效果(zero-shot ),但是其泛化能力远远低于经过微调的有监督任务,GPT-2主要基于该点进行了改进。

ps:GPT1:发现预训练模型具有 zero-shot 的能力,并且能随着预训练的进行不断增强。为了进一步验证 zero-shot 的能力,OpenAI 在 GPT-1 提出一年后,推出了 GPT-2。

GPT-2的目标旨在训练一个泛化能力更强的词向量模型,它并没有对GPT-1的网络进行过多的结构的创新与设计,只是使用了更多的网络参数(1.5B)和更大的数据集。

GPT-2 的核心思想就是,当模型的容量非常大且数据量足够丰富时,仅仅靠语言模型的学习便可以完成其他有监督学习的任务,不需要在下游任务微调。即为多任务学习,和T5类似。

也就是说所有的有监督学习都是无监督语言模型的一个子集。例如当模型训练完“Micheal Jordan is the best basketball player in the history”语料的语言模型之后,便也学会了(question:“who is the best basketball player in the history ?”,answer:“Micheal Jordan”)的Q&A任务。

few-shot:在模型做预测的时候,给模型少量标注后的优质样本来作为条件。(如GPT-3)
one-shot:和few-shot类似,但是只允许看到一个样本。
zero-shot:和one-shot类似,但是不允许看到任何样本。直接做预测。(如GPT-2)

ps:few-shot、one-shot、zero-shot均在推理输入阶段起作用,不会更新梯度,举例如下:

  • few-shot:“这个任务要求将中文翻译为英文。你好->hello,再见->goodbye,购买->purchase,销售->”
  • one-shot:“这个任务要求将中文翻译为英文。你好->hello,销售->”
  • zero-shot:“这个任务要求将中文翻译为英文。销售->”

一、GPT-2做的改进

  1. 去掉了fine-tuning层: 不再针对不同任务分别进行微调建模,即不定义这个模型应该做什么任务,模型自动识别需要做什么任务。就像T5的text to text。
  2. Larger Dataset: WebText,GPT-2收集了更加广泛、数量更多的语料组成数据集。该数据集包含800万个网页,大小为40G
  3. Larger Model: GPT-2将Transformer堆叠的层数从12层增加到48层,隐层的维度为1600,参数量达到了15亿(Bert的参数量3亿、T5参数量110 亿)。
  4. Larger dictionary,larger sequnece length and larger batch size。 GPT-2将词汇表数量增加到50257个;最大的上下文大小 (context size) 从GPT的512提升到了1024 tokens;batchsize增加到512。
  5. 调整LN层:将layer normalization放到每个sub-block之前,并在最后一个Self-attention后再增加一个layer normalization。
  6. 初始化:修改初始化的残差层权重,维缩放为原来的 1 / N 1/ \sqrt N 1/N ,其中N是残差层的数量。

二、GPT-2的表现

  1. 在8个语言模型任务中,仅仅通过zero-shot学习,GPT-2就有7个超过了state-of-the-art的方法;
  2. 在“Children’s Book Test”数据集上的命名实体识别任务中,GPT-2超过了state-of-the-art的方法约7%;
  3. “LAMBADA”是测试模型捕捉长期依赖的能力的数据集,GPT-2将困惑度从99.8降到了8.6;
  4. 在阅读理解数据中,GPT-2超过了4个baseline模型中的三个;
  5. 在法译英任务中,GPT-2在zero-shot学习的基础上,超过了大多数的无监督方法,但是比有监督的state-of-the-art模型要差;
  6. GPT-2在文本总结的表现不理想,但是它的效果也和有监督的模型非常接近。

总结

先看一下GTP2在不同数据集上的精度:
在这里插入图片描述

ps:模型精度指标:

  • PPL(Perplexity,困惑度):在自然语言处理中,语言模型的任务是对给定的文本序列进行概率估计,即根据先前的单词预测下一个单词的概率。困惑度提供了一个衡量语言模型对给定文本序列预测的不确定性程度的度量。
    具体来说,困惑度是对模型在给定数据集上的概率分布进行评估的指标。在一个给定的文本序列上,困惑度是一个标量值,表示模型对该序列的预测的平均困惑程度,即模型认为该序列所对应的概率的逆数。困惑度越低,表示模型在给定的序列上的预测越准确,模型对数据集的拟合程度越好。
    在这里插入图片描述
    即, P P L = 2 H ( P , Q ) PPL=2^{H(P,Q)} PPL=2H(P,Q) H ( P , Q ) = − ∑ x P ( x ) l o g Q ( x ) H(P,Q)=-\sum_xP(x)logQ(x) H(P,Q)=xP(x)logQ(x),预测序列Q和真实序列P
  • ACC(Accuracy,准确率):衡量模型在指定任务上(完形填空任务、文本分类任务等)的准确率。
    在这里插入图片描述
  • BPC(Bits Per Character,每字符比特数):BPC 是一种衡量模型性能的指标,用于评估模型生成文本的效率和质量。BPC 衡量了模型生成的文本与真实文本之间的差异,其计算方式通常是使用交叉熵损失(Cross Entropy Loss)除以每个字符的比特数。这个值越低,表示模型生成的文本越接近真实文本,模型的性能越好。
    在这里插入图片描述

ps:数据集解释:

  1. LAMBADA:LAMBADA是一个用于语言模型评估的数据集,其中包含了来自小说文本的句子。任务是给定前文并要求模型预测下一个单词,但这些句子在结尾处被截断,要求模型在没有上下文线索的情况下进行预测。即英文完形填空模式:
    在这里插入图片描述
  2. CBT-CN 和 CBT-NE:CBT(Children’s Book Test)是一个用于测试机器阅读理解的数据集,由Facebook于2016年提出。任务是从一本儿童读物中选出21个连续的句子。然后,将前20个句子视为上下文,然后推断第21个句子中缺少的单词。CBT-CN(Children’s Book Test-Chinese)和CBT-NE(Children’s Book Test-Natural Language Explanation)是CBT的中文版本和自然语言解释版本。
  3. WikiText2 和 WikiText103:WikiText是从维基百科收集的用于语言模型预训练和评估的数据集。WikiText2是包含较小语料库的版本,而WikiText103是包含较大语料库的版本。(其中的文本被用来训练模型以预测下一个单词或字符,即在给定先前的文本序列后预测下一个单词或字符的概率。)
  4. PTB(Penn Treebank):PTB是一个常用的用于语言建模和序列预测任务的数据集,包含了华尔街日报的文章。
  5. enwik8 和 text8:这是两个常用的用于字符级别语言建模任务的数据集。enwik8是维基百科的一个子集,而text8是enwik8的一个更小的子集,用于快速训练和评估模型。
  6. 1BW:1BW是一个用于预训练语言模型的数据集,包含来自互联网的多语言文本,总计约10亿字节。

相关文章:

大语言模型系列-GPT-2

文章目录 前言一、GPT-2做的改进二、GPT-2的表现总结 前言 《Language Models are Unsupervised Multitask Learners,2019》 前文提到,GPT-1利用不同的模型结构微调初步解决了多任务学习的问题,但是仍然是预训练微调的形式,GPT-…...

30m二级分类土地利用数据Arcgis预处理及获取

本篇以武汉市为例,主要介绍将土地利用数据转换成武汉市内各区土地利用详情的过程以及分区统计每个区内各地类面积情况,后面还有制作过程中遇到的面积制表后数据过小的解决方法以及一些相关的知识点: 示例数据下载链接:数据下载链…...

LeetCode-22题:括号生成(原创)

【题目描述】 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 【题目链接】. - 力扣(LeetCode) 【解题代码】 package dp;import java.util.ArrayList; import java.util.Arrays; im…...

如何应对IT服务交付中的问题?看了本文DevOps就懂了

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…...

Ubuntu23.10禁用Wayland

禁用前 编辑custom.conf文件 sudo vim /etc/gdm3/custom.conf 去掉WaylandEnablefalse前的#号 保存退出 重启系统 生效: 成功转换为X11...

Sora: 大型视觉模型背景、技术、局限性和机遇的综述

论文链接:https://arxiv.org/pdf/2402.17177.pdf 背景 在分析 Sora 之前,研究者首先盘点了视觉内容生成技术的沿袭。 在深度学习革命之前,传统的图像生成技术依赖于基于手工创建特征的纹理合成和纹理映射等方法。这些方法在生成复杂而生动…...

比较 2 名无人机驾驶员:借助分析飞得更高

近年来,越来越多的政府和执法机构使用无人机从空中鸟瞰。为了高效执行任务,无人机必须能够快速机动到预定目标。快速机动使它们能够在复杂的环境中航行,并高效地完成任务。成为认证的无人机驾驶员的要求因国家/地区而异,但都要求您…...

Vue开发实例(六)实现左侧菜单导航

左侧菜单导航 一、一级菜单二、二级菜单三、三级菜单1、加入相关事件 四、菜单点击跳转1. 创建新页面2. 配置路由3. 菜单中加入路由配置4、处理默认的Main窗口为空的情况 五、动态左侧菜单导航1、动态实现一级菜单2、动态实现二级菜单 一、一级菜单 在之前的Aside.vue中去实现…...

[嵌入式系统-37]:龙芯1B 开发学习套件 -6-协处理器CP0之CPU异常处理与外部中断控制器的中断处理

目录 一、CP0概述 1.1 CP0概述 1.2 龙芯异常exception与中断interrupt的区别 二、CPU协处理器的异常处理 三、外部中断与外部中断控制器 3.1 外部中断源 3.2 如何配置外部中断源 3.3 外部中断的中断向量表 3.2.1 软件中断向量表结构定义:ls1b_irq.c 3.2.2…...

前端实现一个绕圆心转动的功能

前言: 今天遇到了一个有意思的需求,如何实现一个元素绕某一个点来进行圆周运动,用到了一些初高中的数学知识,实现起来还是挺有趣的,特来分享🎁。 一. 效果展示 我们先展示效果,如下图所示&…...

【vue.js】文档解读【day 2】 | 响应式基础

如果阅读有疑问的话,欢迎评论或私信!! 本人会很热心的阐述自己的想法!谢谢!!! 文章目录 响应式基础声明响应式状态(属性)响应式代理 vs 原始值声明方法深层响应性DOM 更新时机有状态方法 响应式…...

element-ui radio 组件源码分享

今日简单分享 radio 组件的实现原理,主要从以下三个方面来分享: 1、radio 页面结构 2、radio 组件属性 3、radio 组件方法 一、radio 页面结构 1.1 页面结构如下: 二、radio 属性 2.1 value / v-model 属性,类型为 string / …...

1-安装rabbitmq

rabbitmq官网: https://www.rabbitmq.com/docs/download 本机环境:mac,使用orbstack提供的docker 使用docker部署rabbitmq docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management 然后报错&#xf…...

C/C++编程-理论学习-通信协议理论

通信协议理论 protobuf简述 protobuf 简述 作用: 1. 将结构化数据 序列化 进行信息通信、存储。意为,数据结构化管理;意为,对结构化的数据进行序列化,便于发送、存储。可类比XML、JSON。 弊端: 1. buffe…...

【Apache Camel】基础知识

【Apache Camel】基础知识 Apache Camel是什么Apache Camel基本概念和术语CamelContextEndpointsRoutesRouteBuilderComponentsMessageExchangeProcessorsDomain Specific Language(DSL) Apache Camel 应用执行步骤Apache Camel 示意图参考 Apache Camel…...

Python之访问集合的迭代器

对迭代器的理解对于我们访问数据量大是有很大的帮助,将介绍它。 一、概念 迭代:是访问集合元素的一种方式,按照某种顺序逐个访问集合中的每一项。 可迭代对象:能够被迭代的对象,称为可迭代对象 判定依据:能…...

【Spring连载】使用Spring Data访问 MongoDB----对象映射之基于类型的转换器

【Spring连载】使用Spring Data访问 MongoDB----对象映射之基于类型的转换器 一、自定义转换二、转换器消歧(Disambiguation)三、基于类型的转换器3.1 写转换3.2 读转换3.3 注册转换器 一、自定义转换 下面的Spring Converter实现示例将String对象转换为自定义Email值对象: R…...

在ubuntu上安装hadoop完分布式

准备工作 Xshell安装包 Xftp7安装包 虚拟机安装包 Ubuntu镜像源文件 Hadoop包 Java包 一、安装虚拟机 创建ubuntu系统 完成之后会弹出一个新的窗口 跑完之后会重启一下 按住首先用ctrlaltf3进入命令界面,输入root,密码登录管理员账号 按Esc 然后输入 …...

Python 语句(二)【循环语句】

循环语句允许执行一个语句或语句组多次,其程序流程图如下: 在python中有三种循环方式: while 循环 当判断条件为 true 时执行循环体,否则退出循环体。for 循环 重复执行语句嵌套循环 (在while循环体中嵌套for循环&…...

(3)(3.3) MAVLink高延迟协议

文章目录 前言 1 配置 2 说明 3 消息说明 前言 ArduPilot 支持 MAVLink 高延迟协议(MAVLink High Latency)。该协议专为卫星或 LoRA 等低带宽或高成本链路而设计。 在此协议中,每 5s 只发送一次 HIGH_LATENCY2 MAVLink 信息。对 MAVLink 命令或请求&#xff08…...

【异常处理】Vue报错 Component template should contain exactly one root element.

问题描述 启动VUE项目后控制台报错: Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.翻译为:组件模板应该只包含一个根元素 查看vue代码&#xff0…...

Eth-trunk隧道

目录 Eth-trunk (划为二层) 二层trunk 三层交换机 网关冗余 Eth-trunk (划为二层) 一,...

【Ubuntu】将多个python文件打包为.so文件

1.为什么要将python打包为.so文件? 保护源码 2.实战例子 a.安装相应的包 pip install cython 验证安装是否成功 cython --version b.实战的文件目录和内容 hi.py # This is a sample Python script.# Press ShiftF10 to execute it or replace it with your…...

FreeRtos自学笔记3-----参考正点原子视频

FreeRtos任务的创建与删除 任务的创建与删除本质上是调用FreeRtos的API函数。 API函数: 1.xTaskGreate():动态创建任务函数; 2.xTaskGreateStatic();静态创建任务函数; 3.xTaskDelete():任务删除 动态创建任务:任务的任务控制块以…...

使用J-Link Commander通过J-LINK以命令的形式来访问ARM通用MCU

通常我们的操作是写好程序然后将程序下载到芯片里面,然后运行程序来进行相应的操作,其实还可以使用 J − L i n k C o m m a n d e r J-Link\quad Commander J−LinkCommander通过 J − L I N K J-LINK J−LINK以命令的形式来简单访问ARM通用MCU&#xf…...

19.删除链表的倒数第N个节点

19.删除链表的倒数第N个节点 力扣题目链接(opens new window) 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗? 示例 1: 输入:head [1,2,3,4,5], n…...

【Linux C | 网络编程】广播概念、UDP实现广播的C语言例子

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...

java 面向对象 day3

这里写目录标题 1、 内部类1.1 成员内部类 静态内部类1.2 局部内部类1.3 匿名内部类[重点] 2、枚举2.1 使用枚举类 设计单例模式2.2 小实例 3、泛型3.1 认识泛型3.2 泛型类3.3 泛型接口3.4 泛型方法3.5 注意事项 1、 内部类 内部类 就是定义在一个类中的类 1.1 成员内部类 静…...

Flink 大数据 学习详情

参考视频: 尚硅谷大数据Flink1.17实战教程从入门到精通_哔哩哔哩_bilibili 核心目标: 数据流上的有状态的计算 具体说明: Apache Flink是一个 框架 和 分布式处理引擎,用于对 无界(eg:kafka) 和…...

[项目设计] 从零实现的高并发内存池(四)

🌈 博客个人主页:Chris在Coding 🎥 本文所属专栏:[高并发内存池] ❤️ 前置学习专栏:[Linux学习] ⏰ 我们仍在旅途 ​ 目录 6.内存回收 6.1 ThreadCache回收内存 6.2 CentralCache回收内存 Rele…...