GPT1、GPT2、GPT3、InstructGPT

GPT全称是 Generative Pre-Trained Transformer。顾名思义,GPT的目的就是通过Transformer为基础模型,使用预训练技术得到的通用的文本模型。目前已经公布论文的有文本预训练GPT-1、GPT-2、GPT-3,以及InstructGPT。ChatGPT和InstructGPT在模型结构,训练方式上都完全一致,即都使用了指示学习(Instruct Learning)和人工反馈的强化学习来指导模型的训练,他们的不同仅仅是采集数据的方式上有差异。

GPT1、GPT2、GPT3的共同点是其结构都基于Transformer的Decoder层。

其区别在于:GPT是常规语言模型,GPT2的卖点是zero-shot,GPT3的卖点是few-shot

GPT1:Improving Language Understanding by Generative Pre-Training

目前NLU(Natural Language Understading)方向的局限性:有标签的数据相对较少,限制了模型性能的提升。

  • 基本思想

先在没有标签的数据集上训练预训练语言模型,再在子任务上微调(自监督学习)。与之前的类似任务相比,亮点在于微调时只需要改变输入形式,而不需要改变模型结构。

  • 无监督的预训练过程

给定一个序列,使用一个标准的语言模型目标来最大化下面的似然函数:

其中,代表模型参数,k为上下文窗口大小,这里只考虑左侧窗口的词汇信息(单向Transformer)。即给定一个模型(GPT中指的是Transformer decoder),给定前k个词,预测当前词。

预训练阶段是没有Start,Delim,Extract这些特殊符号的,模型通过微调阶段学习这些token。

GPT中,作者基于12层的Transformer改进。在GPT中,作者对position embedding矩阵进行随机初始化,让模型自己学习,而不是采用正余弦函数进行计算(原Transformer用的三角函数)

  • 有监督的微调阶段

有标签的数据集C上每个样本包含一个句子和对应的标签y。将输入预训练模型,获取decoder最后一层的对应的编码,将它传入一个额外的线性输出层来预测y:

最大化下列的目标函数:

在微调阶段引入预训练任务,把语言模型的目标引入到目标函数中,作为辅助函数,可以提高模型的通用能力,并且加速模型收敛:

其中,为可调节的超参数。

  • GPT和BERT的区别

GPT使用的Transformer的Decoder层(目标函数为标准的语言模型,每次只看到当前词之前的词,需要用到Decoder中的Masked Attention),BERT使用的Transformer的Encoder层(目标函数为带[Mask]的语言模型,通过上下文预测当前词,对应Encoder)。

  • 为什么GPT的性能比BERT差

  1. GPT预训练时的任务更难

  1. BERT预训练用的数据集大小几乎是GPT的四倍

GPT-2:Language Models are Unsupervised Multitask Learners

  • 相较于GPT的改进:

  1. 更大的数据,更大的模型,将卖点指向zero-shot。

  1. 去掉了fine-tuning层:不再针对不同的任务进行微调建模,而是不定义模型应该做什么任务,模型自动识别出来需要做什么任务

  1. 调整Transformer:将layer normalization放到每个sub-block之前,并在最后一个self-attention后再增加一个layer normalization.

GPT2提出的最重要的思想是“所有的监督学习都是无监督语言模型的一个子集”,这个思想也是提示学习(Prompt Learning的前身)

能做的task:阅读理解、翻译、总结、问答

  • 无监督的预训练阶段和GPT相同。

  • zero-shot的下游任务

下游任务转向做zero-shot而放弃微调。相较于GPT,由于缺少fine-tuning阶段,模型没有机会学习Start、Delim、Extract这些特殊的token。因此,GPT使用一种新的输入形态:增加文本提示,后来被称为Prompt。

GPT-3: Language Models are Few-Shot Learners

  • 主要贡献

虽然pre-train+fine-tune在许多情况下效果显著,但是微调过程需要大量样本。这一框架不符合人类习惯,人类只需要少量的示例或任务说明就能适应一个新的NLP下游任务。本文证明了通过增大参数量就能让语言模型显著提高下游任务在Few-shot设置下的性能。(证明了大规模语言模型使用元学习策略的可能和fine-tune策略的非必要性)。175B parameters。

  • fine-tuning的问题

  1. 每一个新的任务都需要大量的标记数据不利于语言模型的应用。

  1. 提高模型表征能力的同时降低数据分布的复杂度是不合理的。比如,大模型不能在样本外推预测时具有好效果,说明fine-tuning导致模型的泛化性降低了。

  1. 人类在接触一个下游语言任务时不需要大量样本,只需要一句对新任务的描述或者几个案例。人类这种无缝融合和切换多个任务的能力是我们当前自然语言技术所欠缺的。

  • 模型移除fine-tuning有两个解决方案

  1. meta-learning:模型在训练阶段具备了一系列模式识别的能力和方法,并通过在预测过程中利用这些能力和方法以快速适应一个下游任务。最近的一些研究尝试通过in-context来实现上述过程,但效果不佳。

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

  • 情境学习(in-context learning):在被给定的几个任务示例或一个任务说明的情况下,模型应该能通过简单预测来补全任务中的其他示例。即,情境学习要求预训练模型要对任务本身进行理解。情境学习是元学习(Meta-learning)的一种,元学习的核心思想在于通过少量的数据寻找一个合适的初始化范围,使得模型能够在有限的数据集上快速拟合,并获得不错的效果。

  • 情境学习分为三类:zero-shot learning、one-shot learning、few-shot learning。

