【NLP相关】ChatGPT的前世今生:GPT模型的原理、研究进展和案例

news2024/11/17 13:33:57

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

GPT

【NLP相关】ChatGPT的前世今生:GPT模型的原理、研究进展和案例

自然语言处理(NLP)是人工智能领域中最为热门的研究方向之一,近年来在自然语言生成、文本分类、机器翻译等任务上取得了许多重要进展。而GPT模型(Generative Pre-trained Transformer)作为NLP领域中的新宠,具有许多优势,已经被广泛应用于各种任务中。本文将会介绍GPT模型的原理、优劣势以及其在实际应用中的案例和代码,并延伸介绍GPT类模型的研究进展。

1. GPT模型的原理

GPT模型是一种基于Transformer的语言模型,其基本原理是使用大规模语料库进行预训练,再在特定任务上进行微调,从而得到对该任务的优化模型。

在GPT中,使用了一种叫做自监督学习的技术来预训练模型。自监督学习是指利用无需人工标注的数据,让模型在特定任务上自我学习和调整参数,以提高模型的泛化能力。具体而言,GPT通过预测序列中缺失的某个单词或单词的顺序来进行预训练,这个任务被称为语言模型任务。例如,给定句子中的前几个单词,GPT需要预测下一个单词,这个任务可以在大规模无监督语料库上训练,例如维基百科等。

预训练阶段结束后,GPT可以通过微调来完成下游任务,例如文本分类、语义相似度计算等。在微调阶段,GPT将在有标注数据集上进行有监督学习,通过反向传播算法调整模型参数,以提高模型在特定任务上的性能。

通过以上的无监督和有监督预训练,GPT模型可以学习到文本中的语言规律和上下文信息,从而成为一个具有强大语言生成能力的模型。

2. GPT-1、GPT-2和GPT-3的介绍

GPT是由OpenAI开发的一系列基于深度学习的自然语言处理模型。GPT的全称是Generative Pre-trained Transformer,其核心是基于Transformer架构的神经网络,主要用于生成自然语言文本。以下是GPT-1、GPT-2和GPT-3的原理、训练过程以及区别和联系的简要介绍。

(1)GPT-1

GPT-1是OpenAI于2018年发布的第一个GPT模型,使用了117M个参数。GPT-1的核心思想是预训练语言模型,即通过在大规模语料库上进行无监督学习,使模型学会理解和生成自然语言文本。GPT-1的预训练过程包括两个阶段:第一个阶段是无标签的预训练,即在语料库上进行自监督学习,学习输入序列与输出序列之间的关系;第二个阶段是有标签的微调,即在特定任务上进行有监督学习,以进一步提高模型的性能。

(2)GPT-2

GPT-2是OpenAI于2019年发布的第二个GPT模型,使用了1.5B个参数。GPT-2相对于GPT-1的改进在于使用了更大的模型和更广泛的训练数据集,并且取消了微调阶段。GPT-2的训练过程包括单一的预训练阶段,通过在大规模语料库上进行无监督学习来训练模型。GPT-2还使用了一种名为“无样本生成”的技术,可以在没有任何文本提示的情况下生成连贯的文本段落。

(3)GPT-3

GPT-3是OpenAI于2020年发布的第三个GPT模型,使用了175B个参数。GPT-3相对于GPT-2的改进在于使用了更大的模型和更广泛的训练数据集,并且引入了一种名为“多任务学习”的训练方式。在多任务学习中,模型被同时训练用于多个不同的任务,从而提高了模型的泛化能力和效果。GPT-3还引入了一种名为“零样本学习”的技术,可以在没有任何训练数据的情况下进行新任务的学习。

(4)区别和联系

