深度学习:GPT1、GPT2

news/2024/4/27 21:49:33/文章来源:https://blog.csdn.net/qq_18555105/article/details/129704324

深度学习:GPT1、GPT2、GPT3的原理与模型代码解读

  • GPT-1
    • Introduction
    • Framework
      • 自监督学习
      • 微调
    • Experiment
  • GPT-2
    • Introduction
    • Approach
    • Conclusion
  • GPT-3

GPT-1

Introduction

GPT-1(Generative Pre-training Transformer-1)是由OpenAI于2018年发布的第一个基于Transformer模型的预训练语言模型。GPT-1主要针对的是生成型NLP任务,如文本生成、机器翻译、对话系统等。

在当时nlp领域没有一个像ImageNet那样的很大的数据集,而且一句字所含有的语义信息远不如一张图像的语音信息丰富,制作一个在nlp领域与imagenet 语义相当的数据集就需要很大的代价。

所以作者的想法是能不能通过 un-labeled的数据数据集 pre-train好一个通用的模型然后在各个细分领域进行微调。在这期间,作者发现两个问题:

  1. 训练通用的模型不知道选择什么优化目标。
  2. 不知道以哪种形式的output来适配所有的下游任务。

GPT的模型作者主要采用Transformer的decoder架构,由于它相较于rnn可以一次性读取更长的句子,容纳更多的语义信息。

Framework

自监督学习

首先介绍LOSS,在自监督训练期间训练标准语言模型,通过最大化最大化下面的likelyhood,其中 u为token的集合,条件概率P采用模型参数为 theta的模型建模。
在这里插入图片描述
在前向传播的过程中,首先通过词嵌入与位置嵌入获得h0,其中we为token嵌入矩阵,wp为位置嵌入矩阵,然后通过12层transformer块,输入输出保持一致,然后通过softmax获得logits。
在这里插入图片描述

微调

保存之前阶段训练的参数,在上述结构的基础上,去掉softmax层,然后加上一层全连接层与特定任务的softmax,然后用有标签的数据集训练,在这期间,半监督学习的参数可以选择处于冻结状态,然后只更新新的全连接层参数。 Loss function 采用 半监督阶段与微调阶段的加权和。

下面是作者给定的各个任务微调的模版:

在这里插入图片描述

Experiment

在这里插入图片描述

GPT-2

Introduction

GPT-2在初代的模型架构上变得更大了,参数量达到了1.5B,数据集改为百万级别的WebText,Bert当时最大的参数数量为0.34B,但是作者发现模型架构与数据集都扩大的情况下,与同时期的Bert的优势并不大。

作者提到在当时主流的方法就是在特定的任务上使用特定的数据集,模型跨任务之间的任务泛化性不是特别好,于是作者着重讲了Zero-Shot这个概念。
Zero-shot是指 GPT-2在训练语言模型时与GPT-1的方法一致(文字接龙),只是在模型结构上做了略微的调整,层数与维度做了更大了。在做下游任务时,不再进行微调,最后作者通过实验发现,只进行简单的Zero-Shot,就能与同时期微调后的模型性能相差不大。

Approach

GPT2是在预训练时就考虑各种不同的任务(就是在训练样本中加入了下游任务的相关描述)
在这里插入图片描述
,即从:

在这里插入图片描述

在模型结构上,调整了每个block Layer Normalization的位置:
在这里插入图片描述

Conclusion

GPT-2的最大贡献是验证了通过海量数据和大量参数训练出来的词向量模型有迁移到其它类别任务中而不需要额外的训练。但是很多实验也表明,GPT-2的无监督学习的能力还有很大的提升空间,甚至在有些任务上的表现不比随机的好。尽管在有些zero-shot的任务上的表现不错,但是我们仍不清楚GPT-2的这种策略究竟能做成什么样子。GPT-2表明随着模型容量和数据量的增大,其潜能还有进一步开发的空间,基于这个思想,诞生了我们下面要介绍的GPT-3。

GPT-3