GPT3是不做梯度更新的few-shot,对于所有子任务,GPT-3不做任何梯度更新或者是微调。

  • 下游任务

本文聚焦于系统分析同一下游任务不同设置下,模型情境学习能力的差异。下游任务的设置有以下四类:

  1. Fine-tuning(FT):FT利用成千上万的下游任务标注数据来更新预训练模型中的权重疑惑地强大的性能。但是,该方法不仅导致每个新的下游任务都需要大量的标注预料,还导致模型在样本外预测的能力很差。

  1. Few-Shot(FS):模型在推理阶段可以得到少量的下游任务示例作为限制条件,但是不允许更新预训练模型中的权重。FS的主要优点是并不需要大量的下游任务数据,同时也防止了模型在fine-tune阶段的过拟合。FS的主要缺点是不仅与fine-tune的SOTA模型性能差距较大且仍需要少量的下游任务数据。

  1. One-Shot(1S):这种方式与人类沟通的方式最相似。

  1. Zero-Shot(0S):0S的方式是非常具有挑战的,即使是人类有时候也难以仅依赖任务描述而没有示例的情况下理解一个任务。但0S设置下的性能是最与人类的水平具有可比性的。

  • 数据集生成

对抗学习(将GPT2数据集中的样本作为正例,CommonCrawl数据集中的样本作为负例,训练一个线性分类器,去预测CommonCrawl中的其他样本是属于正例还是负例,如果属于正例,则将它加入GPT3的数据集)+去重(lsh)

lsh算法:主要用于大规模数据时,计算两两之间的相似度。基本思想:基于一个假设,如果两个文本在原有数据空间是相似的,那么他们分别经过哈希函数转换以后的他们也具有很高的相似度。

  • 局限性

  1. 文本生成上的效果较弱。

  1. 结构和算法的局限性。只能看当前词之前的信息(decoder);每个词都均匀地预测下一个词,没有哪一个词更重要。

  1. 只学习文本。未涉及其他模态

  1. 样本的有效性不够

  1. 无法解释

强化学习:基于环境的反馈而行动。需要每一步行动环境基于反馈,基于反馈不断调整训练对象的行为。

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

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

相关文章

python编程游戏代码tkinter,python编程游戏代码大全

python有趣的编程代码 class Point: row0 col0 def __init__(self, row, col): row col def copy(self): return Point(, )#初始框架import pygameimport random#初始化()W800H600ROW30COL40size(W,H)windowpygame.display.set_mode(size)pygame.display.set_cap…

python小游戏——推箱子代码开源

♥️作者:小刘在这里 ♥️每天分享云计算网络运维课堂笔记,努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,愿所有的美好&#…

【C++小游戏】推箱子代码

注:本程序完全原创,如果有BUG,欢迎私信投诉。 Upd 2023/1/2 : 把代码扔到 LOJ 里格式化了一下,希望代码看起来没原来那么丑陋。 Upd 2023/3/3 : 修复了一个没有测试出来的 bug(箱子推进去后无法立即显示) …

怎么把知网的外文文献翻译成中文_知网查重中文译成英文可行吗?

把中文翻译成英文知网查重是能查出的,最新的版本增加了中英文互译、跨语言检测等功能。因此,中国知网不仅能查重英文论文,还能将中文翻译成英文的论文给查出来。所以说,中文译成英文不是一个好办法。那么,知网查重中文译成英文可行吗? 一、中国知网能否查重英文 目前市场…

开源大模型文档

开源大模型综述 排行榜1.LLaMA资源: 2.Chinese-LLaMA-Alpaca资源: 3.Alpaca资源: 4.Alpaca-LoRA5.Vicuna资源: 6.OpenChatKit资源: 7.GPT4ALL8.Raven RWKV资源: 9.OPT资源: 10.Flan-T5-XXL资源&…

5月份读书学习好文记录

学好C可以采取以下几个步骤: 掌握基本语法:C的语法对于初学者来说可能是一件比较难的事情,所以需要花时间掌握C的语言基础和语法规则,例如数据类型、流程控制、函数等。 学会面向对象编程(OOP):C是一种面向对象的编程…

