Transformer、Bert、Gpt对比系列,超详细介绍transformer的原理,bert和gpt的区别

news2025/1/13 2:38:18

 一、Transformer架构图

Transformer 是一种用于序列到序列学习的神经网络模型,主要用于自然语言处理任务,如机器翻译、文本摘要等。它在2017年由 Google 提出,采用了注意力机制来对输入序列进行编码和解码。

Transformer 模型由编码器和解码器两部分组成,每个部分都有多个相同的层,每个层都有两个子层。编码器用于将输入序列转换为一组向量表示,解码器则将这些向量解码为输出序列。Transformer 模型的主要特点是使用了自注意力机制,即每个位置的编码器输出向量都可以关注到输入序列的所有位置,而不仅仅是局部区域。

下面是 Transformer 模型的基本结构:

1.Transformer 中的编码器是由多个编码器层(Encoder Layer)组成的,每个编码器层包含两个子层:

(1)多头自注意力子层(Multi-Head Self-Attention Layer):用于将输入序列中每个位置的向量关联起来,产生一组新的向量表示。多头自注意力子层使用了多个注意力机制,每个注意力机制关注输入序列不同的位置。

(2)前馈神经网络子层(Feed-Forward Layer):用于对多头自注意力子层的输出进行非线性变换。

        在每个编码器层中,也引入了残差连接和层归一化等技术。残差连接是将输入序列直接添加到子层的输出中,以便信息能够更快地传递。层归一化是对每个子层的输出进行标准化,以使不同层之间的输入更加一致,从而加快模型的收敛速度。

2.Transformer 中的解码器也由多个解码器层(Decoder Layer)组成,每个解码器层包含三个子层:

(1)多头自注意力子层(Multi-Head Self-Attention Layer):与编码器中的自注意力子类似,用于将解码器中已经生成的序列位置进行关联,产生一组新的向量表示。

(2)编码器-解码器注意力子层(Encoder-Decoder Attention Layer):用于将编码器中产生的一组向量表示与解码器中已经生成的序列位置进行关联,产生一组新的向量表示。这一子层的注意力机制与多头注意力类似,但是其关注的是编码器的输出,而不是解码器的输出。

(3)前馈神经网络子层(Feed-Forward Layer):用于对多头自注意力子层和编码器-解码器注意力子层的输出进行非线性变换。

在每个解码器层中,同样也引入了残差连接和层归一化等技术,用于加速模型的收敛。总体而言,Transformer 解码器的主要作用是根据编码器的输出和之前已经生成的部分序列,生成下一个序列位置的预测,并输出到输出序列中。

3.Self-Attention注意力机制

 下图很详细,主要依靠生成三个向量:Q(查询)K(被查询)V(向量值)

Attention整体计算流程:每个词的Q会跟每一个K计算得分,Softmax后就得到整个加权结果,此时每个词看的不只是它前面的序列,而是整个输入序列,同一时间计算出所有词的表示结果

multi-headed机制:通过不同的head得到多个特征表达,将所有特征拼接在一起,可以通过再一层全连接来降维,每个头64维,最后拼接成512维:
3、位置编码:在Transformer中,先进行的是位置编码的计算,然后再进行注意力机制的计算。具体来说,在Encoder和Decoder中,位置编码会在Embedding层的输出上加入,以保留序列中每个位置的信息。位置编码的计算是通过在Embedding层的输出中加入一个位置编码矩阵来实现的。该位置编码矩阵的每一行都对应于一个位置的编码。然后,注意力机制会在经过位置编码的Embedding矩阵上进行计算,以捕捉不同位置之间的关联信息。因此,位置编码和注意力机制都是Transformer中非常重要的组成部分。

 4、残差连接和归一化:

Transformer中的残差连接和归一化机制是为了解决深度神经网络训练过程中的梯度消失和梯度爆炸问题。

残差连接是将输入数据与输出数据相加,从而保留输入数据的信息,并将其传递到下一层。这样做的好处是可以避免梯度消失,因为输入数据中有一部分信息可以直接传递到输出数据中。同时,残差连接可以加速模型的训练过程,因为可以直接在残差连接中更新参数。