GPT3 可以理解为 GPT2 的升级版,使用了 45TB 的训练数据,拥有 175B 的参数量,真正诠释了什么叫暴力出奇迹。

GPT3 主要提出了两个概念:

情景(in-context)学习:就是对模型进行引导,教会它应当输出什么内容,比如翻译任务可以采用输入:请把以下英文翻译为中文:Today is a good day。这样模型就能够基于这一场景做出回答了,其实跟 GPT2 中不同任务的 token 有异曲同工之妙,只是表达更加完善、更加丰富了。

Zero-shot, one-shot and few-shot:GPT3 打出的口号就是“告别微调的 GPT3”,它可以通过不使用一条样例的 Zero-shot、仅使用一条样例的 One-shot 和使用少量样例的 Few-shot 来完成推理任务。下面是对比微调模型和 GPT3 三种不同的样本推理形式图。
在这里插入图片描述

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

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

相关文章

Python读取,预处理DICOM文件方式

需要的库 ●Simpleitk 安装命令: conda install -c simpleitk simpleitk使用: import SimpleITK as sitk●pydicom(不推荐,可能有些文件打不开) 安装命令: conda install -c conda-forge pydicom●PIL …

linux系统添加审计用户并进行权限控制

审计账号只用于审计功能,其权限可在普通账号基础上进行修改.创建审计用户 sjyhuseradd sjyh为审计用户设置登录密码passwd sjyh会有如下提示,按照提示依次修改即可:更改用户 sjyh 的密码 。 新的 密码: 重新输入新的 密码: 重新输…

平庸的恐惧,就业的烦恼——致互联网人进退两难的35岁

最近阿道看到了一些黑色幽默的新闻。 事情是这样的,某媒体发文抨击职场的“35岁”歧视,但后来被扒出,该媒体所属的机构在发布招聘信息时,却明确地标注了受聘者的年龄界限。 这一通操作属实把大家看傻了,后来阿道又在…

AVL树大讲堂

1.基础概念介绍 首先在前面我们介绍了二叉搜索树,但是如果当存储的数据接近有序或者恰巧有序的时候,二叉搜索树将逐渐退化为单支树,导致搜索效率降低,因此我们的avl树便为了解决这一问题而诞生了。 基础性质:当向二叉…

Tone Mapping中luma滤波(降噪)对噪声放大的定性分析

Tone Mapping中luma滤波对噪声放大的定性分析 在tone mapping过程中,通常经过统计之后得到一条mapping曲线,记这条曲线为f(x)f(x)f(x),mapping过程中,对于给定的点,假定其亮度为xxx,映射后为f(x)f(x)f(x)&…

虚拟机设置桥接模式:静态IP

一、下载virtual box并安装系统 链接:https://www.virtualbox.org/ 安装并配置Ubuntu桌面版:https://blog.csdn.net/Zhichao_Zhang/article/details/127142410?spm1001.2014.3001.5506 安装并配置CentOS7:https://blog.csdn.net/csp7321711…

【学习笔记】《Writing Science》14-21

文章目录14 Energizing Writing 充满活力的写作14.1. ACTIVE VERSUS PASSIVE VOICE 主动语态和被动语态14.1.1. Controlling Perspective 控制视角14.1.2. Hiding the Actor 隐藏演员14.2. FUZZY VERBS 模糊动词14.2.1. Fuzzy Hypotheses 模糊假设14.3. NOMINALIZATIONS 名词化…

自动化测试学习(七)-正则表达式,你真的会用吗?

目录 一、正则表达式在python中如何使用 二、用正则表达式匹配更多模式 三、常用字符分类的缩写代码 总结 所谓正则表达式(regex),就是一种模式匹配,学会用正则匹配,就可以达到事半功倍的效果。 一、正则表达式在…

本地资源检测|单规则多阈值设置功能上线

作为一款可以全面自动检测项目静态工程内各项资源、代码和设置的UWA服务,本地资源检测能够帮助项目组制定合理的资源与代码标准,及时发现潜在的性能问题和异常错误,建立有效的开发规范意识。 此次3.1.0版本更新,在优化和完善现有…