多表关联出现重复数据原因

多表联合查询的时候,可能会产生多条重复数据,出现的原因: 1.可能是你用来进行 join的列,具有重复数据。 今天下午在写sql的时候,由于没有注意到该列的值并不是唯一的,所以导致查询出来的有N条重复数据 解决…

数据拼接出现重复

数据拼接出现重复 使用join方法拼接数据出现重复 使用join方法拼接数据出现重复 打印日期和星期,首先获取当前日期毫秒,再通过for循环将毫秒计算出下一日期 如要实现打印如下日期 代码如下 当28行和23行位置互换,就会发生一下情况 原因是…

wechat——解决重试三次产生消息重复的问题

通过上篇成功的接入开发者模式,与微信交互发送文本消息和模板消息,发现消息有的时候会重复发送,最多三次。查看微信公众平台文档发现:微信服务器在五秒内收不到响应会断掉链接,并且重新发起请求,总共重试三…

如何重复对好友发同一条信息

words"期末考试必过" import pyautogui #控制键盘鼠标 import pyperclip #控制电脑的复制截切版 import time #控制时间 time.sleep(5) #设置切换窗口时准备的时间 for i in words.split("/n")*99: #split("/n")把文章分成一句一句的 pr…

GP查询并删除重复数据问题

在数据库中做增删查改时,难免会因为误操作导致数据库中存在一些重复数据,那么如何定位这些重复数据并且删除呢?本文将介绍在Greenplum数据库中如何实现查询并删除重复数据的方法。 目录 PostgreSQL与Greenplum的关系GP查询重复数据1. row_nu…

C++ 查找字符串重复字符和只出现一次的字符

#include <iostream> #include <string>using namespace std;int main() {string temp "";cout << "请输入字符串&#xff1a;";getline(cin,temp);string str ""; //存放只出现一次的字符string str1 ""; //存…

chatgpt赋能python:Python排除字符串中重复字符

Python排除字符串中重复字符 在处理字符串数据时&#xff0c;我们经常需要对字符串中的重复字符进行处理&#xff0c;以便更好地对数据进行分析和处理。在Python编程领域中&#xff0c;有许多方法可以用于排除字符串中的重复字符&#xff0c;从而使数据更加清晰和有用。在本文…

拼音打字时不定时出现重复字母

问题自述&#xff1a; 家里面有一台备用机惠普15-R239TX&#xff0c;东西放久了发现键盘缝隙里面很脏&#xff0c;得空就拆机后彻底清理了一下。 自从上次清理过键盘后&#xff0c;在使用Q Q拼音打字时会不定时出现重字母的情况&#xff0c;重新下载最新版本&#xff0c;默认设…

CPM-Bee本地部署的实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

3分钟部署私人chat-gpt教程

一、注册vercel账号 点击 Vercel 邮箱注册一个号&#xff0c;86的手机号也能注册。需要github账号和openai key 二、创建项目 1. 在首页新建项目 2. 登录你的github账号&#xff0c;然后创建一个仓库 导入第三方的仓库 输入&#xff1a;https://github.com/Yidadaa/ChatGPT…

注册AppStore开发者账号以及收款设置的流程详解(2019最新版)

最近和朋友倒腾了一个APP&#xff0c;想在App Store上架&#xff0c;因此就在注册个人开发者账号的过程中踩了不少坑。 申请App Store的开发者账号果然不是一件容易的事情&#xff0c;并且我发现在设置收款时尤其容易踩坑。期间&#xff0c;我也看了不少分享&#xff0c;但由于…

苹果 company开发者账号注册流程图解分享

苹果开发者账号的注册过程还是比较复杂的&#xff0c;周期拉了一个月&#xff08;漫长啊~~&#xff09;。和大家分享一下过程和细节&#xff0c;以免大家走了弯路。本文由萌虾米492405648编写蛮辛苦的要是对你有用是我最大的欣慰啦 一定要记住申请的过程中遇到问题致电苹果开发…

最新苹果商务管理ABM注册及使用

本文了解苹果商务管理Apple Business Manager(简称ABM)的申请注册流程及应用下载方式 苹果商务管理&#xff0c;Apple Business Manager 简称ABM&#xff0c;用于 定制应用分发公司/组织内部应用分发 如果你的应用是上边两种类型就考虑用ABM分发了&#xff0c;这类应用的特点是…

年度最新!iOS如何申请苹果公司开发者账号流程详细图文介绍

苹果官方参考文章&#xff1a;使用 Apple Developer App 注册和管理您的帐。 申请公司账号&#xff0c;别申请个人账号。以前有家公司就申请错了申请为个人账号了&#xff0c;结果只能显示个人开发者的名字。个人账号和公司账号费用现在一样了。企业账号已经不能申请了。申请网…