归一化机制是通过对每个特征的值进行归一化,使得神经网络在训练过程中更加稳定。在Transformer中,使用的是Layer Normalization,即对每个样本中的每个特征进行归一化。这样做可以使得模型对于不同的输入更加健壮,提高模型的泛化能力。此外,归一化机制还可以加速模型的收敛速度。

5、mask机制:在 Transformer 模型中,为了避免模型在预测当前元素时使用未来的元素,需要引入掩码(mask)机制,掩码通常表示为一个二维矩阵,其中对角线上方的元素都被设置为0,表示这些元素不能被使用。这个矩阵可以通过在模型训练期间进行动态生成来实现。

在 Transformer 模型中,掩码机制主要用于两个方面。

(1)解码器自身掩码

在解码器中,模型需要在每个时间步骤生成一个新的输出元素,但是这个元素只能由已经生成的输出元素来影响,而不能受到未来输出元素的影响。为了达到这个目的,我们需要在解码器输入序列中加入一个掩码,以便在生成当前输出元素时,只考虑已经生成的元素。

(2)编码器-解码器掩码

在解码器中,模型需要根据编码器生成的输入序列来生成输出序列,但是模型不能使用编码器输入序列中未来的元素来影响当前输出元素的预测。为了达到这个目的,需要在编码器输入序列中加入一个掩码,以便在生成当前输出元素时,只考虑输入序列中已经出现的元素。

通过引入掩码机制,Transformer模型可以避免在生成序列时使用未来的元素,确保生成输出序列的正确性。

区别:解码器自身掩码是为了限制解码器在生成每个输出元素时,只能使用之前已经生成的元素,而不能使用后面还未生成的元素。在每个解码器的时间步骤中,模型会生成一个掩码矩阵,该矩阵的维度为 (target_seq_len, target_seq_len),其中对角线上方的元素都被设置为0,表示这些元素不能被使用。这个掩码矩阵会与解码器的注意力机制中的查询矩阵相乘,以便在计算注意力得分时,只考虑已经生成输出元素。

编码器-解码器掩码是为了限制模型在计算解码器的注意力得分时,只考虑输入序列中已经出现的元素,而不考虑未来的元素。具体来说,模型会使用编码器的输出值作为键值对,以便在生成当前输出元素时,只考虑输入序列中已经出现的元素。为了达到这个目的,需要在计算注意力得分前,将编码器-解码器掩码与编码器的输出值相乘,以便将未来的元素掩码掉,只考虑已经出现的元素。

 二、BERT(Bidirectional Encoder Representations from Transformers)是一种预训练语言表示学习模型,由Google公司的研究人员在2018年提出,它是基于Transformer Encoder的深度双向模型,可以在各种自然语言处理任务上达到先进的效果。

BERT模型的预训练任务是通过掩码语言模型(Masked Language Model,MLM)下一句预测(Next Sentence Prediction,NSP)两种方式进行的。其中,MLM任务在输入文本中随机掩盖一些标记(通常是15%左右),并要求模型预测这些标记的正确词汇;NSP任务通过给定两个句子,让模型判断它们是否是连续的语言序列,以此来学习语言的连贯性

在预训练完成后,BERT模型可以通过微调的方式应用于各种NLP任务,如文本分类、命名实体识别、句法分析等。相比于传统方法,BERT模型能够更好地捕捉上下文信息,从而提高模型的预测准确率。

1.BERT模型的优点在于:

  • 可以更好地理解输入文本的上下文信息;
  • 可以直接利用预训练模型的参数进行微调,从而减少对领域数据的依赖;
  • 引入双向性,使得整个模型可以同时考虑文本的左右两侧信息。

 

2.BERT 在进行分类任务时使用 [CLS] 标记来表示整个句子的语义信息。其主要缺点有以下几点:

