GPT系列详解:初代GPT

news2025/7/18 14:50:46

本文详细解读了OpenAI公司在2018年6月发布的论文《Improving Language Understanding by Generative Pre-Training》,它其中介绍的算法也就是后来人们说的GPT。本文借鉴了李沐的这个视频,感兴趣的同学可以移步观看大神的讲解。

目录

  • 引言
  • GPT方法
    • 无监督预训练
    • 有监督微调
    • 子任务的描述
  • 实验
  • 参考文献

引言

在Transformer方法推出的1年后,OpenAI公司发布了GPT系列的第一篇论文,采用生成-判别模型架构,在多个自然语言处理(NLP)任务上实现了较高的精度。
总体而言,GPT方法在很大程度上解决了数据量不足给NLP任务带来的局限;也避免了在不同NLP子任务的解决上,需要不断调整模型的麻烦。

GPT方法

GPT的基本思路是:在有标注的数据集下训练得到一个初始模型,随后在有标注的子任务数据集下,精调得到用于各任务的子模型。在微调时,GPT使用了两个优化的目标函数。

无监督预训练

给定一个语言序列 U = { u 1 , … , u n } \mathcal U=\left\{u_1, \dots, u_n\right\} U={u1,,un},GPT采用标准的语言模型,即最大化如下的目标函数:
L 1 ( U ) = ∑ i log P ( u i ∣ u i − k , … , u i − 1 ; Θ ) L_1(\mathcal U)=\sum_i\text{log}P\left( u_i\vert u_{i-k},\dots,u_{i-1};\Theta\right) L1(U)=ilogP(uiuik,,ui1;Θ)
其中 k k k是上下文窗口的尺寸,条件概率 P P P是通过参数为 Θ \Theta Θ的神经网络建模得到的。

简单来说,上面描述的条件概率,是在给定描述模型和位置 i i i之前的 k k k个词后,第 i i i个位置出现词 u i u_i ui的概率。将所有概率加起来,就得到了目标函数。这里的窗口尺寸 k k k其实可以理解为模型接受的输入序列的长度。当 k k k越大时,模型可以消化更多的信息,但是模型也更加复杂。因此,如果希望模型能力很强,这里的 k k k可能要取到几十、几百,甚至上千。

注: 目标函数中采用的是所有 log P i \text{log} P_i logPi的和,但是联合概率应该是所有概率的积。这里是相加的原因是,公式中采用了log变换,那么log结果的和也就是所有幂的乘积。不清楚具体变换的同学可以移步这个视频。

具体上,GPT中采用的模型( Θ \Theta Θ)是Transforer的解码器。Transformer包含两个结构:编码器和解码器。其中,编码器可以看到整个序列中的所有信息;但由于掩码的存在,解码器只能看到非掩码遮盖部分的信息,被遮盖的位置则都是0。由于在语言处理中,模型是只能看到当前词之前的信息的,因此GPT只能采用解码器部分,而不能采用编码器。

更多关于Transformer的介绍,可以移步这篇文章(还在写,挖个坑)详细了解。

有监督微调

精调模型是在有标号的数据集上进行的。具体来说,就是给定一段输入序列和对应的标号,将前面预训练好的模型的最后一层的输出拿出来,经过一个输出层,得到序列最后位置处的估计概率。数学上,这个概率可以表示为:
P ( y ∣ x 1 , … , x m ) = softmax ( h l m W y ) P\left(y\vert x^1,\dots,x^m\right) = \text{softmax}\left(h_l^mW_y\right) P(yx1,,xm)=softmax(hlmWy)
其中, x 1 , … , x m x^1,\dots,x^m x1,,xm是输入, y y y是标签, h l m h_l^m hlm是预训练模型最后一层对位置 m m m处的预测结果。

此时,目标函数就是:
L 2 ( C ) = ∑ x , y log P ( y ∣ x 1 , … , x m ) L_2\left(\mathcal C\right)=\sum_{x,y}\text{log} P\left(y\vert x^1,\dots,x^m\right) L2(C)=x,ylogP(yx1,,xm)
GPT作者发现,在精调过程中引入预训练的目标函数,同样可以增加模型的精度。因此,微调过程最终的目标函数是两个目标函数的加权求和:
L c ( C ) = L 2 ( C ) + λ × L 1 ( C ) L_c\left(\mathcal C\right)=L_2\left(\mathcal C \right) + \lambda\times L_1\left(\mathcal C\right) Lc(C)=L2(C)+λ×L1(C)