Rcpp包运行C++代码

提高 R 脚本性能的最简单、最快捷的方法是更改脚本的问题部分并用 C 重写它们。Rcpp包提供了 R 和 C 之间的接口。1. cppFunction()转换简单的C函数### 1. cppFunction()转换简单的C函数 library(Rcpp) cppFunction(codeint fibonacci(const int x){if(x < 2) return x;if(x…

项目日记:学成在线(第二天P24~p34)

1、注入的两种方式&#xff1a;Autowired、Resource&#xff08;基于类型和名称&#xff09; 相同&#xff1a; Resource和Autowired都是做bean的注入时使用 不同&#xff1a; ①Autowird 属于spring框架,默认使用类型(byType)进行注入&#xff1a;&#xff08;基于类型&#x…

堆溢出——unlink漏洞攻击(bamboobox)

题目自取&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1S9xbAWhFw0xFqFyQTACqLA?pwdvvud 提取码&#xff1a;vvud 介绍&#xff1a; 终于学到Unlink了&#xff0c;不得不说和栈的难度相比确实大了很多&#xff0c;学起来确实很淦&#xff0c;一个unlink漏洞也确…

VSCode配置git bash为默认终端

打开左下角齿轮图标 打开Settings 搜索框输入 terminal.integrated.profiles.windows, 在下方显示的内容上点击 Edit in settings.json 配置修改如下 "terminal.integrated.profiles.windows": {"PowerShell": {"source": "PowerShell&qu…

Python每日一练(20230322)

目录 1. Excel表列序号 &#x1f31f; 2. 单词拆分 &#x1f31f;&#x1f31f; 3. 删除有序数组中的重复项 II &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练…

营销即服务!怎么做小程序店铺打造优质用户体验?

随着移动互联网的快速发展&#xff0c;小程序已经成为了许多企业打造优质用户体验的重要工具。一个好的小程序店铺能够为用户提供良好的购物体验&#xff0c;提高用户满意度和转化率。那么&#xff0c;怎么做小程序店铺打造优质用户体验呢&#xff1f; 一&#xff1a;做小程序店…

Linux 信号(signal):信号的捕捉流程

目录一、程序的运行状态二、信号捕捉流程在处理信号的时候&#xff0c;其实要经过一系列流程的&#xff0c;本文就来简单介绍一下信号处理的捕捉流程。 一、程序的运行状态 程序运行状态分为内核态和用户态。程序在运行库函数、用户自定义函数等第三方函数时就会在用户态运行&…

VSCode for C/C++ 插件

VSCode for C/C 插件功能性插件C/C【千万级下载&#xff01;】必选C/C Extension Pack【千万级下载&#xff01;】扩展包Code Runner【千万级下载&#xff01;必备】右键代码运行&#xff0c;格式化在终端的显示CMake、 CMake Integration、CMake Language Support、CMake Tool…

达梦数据库普通表转分区表

在生产环境中&#xff0c;数据库中一开始用的是普通表&#xff0c;但随着时间推移&#xff0c;数据量越来越大&#xff0c;可以考虑将普通表转换为分区表&#xff0c;提升数据库的性能。本文将介绍在DM8数据库中&#xff0c;实现将普通表转换为分区表的方法。环境说明数据库版本…

SpringBoot基础教程

springboot基础 一、springboot介绍 Spring Boot 提供一种快速使用spring的方式&#xff0c;基于约定大于配置的思想&#xff0c;可以让开发者不必在配置与逻辑业务中来回进行思维切换&#xff0c;全身心的投入到业务的代码编写中&#xff0c;从而大大提高了开发效率。2014年…

TypeScript的枚举与类型约束

● 上一章我们讲了 TS 的接口 ● 这一章, 我们就来聊一聊 TS 的枚举和约束 枚举 认识枚举 ● 在很多计算机语言中都有枚举的概念, 但是 JS 中是没有枚举这个概念的, 为了弥补这个缺憾 在 TS 加入了枚举类型 ● 什么是枚举呢 ? 枚举( mei ju ) : 枚举的意思就是一一列举,…