GPT-1、GPT-2和GPT-3的核心思想都是预训练语言模型,即通过在大规模语料库上进行无监督学习,使模型学会理解和生成自然语言文本。它们的训练过程都包括预训练阶段和微调阶段(GPT-2除外),而且它们都使用了Transformer架构,Transformer架构是一种自注意力机制,可以处理序列数据并捕捉长期依赖关系。但是,它们之间也有一些区别和联系:

  • 参数量:随着模型的升级,GPT-1、GPT-2和GPT-3的参数量不断增加,分别为117M、1.5B和175B。

  • 训练数据集:GPT-1、GPT-2和GPT-3使用了不同规模和不同领域的训练数据集,其中GPT-3的训练数据集更加广泛和多样化,但具体数据量并没有公开披露。

  • 训练方式:GPT-1和GPT-2的训练方式都采用预训练+微调的方式,而GPT-3引入了多任务学习和零样本学习的训练方式,以进一步提高模型的泛化能力和效果。

  • 生成能力:随着模型的升级,GPT-1、GPT-2和GPT-3的生成能力都有所提高,尤其是GPT-3的生成能力更为出色,可以生成极其逼真的自然语言文本,有时甚至可以欺骗人类。

3. GPT模型的优势和劣势

3.1 优势

  • (1)高效的语言生成能力
    GPT模型能够生成流畅、连贯、自然的文本,可以用于自动文本摘要、机器翻译、对话系统等任务。

  • (2)大规模数据集的预训练
    GPT模型使用了大规模的语料库进行预训练,从而可以在各种任务上进行微调,得到更好的性能。

  • (3)可解释性
    GPT模型的结构比较简单,而且预训练过程可以提供一些可解释性的信息,例如对于一个生成的句子,可以追溯到哪些词汇和上下文信息对其生成起到了关键作用。

  • (4)可扩展性
    GPT模型可以通过不同规模的预训练语料库进行训练,从而可以适应不同大小的任务和数据集。

3.2 劣势

  • (1)需要大量计算资源
    GPT模型需要大量的计算资源进行训练和推断,包括GPU和大量的内存。

  • (2)存在生成偏差
    由于GPT模型是通过预测下一个词来生成句子的,因此在某些情况下会出现生成偏差的问题,例如生成重复的词汇或者过度使用某些单词。

4. GPT-1、GPT-2、GPT-3对比

模型发布时间参数量训练时长训练耗费所用GPU数目训练数据量
GPT-12018年11月117M---约5GB
GPT-22019年2月1.5B数周--约40GB
GPT-32020年6月175B数月约460万美元1024 张 80GB A100需1一个月约45TB

5. GPT模型的公式推导