(1)[CLS] 标记只能表示整个句子的语义信息,而不能区分句子中不同部分的重要性。如果句子中有一些重要的词或短语,它们的信息可能会被 [CLS] 标记所掩盖,从而降低分类的准确性。

(2) BERT 模型是基于注意力机制的,当输入序列非常长时,它需要很多计算资源来对整个序列进行注意力计算。因此,当处理非常长的文本时,BERT 可能会出现内存不足等问题。

(3) BERT 的训练需要大量的数据和计算资源,因此在一些计算能力较弱的设备上可能无法很好地发挥其性能。

3.BERT模型在序列标注任务上的缺点主要包括以下几个方面:

(1) 模型复杂度高:BERT模型是一个十分大的模型,它的训练和推理需要巨大的计算资源,这会导致训练时间和模型大小都非常大。

(2) 需要预处理数据:BERT模型的输入需要预处理,这意味着在使用BERT模型进行序列标注任务时需要对数据进行处理,这会增加额外的工作量。

(3)对长文本处理不够稳定:BERT的输入长度是有限制的,如果输入序列过长,会导致计算资源的消耗过大,同时也会影响模型的性能。

(4)对少见词的处理不够好:BERT模型在处理罕见词汇(如专业术语、生僻词等)时存在一定的困难,这可能会影响模型的性能。

(5)需要大量数据进行训练:BERT模型需要大量的数据才能够训练出良好的效果,这对于某些特定领域的任务可能比较困难。

三、GPT:GPT(Generative Pre-trained Transformer)是由OpenAI团队提出的预训练语言模型,采用了基于Transformer的架构,旨在通过大规模无监督学习来学习文本的表示,从而为各种自然语言处理任务提供预训练模型。

GPT模型采用的是单向的Transformer Decoder结构,在预训练阶段使用了两种任务:语言模型(LM)和下一句预测(NSP)。其中,LM任务要求模型预测给定上下文中缺失的单词,NSP任务要求模型判断给定两个句子是否是连续的。

与BERT模型不同,GPT模型采用了单向Transformer结构,因此只能利用上文信息,而不能直接利用下文信息。此外,GPT模型还采用了基于位置编码的方法来处理文本的顺序关系。

GPT模型的优点在于:

  • 训练过程简单,不需要额外的监督信号;
  • 学习到的表示能够应用于各种自然语言处理任务;
  • 可以生成流畅、连贯的文本,适用于自然语言生成任务。

1.在GPT中,Decoder采用了Transformer模型中的Decoder结构,只不Decoder的输入是一个文本序列,而不是一个由Encoder产生的编码向量序列。Decoder的计算流程是:

(1) 将输入的文本序列中的每个词向量按照位置编码(Positional Encoding)的方式与一个可学习的嵌入矩阵相乘,得到词向量序列。

(2)将词向量序列和一个可学习的Masked Multi-Head Attention模块相连,得到Attention向量序列。

(3)将Attention向量序列和一个可学习的Feed-Forward模块相连,得到中间向量序列。

(4)将中间向量序列和一个可学习的Layer Normalization模块相连,得到最终的输出向量序列。

(5)对输出向量序列进行一个线性变换和Softmax操作,得到下一个预测词的概率分布。

这样,通过不断地输入当前预测词的概率分布,直到生成一个结束标记或达到最大长度限制,就可以生成一个完整的文本序列。

2.GPT和BERT的区别:

(1)架构:GPT:采用单向Transformer Decoder结构,只能利用上文信息,不能直接利用下文信息。在预训练阶段使用了两种任务:语言模型(LM)和下一句预测(NSP)。BERT:采用双向Transformer Encoder结构,在预训练阶段使用了两种任务:遮盖语言模型(Masked Language Model,MLM)和下一句预测(Next Sentence Prediction,NSP)。

(2)训练任务:GPT:使用的是语言模型和下一句预测任务。在语言模型任务中,模型根据前面的文本预测下一个单词;在下一句预测任务中,模型需要判断两个句子是否相邻。BERT:使用的是遮盖语言模型和下一句预测任务。在遮盖语言模型中,模型需要根据上下文预测被遮盖的单词;在下一句预测任务中,模型需要判断两个句子是否相邻,并给出是或否的预测结果。

