视频讲解:GPT,GPT-2,GPT-3 论文精读【论文精读】_哔哩哔哩_bilibili

论文链接:

GPT: https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf

GPT-2: https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf

GPT-3: https://arxiv.org/pdf/2005.14165.pdf

GPT

文章标题:Improving Language Understanding by Generative pre-Training


摘要

在自然语言理解里,有很多不一样的任务,虽然我们有很多大量的没有标记的文本文件,标好的数据是比较少的,这使得我们要去在标好的数据上,训练出分辨模型的话,会比较困难,因为数据相对较少。

如何解决这个问题

1、先在未标记的数据上训练一个预训练模型,这个预训练模型是一个语言模型;

2、接下来再在标好的子任务上训练一个分辨的微调模型

(这个在计算机视觉领域,八九年前就已经是主流的算法,但在NLP领域一直没有流行,因为在NLP领域没有像imagenet那么大规模标好的数据。

虽说在机器翻译领域也许能够做到100万量级,但一个句子和一个图片不在一个尺度上面,一张图片含有的信息,那个像素的信息比一个句子里面能去抽取的信息来的多得多,所以一张图片可能能换10个句子,这也就意味着至少有一千万级别的句子级别的标好的数据集才能够训练比较大的模型,这导致在很长一段时间里,深度学习在NLP领域的进展没有那么顺利,直到GPT和后面BERT的出现,才打开局面。 这里还是像CV那样先训练好预训练模型再做微调,不一样的是使用未标记的文本,然后GPT系列后面的文章在做zero shot走了另外一大步,如果说前面五年CV在引领整个潮流的话,那最近几年的创新可以看到来自NLP领域,而且这些创新也在反馈回CV,比如之前读过的MAE这篇文章,就是把BERT用回在计算机视觉上面)

跟之前工作的区别是,在微调的时候构造跟任务相关的输入,从而使得只要很少的改变模型的架构就可以了。

1、引言

怎么样更好的利用无监督的文本,以前最好的模型还是词嵌入模型。

用未标记的数据的困难:(1)不知道用什么样的优化目标函数,一堆文本的损失函数不知道到底是什么样子,虽然有很多选择,比如机器翻译或者文本一致性,但是并没有发现某一个目标函数在一些任务上特别好,只是在一个任务上比较好,主要取决于目标函数和任务的相关度有多高;(2)怎样有效的把学到的文本的表示传递到下游的子任务上面(NLP领域子任务差别较大,没有一个简单有效的方式,使得一种表示能够一致的牵引到所有的子任务中。)

GPT提出了一个半监督的方法,在未标记的文本上面训练一个比较大的语言模型,然后再在子任务上面微调

模型基于transformer架构。跟RNN模型相比,transformer在迁移学习时学到的feature更稳健一些,可能是因为transformer更有结构化的记忆,使其能够处理更长的文本信息,从而能够抽取出更好的句子层面和段落层面的语义信息。在做迁移的时候,用的是一个跟任务相关的输入表示,

3、模型

怎样在未标记的数据上训练模型,怎么样微调,每个子任务的输入如何表示

3.1 未标记的数据上做预训练

假设有一个未标记的文本U={u1,…,un}(每个词表示成ui,它是个有序的信息,不会交换词的顺序)GPT 使用一个标准的语言模型的目标函数来最大化下面的似然函数:

(具体来说语言模型 预测第i个词出现的概率,第i个词记为ui,把ui前面的k个词,ui-k到ui-1,k代表上下文窗口的大小,输入序列的长度,每次取出k个连续的词,再预测k个词后面的词是什么。)

即预测是用一个模型,这个模型在记成Θ的地方,给定k个词,预测这k个词下一个词的概率,把每一个这样的词(i范围为1-n)的最大概率,全部加起来就得到目标函数,这个地方即为L1(代表第一个目标函数)

这些参数采用随机梯度下降进行训练。

在我们的实验中,我们使用了一个muti-layer Transformer解码器的语言模型,这是Transformer的一个变体。

h0 = UWe + Wp 

预测词u的概率,把前面k个词 U=(,……,)做词嵌入投影,加上位置编码,得到第一层输入

hl = transformer_block(hl−1)       ∀i ∈ [1, n]
接下来做n层transformer块,每一层把上一层的输出作为输入得到这一层的输出
P(u) = softmax( )
最后得到n层transformer块后,进行一个投影,进行softmax就得到概率输出。
其中U=(,……,)是标记的上下文向量,n是层数,我们是标记嵌入矩阵,Wp是位置嵌入矩阵。

3.2 微调

给定一个长为m的词序列x1,……,xm,以及其对应的标签y,预测y的概率。

步骤:把词序列放进前面训练好的模型里面,然后得到transformer块的最后一层输出(即hm对应的输出),再乘以输出层,再做一个softmax,就得到其概率。

P(y|x1 , . . . , xm) = softmax().
微调里面所有带标记的这些序列对,把序列x1到xm输入进去以后,计算真实的标记的概率
l