子任务的描述

在知道了目标函数之后,剩下的问题就是如何将NLP中的各种任务,表示成序列对应的标号。在GPT中,这种表示逻辑可以由下图进行表示。
在这里插入图片描述
图中给出了4个常见的NLP子任务和其对应的标注方法。从图中可以看出无论是对什么任务,其输入可能被分割成1个、2个甚至多个字段,后面的输出层的结构也可能随任务发生变化,但是其中的transformer部分,一旦训练好了就不需要改变了。这也是GPT与其他NLP方法的一个核心区别。

实验

论文的实验部分本文简要带过,感兴趣的同学请移步论文原文。
这里只提醒大家注意以下几点:

  1. GPT是在BooksCorpus数据集上训练得到的。这个数据集包含了7000余本未发表的各领域书籍。
  2. GPT使用了12层的Transformer解码器,每一维是768。

参考文献

  1. 李沐. GPT,GPT-2,GPT-3 论文精读【论文精读】
  2. The Math Sorcerer. How to Combine Two Logarithms into a Single Logarithm using Properties of Logs

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

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

相关文章

拒绝背锅:测试项目中的风险管理一定要知道

测试经理除了要管理产品线的质量保障和日常部门事务工作外,另一项比较重要的就是测试项目全流程的管理。 今天不聊整体的测试项目流程如何开展,而是想聊一聊在同行中比较高频出现的一个字眼:风险管理。 什么是风险管理 引用百度上的解释&a…

OSS上传(Java和Js)

OSS上传(Java和Js)准备工作创建RAM用户创建角色创建权限策略给角色授予权限策略获取临时访问凭证Java普通上传OSSJava分片上传OSSJS普通上传OSSJS分片上传OSS使用RAM用户或STS方式访问 由于阿里云账号AccessKey拥有所有API访问权限,建议遵循阿…

短视频配音的秘诀!你不会还在傻傻自己人声配音吧?

我们在刷短视频的时候,常常发现这些视频的声音很相似,难道都是同一个作者创作的吗? 其实,这都是他们通过AI智能配音技术,把文本转换为人工智能的声音,而非创作者本人的配音效果。 毕竟真人配音的效率太低…

Elasticsearch_分词器、搜索文档以及原生JAVA操作

文章目录一、ES分词器1、默认分词器2、IK分词器2.1 IK分词器安装及测试2.2 IK分词器词典3、拼音分词器4、自定义分词器二、搜索文档1、添加文档数据2、搜索方式3、ES搜索文档的过滤处理3.1 结果排序3.2 分页查询3.3 高亮查询3.4 SQL查询三、原生JAVA操作ES1、搭建项目2、索引操…

CIMCAl photo container detect is free, container damage detect

飞瞳引擎™小程序直接拍照识别集装箱/API接口二次开发集装箱信息识别/铅封号识别API免费顶尖AI集装箱箱号识别率99.98%以上,高泛化CIMCAIl ENGINE™ photo container detection is free,support API further development or WeChat applet,the recogniti…

Color correction for tone mapping

Abstract色调映射算法提供了复杂的方法,将真实世界的亮度范围映射到输出介质的亮度范围,但它们经常导致颜色外观的变化。在本研究中,我们进行了一系列的主观外观匹配实验,以测量对比度压缩和增强后图像色彩的变化。结果表明&#…

K8S 部署 Redis-Cluster 集群

本文使用 bitnami 镜像部署 redis-cluster 官方文档:https://github.com/bitnami/charts/tree/main/bitnami/redis-cluster 添加 bitnami 仓库 helm repo add bitnami https://charts.bitnami.com/bitnami自定义 values.yaml storageClass:集群的存储…

GBDT(梯度提升树,Gradient Boosting Decision Tree)