(3)数据集:GPT:使用了WebText等大型文本语料库。BERT:使用了Wikipedia等大型文本语料库,以及BookCorpus等小型语料库。

(4)应用场景:GPT:适用于语言生成、文本补全、问答等任务。BERT:适用于文本分类、命名实体识别、情感分析等任务。

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

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

相关文章

随身WIFI折腾日记(五)---远程视频监控

六、远程视频监控 为了实现基于随身WIFI的网络摄像头,我参考了如下视频课程: 韦东山老师手把手带你从0开始自己做一个视频监控项目 系统由三部分组成:推流端(随身WIFI)、流媒体服务器(云服务器)、拉流端(浏览器/VLC播放器) 方案&#xff1…

NetworkInterface类

文章目录 1. 简介2. 工厂方法3. 获取方法 1. 简介 NetworkInterface类表示一个本地IP地址。这可以是一个物理接口,如额外的以太网卡(常见于防火墙和路由器),也可以是一个虚拟接口,与机器的其它IP地址绑定到同个物理硬…

ensp实践dhcp服务

ensp实践dhcp服务 1、dhcp接口分配模式2、dhcp接口地址池分配模式3、dhcp布拉布拉布拉 1、dhcp接口分配模式 1.1、路由器AR1配置dhcp动态获取 <Huawei>system-view [Huawei]interface g0/0/0 [Huawei-GigabitEthernet0/0/0]ip address 10.1.1.1 24 [Huawei-GigabitEthe…

PixiJS 源码解读:绘制矩形,底层都做了什么?

大家好&#xff0c;我是前端西瓜哥&#xff0c;今天带大家看一下 PixiJS 的源码实现。 PixiJS 是一个非常流行的 Canvas 库&#xff0c;start 数将近 4w。 使用 PixiJS 简单易用的 API&#xff0c;我们可以在浏览器页面的 Canvas 元素上高性能地绘制图形&#xff0c;实现流畅…

基于深度学习的交通标志检测和识别(从原理到环境配置/代码运行)

项目是一个基于Python和OpenCV的交通标志检测和识别项目,旨在使用计算机视觉和深度学习技术对交通标志进行检测和分类。本文将从介绍项目原理和框架开始,详细介绍该项目的实现过程和技术细节,最后给出项目的安装和使用方法。 前后结果对比 识别前 识别后 一、 项目原理和框…

随身WIFI折腾日记(一)---霓虹灯

引言 通过对高通410芯片的随身WIFI刷写Debain系统&#xff0c;我们已经拥有了一台带4G功能的迷你ARM64单板电脑。现在我们可以基于此此平台进行一下二次开发。 随身WIFI的优势就是价格低廉&#xff0c;性能和树莓派zero2、树莓派3b差不多。 硬件配置如下&#xff1a; msm89…

随身WIFI折腾日记(二)---文件传输和软件安装

二、文件传输 我们可以通过SCP和SFTP工具和随身WIFI(USB连接)进行数据传输&#xff0c;上图以scp工具为例。 将本地电脑文件传输至随身WIFI&#xff0c;本地电脑上输入如下指令即可&#xff1a; scp /path/to/local/file user192.168.68.1:/path/to/remote/directory/注意&…

RK3568平台开发系列讲解(驱动基础篇)10min带你获取、了解与编译Kernel源代码

🚀返回专栏总目录 文章目录 一、Kernel获取二、Kernel根目录2.1 Documentation/2.1 arch/2.2 block/2.3 boot.its2.4 drivers/2.5 firmware/2.6 fs/2.7 include/2.8 init/2.9 ipc/2.10 kernel/2.11 lib/2.12 lo

(转载)从0开始学matlab(第13天)—画图进阶

我们将讨论简单的二维图象(之前已有所介绍)的附加特性。这些特性将允许我们控制 x&#xff0c;y 轴上的值的范围&#xff0c;在一个坐标系内打印多个图象&#xff0c;或创建多个图&#xff0c;或在一个图象窗口内创建多个子图像&#xff0c;或提供更加强大的轨迹文本字符控制。…

【c语言】全部知识点总结

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ …

前端如何做单元测试? 看这篇就入门了

前言 对于现在的前端工程&#xff0c;一个标准完整的项目&#xff0c;通常情况单元测试是非常必要的。但很多时候我们只是完成了项目而忽略了项目测试。我认为其中一个很大的原因是很多人对单元测试认知不够&#xff0c;因此我写了这边文章&#xff0c;一方面期望通过这篇文章…

基于DDSRF正负序分离方法的不平衡电网PQ控制策略_平衡电流控制

0.前言 对于并网逆变器而言&#xff0c;电网会存在不平衡的情况。在这种情况下&#xff0c;不平衡的电网电压可以分解成为正序、负序和零序分量。并网逆变器通常期望能够实现单位功率因数并网&#xff0c;向电网注入对称的正弦电流&#xff0c;所以此时的微电网逆变器控制策略显…

DC-9靶机-简单谈一下端口敲门技术 (Port Knocking)

前言 在打靶机DC-9时&#xff0c;爆破SSH时一直显示失败&#xff0c;经过查阅才知道原来是对端口做了“隐藏”&#xff0c;需要通过 Port Knocking 来主动开启&#xff0c;由于平时接触到的机会不多&#xff0c;所以这里简单记录一下&#xff0c;加强一下印象&#xff0c;也希…

Systrace系列7 —— Vsync 解读

本文主要是是介绍 Android 中的 Vsync 机制。文章会从 Systrace 的角度来看 Android 系统如何基于 Vsync 每一帧的展示。Vsync 是 Systrace 中一个非常关键的机制,虽然我们在操作手机的时候看不见,摸不着,但是在 Systrace 中我们可以看到,Android 系统在 Vsync 信号的指引下…

Tomcat系统架构浅析

大家好&#xff0c;我是易安&#xff01; 今天咱们就来一步一步分析Tomcat的设计思路&#xff0c;看看Tomcat的设计者们是如何设计一个复杂系统&#xff0c;怎么设计顶层模块&#xff0c;以及模块之间的关系。 Tomcat总体架构 我们知道如果要设计一个系统&#xff0c;首先是要…

特征缩放(Scale Features)、特征缩放预测​CO2 值、df列索引扩展

目录 1、特征缩放 2、预测CO2 值 3、df列索引扩展 1、特征缩放 特征缩放可以用于不同的度量单位。度量单位不同的情况下&#xff0c;特征的数值大小也会有所不同&#xff0c;这可能会影响到某些机器学习算法的表现。例如&#xff0c;如果一个特征的单位是英寸&#xff0c;而另…

DAB-DETR代码学习笔记

先上一张整体架构图 &#xff1a; 代码地址&#xff1a;GitHub - IDEA-Research/DAB-DETR: [ICLR 2022] DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR 论文地址&#xff1a; https://arxiv.org/pdf/2201.12329.pdf 文章全名《DYNAMIC ANCHOR BOXES ARE BETTER …

建模杂谈系列223 Q-Learning示例的代码拆解分析

说明 找到了一个合适的例子&#xff0c;然后我对其中的内容进行了拆解分析。我觉得代码表达的内容比伪代码清晰多了。 这次算是补砖了(监督无监督强化)&#xff0c;过去实际上接触过很多强化体系内的基本工具&#xff0c;但一直没有开始做&#xff0c;部分原因是没时间&#…

Java 与排序算法(5):归并排序

一、归并排序 归并排序&#xff08;Merge Sort&#xff09;是一种基于分治思想的排序算法。它将待排序的数组分成两个长度相等的子数组&#xff0c;然后对这两个子数组分别进行归并排序&#xff0c;最后将两个排好序的子数组合并成一个有序的数组。 具体实现过程如下&#xf…

【国内chatgpt使用方法合集】(5月22日已更新)

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…