此外,我们还发现,将语言建模作为微调的辅助目标有助于学习,改进监督模型的泛化,加速收敛。使用这样的辅助目标提高了性能。具体来说,我们优化了以下目标(权重为λ):

L3(C)=L2(C)+λ∗L1(C)

总的来说,我们在微调过程中需要的唯一额外参数是Wy和分隔符标记的嵌入(下面在3.3节中描述)。

微调时有两个目标函数,第一个是给定一个序列预测下一个词,第二个是给定完整序列,预测序列对应的标号。

3.3 特定的输入转换

第一类是最常见的分类,给定一句话或者一段文本,来判断其对应的标号,比如说一个用户对一个产品的评价,是正面的还是负面的。

这里的做法是,把要分类的一段文字在前面放一个初始的词元,后面加一个抽取的词元(extract),然后做成一个序列,序列放进transformer的解码器里,然后模型对最后一个词抽取的特征放进一个线性层里,线性层投影到要标号的空间,比如说要做10分类,线性层输出大小为10,在训练的时候,对每一个文本和标号对,把文本变成上图所示的序列,然后标号发放在线性层后面参加训练,在预测的时候,只拿到序列的信息,直接做预测即可。

与之前语言模型有一点区别,线性层是新加的,在微调的时候,重新构造了一个新的线性层,里面的全都可能是随机初始化的,它输出的大小和标号的大小是一致的

第二类是蕴含,就是给定一段话,再问一个假设,然后看前面这段话,有没有蕴含假设提出来的东西。例如:a送给b一束玫瑰,假设是a喜欢b,那么我前面这句话是支持这个假设的,若假设是a讨厌b,那么前面这段话是不支持这个假设的,这个假设就不成立;若假设是a和b是邻居,那么可以说前面这个假设既不支持也支持。

所以这个就是三分类的问题,给定两段文本,然后做一个三分类的问题,在表达的时候就是把这两个文本串成一个长的序列,

GPT2:Language Models are Unsupervised Multitask Learners


做了一个新的百万级别的数据集webtext,比之前的wikipedia和bookscorpus更大。提出zero-shot的设定。

现在一个主流的途径就是对一个任务收集一个数据集,然后再在上面训练好的模型做预测,因为现在模型的泛化性不是很好,在一个数据集上训练好的模型很难直接用到下一个模型上面。

多任务学习:在训练一个模型的时候,同时看多个数据集,而且可能会通过多一个损失函数,来达到一个模型能够在多个任务上都可以使用。

GPT-2还是做语言模型,但是在做到下游任务的时候,会用到zero-shot的设定,zero-shot是说在做到下游的任务的时候,不需要下游任务的任何标注信息,也不需要训练我的模型,好处是,只要训练一个模型在任何地方都能用。

在GPT的时候,预训练语言模型时,是在自然的文本上训练的,但在下游任务时对输入进行了改造,加入了开始符、结束符和分隔符,这些符号模型在之前并不知道,但是因为有微调的环节,所以模型会认识这些符号。

现在要做zero-shot的问题是:在做下游任务的时候,模型不能被调整,若引入之前模型没有见过的符号的话,模型并不认识,所以在构造下游任务的输入时,不能引入模型没有见过的符号,而是要使得整个下游任务的输入,跟之前预训练的输入文本一样。

例子:

机器翻译:若想把英语翻译成法语,可以把句子表达成这个形式(translate to French(作用:特殊的分隔词),英语文本,法语文本)

阅读理解:(answer the question(设计的提示),文章,问题,答案)

GPT3:Language Models are Few-Shot Learners


GPT 3尝试解决GPT2的有效性,所以又回到了GPT一开始考虑的few-shot的设定,即不再去追求极致的零样本,在一个子任务上不给任何样例。

摘要:

训练了一个自回归模型GPT3,有1750亿个可学习的参数,比之前所有非稀疏的模型(稀疏的模型是说整个权重可以是稀疏的,里面有大量的0,但如果模型有很多0的话,把0算进去,模型也算是特别大)不同,不会存在很多0,

因为成本太高,所以GPT3在作用在子任务的时候,不做任何的梯度更新或者微调,就算是在零样本的情况下,给定一些样本,GPT3也不是用微调,因为微调总是去算梯度,那么大的模型,算梯度是非常困难的事情,GPT3不需要做任何的梯度更新,也是其一大特点

GPT3能生成一些新闻类的文章,而且人类读起来是很难区分的

GPT2与GPT的不同:把normalization放到前面,可以反转的词元。

GPT2与GPT3区别:把sparse transformer里面的改动拿出来,设计了8个不同大小的模型,

有正反例,去掉相似的数据集