GPT模型使用的是Transformer的结构,其核心思想是自注意力机制(Self-Attention Mechanism),可以用以下公式表示:

Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q,K,V)=\text{softmax}(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V

其中, Q , K , V Q,K,V Q,K,V分别表示查询向量、键向量和值向量, d k d_k dk表示向量的维度。这个公式表示的是查询向量与键向量的相似度,然后再根据相似度的权重对值向量进行加权,从而得到输出向量。

GPT模型使用了多头自注意力机制,可以用以下公式表示:
M u l t i H e a d ( Q , K , V ) = Concat ( head 1 , head 2 , ⋯   , head h ) W O MultiHead(Q,K,V)=\text{Concat}(\text{head}_1,\text{head}_2,\cdots,\text{head}_h)W^O MultiHead(Q,K,V)=Concat(head1,head2,,headh)WO

其中, head i = Attention ( Q W i Q , K W i K , V W i V ) \text{head}_i=\text{Attention}(QW_i^Q,KW_i^K,VW_i^V) headi=Attention(QWiQ,KWiK,VWiV)表示第 i i i个注意力头, h h h表示头的数量, W i Q , W i K , W i V W_i^Q,W_i^K,W_i^V WiQ,WiK,WiV分别表示查询、键、值的投影矩阵, W O W^O WO表示最终输出的投影矩阵。

GPT模型的结构可以用以下公式表示:

GPT ( x ) = TransformerDecoder ( Embedding ( x ) ) \text{GPT}(x)=\text{TransformerDecoder}(\text{Embedding}(x)) GPT(x)=TransformerDecoder(Embedding(x))

其中, x x x表示输入序列, Embedding \text{Embedding} Embedding表示词嵌入层, TransformerDecoder \text{TransformerDecoder} TransformerDecoder表示Transformer的解码器。

6. GPT类模型的研究进展

GPT模型在自然语言处理领域的应用已经非常广泛,除了生成文本和文本分类之外,还可以用于问答系统、机器翻译、对话系统等任务。近年来,GPT类模型的研究进展非常迅速,出现了许多新的模型和算法,例如:

  • (1)GPT-3

GPT-3是GPT系列模型的最新版本,拥有1750亿个参数,是迄今为止最大的自然语言处理模型之一。GPT-3的应用范围非常广泛,可以用于生成文本、文本分类、问答系统等任务,甚至可以完成一些常规编程任务。

  • (2)T5

T5是一种基于转换器的序列到序列模型,可以用于各种自然语言处理任务。T5不仅可以进行生成式任务,还可以进行分类、标注等任务,甚至可以用于图像生成和语音识别等领域。

  • (3)UniLM

UniLM是一种多任务学习模型,可以用于各种自然语言处理任务。UniLM将生成任务和理解任务统一到一个框架中,可以通过联合训练,实现模型参数共享,从而提高模型的效率和泛化能力。

  • (4)GShard

GShard是一种分布式训练框架,可以支持训练拥有数百亿个参数的自然语言处理模型。GShard使用数据并行和模型并行相结合的方式,可以在大规模分布式系统上高效地训练模型,从而提高模型的训练速度和精度。

7. GPT模型的案例和代码

7.1 生成文本

下面是使用GPT-2生成文本的Python代码示例:

import torch
import numpy as np
from transformers import GPT2Tokenizer, GPT2LMHeadModel

tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('gpt2')

input_text = 'The quick brown fox'
input_ids = tokenizer.encode(input_text, return_tensors='pt')
outputs = model.generate(input_ids, max_length=50, do_sample=True)

generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(generated_text)

7.2 文本分类

下面是使用GPT-2进行文本分类的Python代码示例:

import torch
from transformers import GPT2Tokenizer, GPT2ForSequenceClassification

tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2ForSequenceClassification.from_pretrained('gpt2')

input_text = 'The quick brown fox'
input_ids = tokenizer.encode(input_text, return_tensors='pt')
outputs = model(input_ids)

logits = outputs.logits
predicted_label = torch.argmax(logits, dim=1).item()
print(predicted_label)

参考文献

[1] 预训练语言模型之GPT-1,GPT-2和GPT-3 https://zhuanlan.zhihu.com/p/350017443
[2] 从GPT-1到GPT-4看ChatGPT的崛起 https://baijiahao.baidu.com/s?id=1751371730335726395

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

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

相关文章

【二分查找】分巧克力、机器人跳跃、数的范围

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…

二层如何避免loop 的产生

STP是一个用于局域网中消除环路的协议。STP通过构造一棵树来消除交换网络中的环路二层交换机二层交换机不具备路由能力,主要功能有三种1)地址学习(address learning):通过查看帧的源MAC地址来加紧转发/过滤表的MAC地址…

django框架开发部署项目

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…

工作负载使用教程

主要包括YCSB和背景一、安装Java二、安装Memcached数据库并配置三、修改YCSB脚本文件四、运行YCSB脚本五、运行GAPBS总结背景 测试multi-clock内核的内存性能有啥提升 YCSB:雅虎推出的云数据库基准测试套件 参考论文MULTI-CLOCK: Dynamic Tiering for Hybrid Memor…

03-产品解决方案:需求分析、功能优先级划分、功能价值、用户体验

文章目录3.1 需求分析3.1.1 需求分析的目的3.1.2 需求分析的方法(Y模型)3.1.3 需求分析的具体应用3.2 功能优先级划分Kano模型3.3 功能价值3.3.1 什么是功能价值?3.3.2 实际价值判断3.3.3 成本评估3.4 用户体验3.4.1 用户体验的定义及影响因素…

IDEA 每次新建工程都要重新配置 Maven 解决方案

IDEA 每次新建工程都要重新配置 Maven 解决方案 IDEA 每次新建工程都要重新配置 Maven,是一件相当浪费时间的事情。这是因为在创建一个项目后,在 File -> Settings -> Build,Execution,Deployment -> Build Tools -> Maven下配置了 Maven h…

华为OD机试用Python实现 -【停车找车位】 |2023.Q1 A卷

华为OD机试题 最近更新的博客华为 OD 机试 300 题大纲本篇题目:停车找车位题目描述输入描述输出描述示例一输入输出示例二输入输出代码编写思路Python 代码最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题