GBDT(Gradient Boosting Decision Tree)在数据分析和预测中的效果很好。它是一种基于决策树的集成算法。其中Gradient Boosting 是集成方法boosting中的一种算法,通过梯度下降来对新的学习器进行迭代。而GBDT中采用的就是CART决策树 一、Boosting Boosting指把多个…

一周搞定模拟电路视频教程,拒绝讲PPT,仿真软件配合教学,真正一周搞定

目录1、灵魂拷问2、懦夫救星3、福利领取2、使用流程1、灵魂拷问 问:模拟电路很难吗? 答:嗯,真的很难!!! 问:模拟电路容易学吗? 答:很难学,建议放…

微电影广告具有哪些特点?

微电影广告是广告主投资的,以微电影为形式载体,以新媒体为主要传播载体,综合运用影视创作手法拍摄的集故事性、艺术性和商业性于一体的广告。它凭借精彩的电影语言和强大的明星效应多渠道联动传播,润物细无声地渗透和传递着商品信…

Tomcat介绍

Tomcat介绍 tomcat是一个免费的,开放源代码的Web应用服务器,是Apache软件基金会项目中的一个核心项目,由Apache ,Sun和一些公司以及个人共同开发而成,深受Java爱好者的喜爱,是一款比较流行的web应用服务器…

【C++11】可变参数模板(函数模板、类模板)

在C11之前,类模板和函数模板只能含有固定数量的模板参数。C11增强了模板功能,允许模板定义中包含0到任意个模板参数,这就是可变参数模板。可变参数模板的加入使得C11的功能变得更加强大,而由此也带来了许多神奇的用法。 可变参数模…

buu [BJDCTF2020]signin 1

题目描述: 题目分析: 打开发现是16 进制数(我也不知道我是怎么发现的,先是尝试了md5和rot-n,发现都不行,然后参考大佬的才知道是16进制)使用 在线16进制转字符串 便能得到 flag但我如果不想用线上工具&…

当搭建nginx服务时启动闪退,访问不了服务器

在学习nginx搭建集群服务器时遇到了一些小困难,明明跟着教程视频来操作却启动出问题,闪退,然后访问不了服务器等问题,搞半天搞不清楚,不知道从何下手?当你也遇到这样的情况,或许我这里可以给出一…

网络有线无线配置

一、需求 在无线接入区内,当Lsw1的上联口出现故障时,需要通过AP1-LSw1-LSw2-LSw3的路径访问公网server3。这是因为AP1通过无线网连接到LSw1,而LSw1与LSw3之间的链路出现故障,无法直接访问公网server3。因此,流量需要通…

02-18 周六 图解机器学习之SMV 第五章5-2

02-18 周六 图解机器学习之SMV 第五章5-2时间版本修改人描述2023年2月18日11:47:18V0.1宋全恒新建文档 环境 程序的基本环境,是使用了jupyter,在容器中运行的。 简介 本程序主要演示支持向量的获取,支持向量是距离超平面最近的点组成的。程序…

django+celery+ RabbitMQ自定义多个消息队列

关于django celery的使用网上有很多文章,本文就不多做更多的说明。 本文使用版本 python3.8.15 Django3.2.4 celery5.2.7celery.py from __future__ import absolute_import, unicode_literals import os from celery import Celery from kombu import Exchange, …

XC7K70T-1FBG484C, XC7A50T-1CSG324I FPGA,Kintex-7 285 I/O

说明Kintex-7 FPGA为快速增长应用和无线通信提供最优性价比和低功耗。Kintex-7 FPGA具有卓越的性能和连接性,与前一代相比,优化了最佳性价比,提高了2倍,实现了新一类fpga。Kintex-7内置支持8通道PCI Express (Gen1/Gen2)&#xff…

RPC框架dubbo的学习

一、基础知识 1、分布式基础理论 1.1)、什么是分布式系统? 《分布式系统原理与范型》定义: “分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统” 分布式系统(distributed system&#…

Linux驱动开发—设备树开发详解

设备树开发详解 设备树概念 Device Tree是一种描述硬件的数据结构,以便于操作系统的内核可以管理和使用这些硬件,包括CPU或CPU,内存,总线和其他一些外设。 Linux内核从3.x版本之后开始支持使用设备树,可以实现驱动代…