GPT,GPT-2,GPT-3相关推荐

  1. LLMs:OpenAI 官方文档发布提高 GPT 使用效果指南—GPT最佳实践(GPT best practices)翻译与解读

    LLMs:OpenAI 官方文档发布提高 GPT 使用效果指南-GPT最佳实践(GPT best practices)翻译与解读 导读:为了获得优质输出,需要遵循几点基本原则: >> 写清 ...

  2. 服务器硬盘如何把硬盘装换到gpt格式化,装GPT硬盘系统的格式转换与diskpart命令使用方法...

    前几天帮同事装个Windows 7,还是轻车熟路的拿出我的量产Windows 7 U盘,一路顺利,分区.安装,重启. 结果问题来了,本该进入的第一次重启硬件配置界面的,结果又跑回了装机初始界面.再次尝 ...

  3. legacy引导gpt分区_UEFI+GPT、Legacy+MBR引导模式介绍 引导修复

    一.磁盘分区表格式 二.BIOS引导方式 三.引导修复教程 主要介绍3个内容: 1,磁盘分区表格式:MBR.GPT 2,BIOS引导模式:Legacy BIOS.UEFI BIOS 3,引导修复方法: ...

  4. 计算机管理磁盘管理无法创建GPT,如何创建GPT磁盘|在电脑中建立GPT磁盘模式的方法...

    ‍ GPT是一种新型磁盘模式,与我们常用的MBR磁盘相比更稳定,自纠错能力更强,一块磁盘上主分区数量不受控制.我们的电脑想要快速开机,需要具备三个条件:第一是主板支持UEFI,二是系统支持UEFI,而 ...

  5. 计算机格式为gpt怎么更改,gpt分区怎么更改成mbr分区

    因为笔记本电脑硬盘分区表是GPT而导致大家无法安装引导系统.需要转换为MBR分区还能顺利安装.那如何将gpt分区更改成mbr分区呢?下面是学习啦小编为大家介绍gpt分区更改成mbr分区的方法,欢迎大家 ...

  6. 一天star量破千,300行代码,特斯拉AI总监Karpathy写了个GPT的Pytorch训练库

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 整理:公众号@机器之心 本文仅做学术分享,如有侵权,请联系删除. 如果说 GPT 模型是所向披靡的战舰 ...

  7. guid linux 识别的分区表_Linux系统MBR和GPT分区的区别介绍

    主引导记录(Master Boot Record , MBR)是指一个存储设备的开头 512 字节.它包含操作系统的引导器和存储设备的分区表. 全局唯一标识分区表(GUID Partition Tab ...

  8. MBR和GPT概要学习

    MBR和GPT概要学习 1.     MBR和GPT 大家所最为熟知的分区方式同时也是最主流的主要有两种:MBR(Master Boot Record)和GPT(GUID Partition Tabl ...

  9. linux格式化大于2t硬盘分区,linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区...

    linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找 ...

  10. linux——管理系统存储之设备分区:MBR分区、GPT分区、swap的分区的设定

    目录 二.MBR方式进行分区具体步骤 三.挂载新划分的分区 四.设定分区方式为GPT 五.swap分区的设定 一.MBR方式分区 1.主引导记录MBR(Main Boot Record): 位于磁盘最 ...

最新文章

  1. java键盘输入运算符_Java基础学习-三元运算符和键盘录入的基本步骤和使用
  2. 如何获取Node.js目录中存在的所有文件的名称列表?
  3. angular之Rxjs异步数据流编程入门
  4. python常用的基本操作
  5. Leetcode 137. 只出现一次的数字 II 解题思路及C++实现
  6. EF获取多个数据集以及MySQL分页数据查询优化
  7. 隐藏apache版本号的方法
  8. php调用swf文件上传,swfupload-jquery-plugin AJAX+PHP 文件上传
  9. Spark记录-Scala记录(基础程序例子)
  10. 利用ping/ipconfig/nslookup/dig/whois简单工具测试DNS
  11. ArrayList 面试10连问
  12. HDU1233——还是通常工程(最小生成树,并查集)
  13. php分解字符串_php怎么把字符串分解成字符
  14. mysql挂载数据卷_docker卷挂载技术
  15. 面试官问你final、finally、finalize的区别
  16. 将浮点数转换为字符串
  17. 网站去色的通用方法(简单)
  18. Word:删不掉的空白页?
  19. 怀恋曾经老飞飞那些厉害的功能总结贴2023
  20. 如何利用Adobe Photoshop制作字幕文件

热门文章

  1. MFC隐藏任务栏图标
  2. 反垃圾邮件系统管理手册
  3. Duplicate entry '0' for key 'PRIMARY' 分析及其解决办法
  4. 电脑运行计算机命令,常用的Windows运行命令,让你更好的管理电脑
  5. 带宽下载速度单位换算
  6. 解决vue项目运行npm run serve报错的问题
  7. android iCloud 短信,云助手 基于安卓的iCloud
  8. CF1467C Three Bags(思维)
  9. JAVA核心知识点--元注解详解
  10. 三国鼎立企查查、天眼查、微猫的三国大战