QML编码约定

QML中的国际化: QML使用以下函数来将字符串标记为可翻译的 qsTr()qsTranslate()qsTrld()QT_TR_NOOP()QT_TRANSLATE_NOOP()QT_TRID_NOOP最常用的还是qsTr() string qsTr(string sourceText, string disambiguation&…

Linux- 系统随你玩之--文件管理-双生姐妹花

文章目录1、前言2、文件管理-双生姐妹花2.1、 df2.1.1、 df 语法2.1.1 、常用参数2.2、 du2.2.1、du 语法2.1.1、 常用参数2.3、双生姐妹花区别2.3.1、 查看文件统计 的计算方式不同2.3.2 、删除文件情况下统计结果 不同2.3.3 、针对双生姐妹花区别 结语3、双生姐妹花实操3.1 、…

[2019红帽杯]childRE

题目下载:下载 参考:re学习笔记(24)BUUCTF-re-[2019红帽杯]childRE_Forgo7ten的博客-CSDN博客 这道题涉及到c函数的修饰规则,按照规则来看应该是比较容易理解的。上面博客中有总结规则,可以学习一下。 载…

不同的网络分层模型与其常见的协议和硬件

文章目录一、网络分层模型1.1 OSI七层参考模型1.2 TCP/IP分层模型1.3 数据的分层传输二、网络通信媒介和数据链路2.1 网卡2.2 中继器Repeater2.3 集线器交换机(二层设备) 比集线器升级了什么二层交换机和三层交换机说明:该博客粗略整理了下不同的网络模型&#xff0…

Vue3之组件间传值避坑指南

组件间传值的两个坑 我们都知道父组件可以把值传递到自组件中,但是有时候子组件需要修改这个父组件传递过来的这个值,我们可以想象下能修改成功吗?这是坑之一。我们在组件间传值的时候,都是一个属性名对应一个值,接收…

泛函分析导论

它的基本思想是将函数看作向量,从而将函数空间转化为向量空间,进而研究函数空间的性质。泛函分析的主要内容包括:线性空间、内积空间、赋范空间、希尔伯特空间、算子理论、谱理论、函数空间等。空间与算子度量空间赋范空间和巴拿赫空间线性算…

Mybatis插件开发及执行原理

mybatis源码下载 https://github.com/mybatis/mybatis-3,本文分析源码版本3.4.5 mybatis启动大致流程 在看这篇文章前,建议查看我另一篇文章,以了解框架启动的流程和框架中一些重要对象:https://blog.csdn.net/Aqu415/article/…

com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.channel.AbstractChannel

一 完成的错误信息 异常Message one Caused by: com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information 异常Message two [com.alibaba.nacos.client.remote.worker] ERROR…

K8S 实用工具之二 - 终端 UI K9S

开篇 📜 引言: 磨刀不误砍柴工工欲善其事必先利其器 第一篇:《K8S 实用工具之一 - 如何合并多个 kubeconfig?》 像我这种,kubectl 用的不是非常溜,经常会碰到以下情况: 忘记命令,先…

基于粒子群改进的支持向量机SVM的情感分类识别,pso-svm情感分类识别

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 SVM应用实例,基于SVM的情感分类预测 代码 结果分析 展望 支持向量机SVM的详细原理 SVM的定义 支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型…

【C++修炼之路】25.哈希应用--布隆过滤器

每一个不曾起舞的日子都是对生命的辜负 布隆过滤器前言一.布隆过滤器提出二.布隆过滤器概念三. 布隆过滤器的操作3.1 布隆过滤器的插入3.2 布隆过滤器的查找3.3 布隆过滤器的删除四.布隆过滤器的代码4.1 HashFunc的仿函数参考4.2 BloomFilter.h五.布隆过滤器的优缺点六.布隆过滤…

Spring——Bean管理-xml方式进行属性注入

目录 一、xml方式创建对象 二、xml方式注入属性 第①种方式注入:set方法注入 第②种方式注入:有参构造函数注入 constructor-arg:通过构造函数注入 用name标签属性: 不按照顺序也会自动匹配 使用index标签属性:…