3、Transformer及其应用

1、transformer

huggingface官方教程:https://transformers.run/
https://github.com/YangBin1729/nlp_notes/tree/master

1.1、KQV计算

输入:Embedding
Q:查询矩阵
K:被查矩阵
V:提取Embedding体征矩阵(特征提取或特征重构)
输出:value(提取的特征)

qk相当于视觉中的卷积核,多头注意力机制就是用多个qkv,相当于多个卷积核。
encode提供kv(用于计算Z特征值),decode提供Q(用于查询)。
self attention 对本句话单词之间的关系,attention 本句子和其他句子词之间的关系。
bert 是transform的encode部分,属于预训练模型。
并行运算:
qk是自身的q和其他位置的k的乘积,不只是自身的qk,v是自身的v。v相当于输入embedding转换成另一种embedding,即它的特征。
https://zhuanlan.zhihu.com/p/441459022
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Q、K、V只限于seq2seq结构:
Q:指的是query,相当于decoder的内容
K:指的是key,相当于encoder的内容
V:指的是value,相当于encoder的内容

QKV具体是如何工作的:
在seq2seq模型里,QKV机制用于在encoder和decoder之间传递输入序列的全局语言特征。具体来看,首先encoder将输入序列逐层编码获得隐藏特征向量(或称"隐藏状态"、“HS”),随后该向量经由权重矩阵变换获得表征语言特征的K和V矩阵。qk是自身的q和其他位置的k的乘积,不只是自身的qk,v是自身的v。v相当于输入embedding转换成另一种embedding,即它的特征。

在解码时,encoder产生的隐藏状态会被作为decoder的起始状态,随后就是经典的自回归迭代过程:每一轮迭代,decoder会首先使用当前状态(代表已输出序列)变换出Q,随后用Q去查询KV库的全局依赖关系,进而预测出下一个最符合全局依赖关系以及当前已输出内容的输出。

计算过程举例:
假设我们有一个简单的句子“Thinking machines”,我们想要理解“machines”的上下文含义。在自注意力机制中,我们会对句子中的每个词进行编码,生成对应的Q、K、V向量。
查询(Q):代表我们想要理解的词(例如,“machines”)的向量表示。
键(K):代表句子中所有词(包括“Thinking”和“machines”)的向量表示,用于与Q进行比较。
值(V):同样代表句子中所有词的向量表示,但是当计算出Q和K的相似度后,将用于加权求和,生成输出。
具体步骤如下:
对于“machines”,我们计算它与句子中所有词(包括它自己)的Q和K向量之间的相似度。
使用这些相似度得分来加权句子中每个词的V向量。
将加权的V向量求和,得到一个新的向量,这个向量现在编码了“machines”在给定上下文中的含义。
通过这种方式,自注意力机制允许“machines”这个词不仅考虑自身的含义,还考虑到与“Thinking”这个词之间的关系,从而在句子级别上获得更加丰富和准确的表示。
链接:https://blog.csdn.net/qq_35284513/article/details/136797906

1.2、 Attention 和 Self - Attention的区别

2.1 Attention 和 Self - Attention的区别

  • Attention:
    传统的Attention机制发生在 Target的元素 和 Source中的所有元素 之间。 在一般任务的Encoder-Decoder框架中,输入 Source 和输出 Target 内容是不一样的,比如对于英 - 中机器翻译来说,Source是英文句子,Target是对应的翻译出的中文句子。

  • Self - Attention
    Self - Attention 顾名思义,指的不是 Target 和 Source 之间的 Attention 机制,而是 Source 内部元素之间或者 Target 内部元素之间发生的 Attention 机制,其具体计算过程是一样的,只是计算对象发生了变化而已,相当于是 Query=Key=Value,计算过程与attention一样。 (例如在Transformer中在计算权重参数时,将文字向量转成对应的 QKV,只需要在 Source 处进行对应的矩阵操作,用不到Target中的信息。)

  • 总结区别: 1. Self-attention 关键点在于,规定K-Q-V三者都来源于 X。通过 X 找到 X 中的关键点。可以看作 QKV 相等,都是由词向量线性变换得到的,并不是 Q=V=K=X,而是 X 通过 Wk、Wq、Wv 线性变换而来。 2. Attention 是通过一个查询变量 Q 找到 V 里面重要信息,K 由 V 变幻而来,QK=A ,AV = Z(注意力值) ,Z 其实是 V 的另一种表示,也可以称为词向量,具有句法和语意特征的 V 3. 也就是说,self-attention 比 attention 约束条件多了两个: (1) Q=K=V(同源) (2) Q,K,V需要遵循attention的做法

1.3Transformer的工作原理

在这里插入图片描述
上图是论文中 Transformer 的内部结构图,左侧为 Encoder block,右侧为 Decoder block。红色圈中的部分为 Multi-Head Attention,是由多个 Self-Attention组成的,可以看到 Encoder block 包含一个 Multi-Head Attention,而 Decoder block 包含两个 Multi-Head Attention (其中有一个用到 Masked)。Multi-Head Attention 上方还包括一个 Add & Norm 层,Add 表示残差连接 (Residual Connection) 用于防止网络退化,Norm 表示 Layer Normalization,用于对每一层的激活值进行归一化。
因为 Self-Attention是 Transformer 的重点,所以我们重点关注 Multi-Head Attention 以及 Self-Attention。
在这里插入图片描述
在这张图中,Q与K\top经过MatMul,生成了相似度矩阵。对相似度矩阵每个元素除以\sqrt{d_k},d_k为K的维度大小。这个除法被称为Scale。当d_k很大时,QK\top的乘法结果方差变大,进行Scale可以使方差变小,训练时梯度更新更稳定。
Mask是机器翻译等自然语言处理任务中经常使用的环节。在机器翻译等NLP场景中,每个样本句子的长短不同,对于句子结束之后的位置,无需参与相似度的计算,否则影响Softmax的计算结果。

自注意力机制
自注意力机制是Transformer的核心思想,它允许模型在处理序列数据时关注到不同位置的信息。具体来说,自注意力机制通过计算序列中每个位置与其他位置之间的相关性,得到一个注意力权重分布,从而实现对不同位置信息的关注。

编码器-解码器结构
Transformer采用了编码器-解码器结构,其中编码器负责将输入序列转换为一系列向量表示,而解码器则根据这些向量表示生成输出序列。这种结构使得Transformer能够处理变长序列数据,并且具有更好的泛化能力。

残差连接与标准化
为了解决深度网络中的梯度消失和梯度爆炸问题,Transformer引入了残差连接和标准化技术。残差连接允许网络直接学习残差函数,从而减轻梯度消失的问题;而标准化则通过对数据进行规范化处理,使得网络更加稳定且易于训练。
在这里插入图片描述

1.4代码

https://tensorflow.google.cn/tutorials/text/transformer?hl=zh-cn
https://huggingface.co/docs/transformers/index

2、Transformer 的3种架构:Encoder-only、Decoder-only、encode-decode

Transformer encoder(属于自编吗模型),Transformer decoder(属于自回归模型),Transformer Encoder-Decoder(seq2seq模型)。

自回归(Autoregressive,简称AR)、自编码(Autoencoder,简称AE)、seq2seq模型
Transformer encoder(属于AE模型),Transformer decoder(属于AR模型),Transformer Encoder-Decoder(seq2seq模型)。

huggingface官方教程:https://transformers.run/
在这里插入图片描述
Transformer encoder(属于自编吗模型),Transformer decoder(属于自回归模型),Transformer Encoder-Decoder(seq2seq模型)。

LLM之所以主要都用Decoder-only架构,除了训练效率和工程实现上的优势外,在理论上是因为Encoder的双向注意力会存在低秩问题,这可能会削弱模型表达能力,就生成任务而言,引入双向注意力并无实质好处。而Encoder-Decoder架构之所以能够在某些场景下表现更好,大概只是因为它多了一倍参数。所以,在同等参数量、同等推理成本下,Decoder-only架构就是最优选择了。

由于encoder-only类型的LLM不像decoder-only和encoder-decoder那些有自回归autoregressive,encoder-only集中于理解输入的内容,并做针对特定任务的输出自回归指输出的内容是根据已生成的token做上下文理解后一个token一个token输出的。总的来说,encoder-only类型的更擅长做分类;encoder-decoder类型的擅长输出强烈依赖输入的,比如翻译和文本总结,而其他类型的就用decoder-only,如各种Q&A。虽然encoder-only没有decoder-only类型的流行,但也经常用于模型预训练。Decoder主要是是为了预测下一个输出的内容/token是什么,并把之前输出的内容/token作为上下文学习。

在这里插入图片描述

自回归、自编码、sqe2sqe

自回归(Autoregressive,简称AR)、自编码(Autoencoder,简称AE)、seq2seq模型
Transformer encoder(属于AE模型),Transformer decoder(属于AR模型),Transformer Encoder-Decoder(seq2seq模型)。

对比
自编码语言模型的优缺点:
优点:自然地融入双向语言模型,同时看到被预测单词的上文和下文
缺点:训练和预测不一致。训练的时候输入引入了[Mask]标记,但是在预测阶段往往没有这个[Mask]标记,导致预训练阶段和Fine-tuning阶段不一致。
自回归语言模型的优点和缺点:
优点:对于生成类的NLP任务,比如文本摘要,机器翻译等,从左向右的生成内容,天然和自回归语言模型契合。
缺点:由于一般是从左到右(当然也可能从右到左),所以只能利用上文或者下文的信息,不能同时利用上文和下文的信息。https://github.com/datawhalechina/learn-nlp-with-transformers/blob/main

Autoregressive自回归模型:
自回归模型是一类机器学习(ML)模型,通过对序列中先前的输入进行测量来自动预测序列中的下一个分量。自回归是一种用于时间序列分析的统计技术,它假设时间序列的当前值是其过去值的函数。自回归模型使用类似的数学技术来确定序列中元素之间的概率相关性。然后,它们使用所得知识来猜测未知序列中的下一个元素。例如,在训练期间,自回归模型处理了几个英语句子,并确定单词“is”始终跟在“there”一词之后。 然后,它会生成一个“there is”连在一起的新序列。
自回归模型的目标是对序列数据进行建模,其中模型生成输出序列的每个元素时都依赖于先前生成的元素。AR模型从一系列time steps中学习,并将上一步的结果作为回归模型的输入,以预测下一个time step的值。大家通常讲的语言模型其实是根据上文内容预测下一个可能跟随的单词,就是常说的自左向右的语言模型任务,或者反过来也行,就是根据下文预测前面的单词,这种类型的LM被称为自回归语言模型。GPT 就是典型的自回归语言模型。
自回归语言模型有优点有缺点:
缺点:是只能利用上文或者下文的信息,不能同时利用上文和下文的信息,当然,貌似ELMO这种双向都做,然后拼接看上去能够解决这个问题,因为融合模式过于简单,所以效果其实并不是太好。
优点:生成类NLP任务有优势,比如生成类NLP任务有优势,比如文本摘要,机器翻译等。

Autoencoder自编码模型:
自动编码器是一种无监督的神经网络模型,它可以学习到输入数据的隐含特征,这称为编码(coding),同时用学习到的新特征可以重构出原始输入数据,称之为解码(decoding)。
重建原始数据。把input encode到一个hidden state再通过试图重构input的方式去学习如何得到一个更优的hidden state。自编码的目标是学习输入数据的紧凑表示,也称为编码(encoding)。它包括一个编码器(将输入映射到编码表示)和一个解码器(将编码表示映射回输入空间)。BERT一直都是很先进的预训练方法,它可以利用双向上下文信息,对原始输入进行重建(恢复)。

Seq2seq:
把一个sequence 映射到另一个sequence的模型都叫seq2seq模型。通常有encoder-decoder结构(encoder-decoder,transformer等),但也不一定(GPT也能做seq2seq)。对应的典型任务比如对话,翻译等。Seq2Seq其实就是Encoder-Decoder结构的网络,它的输入是一个序列,输出也是一个序列。在Encoder中,将序列转换成一个固定长度的向量,然后通过Decoder将该向量转换成我们想要的序列输出出来。

自回归语言模型 VS 自编码语言模型:

  1. 两种模型的优缺点对比
    自回归语言模型没能自然的同时获取单词的上下文信息(ELMo把两个方向的LSTM做concat是一个很好的尝试,但是效果并不是太好),而自编码语言模型能很自然的把上下文信息融合到模型中(Bert中的每个Transformer都能看到整句话的所有单词,等价于双向语言模型),但自编码语言模型也有其缺点,就是在Fine-tune阶段,模型是看不到[mask]标记的,所以这就会带来一定的误差。XLNet将二者的上述优缺点做了一个完美的结合,在自回归语言模型中自然地引入上下文信息,并且解决自编码语言模型两阶段保持一致的问题。
  2. XLNet是怎么做的
    XLNet的思路采用的是自回归语言模型,根据上文来预测下一个单词,但是在上文中添加了下文信息,这样就既解决了[mask]带来的两阶段不一致问题和无法同时引入上下文信息的问题。改进之后,取了个新名字:Permutation Language Model。举个例子:输入句子为x1->x2->x3->x4,假设我们要预测的单词是x3,那我们需要在x3的上文x1和x2的位置看到x4的信息,这样才能解决同时引入上下文的问题。那就可以这么做了:随机排列组合x1、x2、x3、x4的顺序,并从中随机选择一部分作为新的句子输入。比如选择了x2->x4->x3->x1,那这个时候预测x3的时候是不是就能看到上文x2和下文x4的信息了呢,这就是XLNet的基本思路。就是通过排列组合的方式将一部分下文单词放到上文单词的位置,但实际形式还是一个从左到右预测的自回归语言模型。
    参考:https://zhuanlan.zhihu.com/p/163455527

sqe2sqe

https://blog.csdn.net/sunhua93/article/details/102764783
在这里插入图片描述

attention矩阵

attention矩阵:https://www.zhihu.com/question/588325646/answer/3073802666
sequence mask 是为了使得 decoder 不能看见未来的信息。也就是对于一个序列,在 time_step 为 t 的时刻,我们的解码输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。因此我们需要想一个办法,把 t 之后的信息给隐藏起来。
那么具体怎么做呢?也很简单:产生一个上三角矩阵,上三角的值全为0。把这个矩阵作用在每一个序列上,就可以达到我们的目的。

3、Bert

原理:https://blog.csdn.net/sunhua93/article/details/102764783
https://github.com/datawhalechina/learn-nlp-with-transformers/tree/main

BERT是一个预训练的Transformer模型,它在大量的文本数据上进行了预训练,并在多种NLP任务上取得了显著的成果。预训练是指在大量数据上先训练一个通用的模型,然后在特定任务上进行微调的过程。预训练模型可以在特定任务上获得更好的性能,并且可以在不同的任务之间共享知识。这种方法比从头开始训练每个任务的模型更高效和经济。

1、BERT与Transformer的区别:

  • BERT模型是Transformer的一种变体,采用了双向编码器结构,而传统的Transformer模型通常使用编码器-解码器结构。BERT模型的预训练过程也与传统的Transformer模型略有不同,采用了Masked Language Modeling和下一句预测任务。
  • BERT模型主要用于预训练阶段,目标是学习通用的语义表示,而Transformer模型则更加灵活,可用于各种序列转换任务,如机器翻译、文本分类、命名实体识别等。
    在这里插入图片描述
    BERT双向表示和transformer区别:
    transformer的encoding部分没有mask,而Bert的encoding输入部分是有mask的。首先我们指导BERT的预训练模型中,预训练任务是一个mask LM ,通过随机的把句子中的单词替换成mask标签, 然后对单词进行预测。这里注意到,对于模型,输入的是一个被挖了空的句子, 而由于Transformer的特性, 它是会注意到所有的单词的,这就导致模型会根据挖空的上下文来进行预测, 这就实现了双向表示, 说明BERT是一个双向的语言模型。
    为了实现深度的双向表示,使得双向的作用让每个单词能够在多层上下文中间接的看到自己。文中就采用了一种简单的策略,也就是MLM。MLM:随机屏蔽掉部分输入token,然后再去预测这些被屏蔽掉的token。

2、Model(MLM)和Next Sentence Prediction(NSP)。

在MLM任务中,BERT将15%的词替换为[MASK]标记,并让模型学习预测这些被掩码的词。这有助于模型理解上下文并捕捉词之间的关系。
NSP任务则是让模型判断两句话是否属于同一个句子。这个任务可以帮助模型理解句子之间的连贯性和逻辑关系。
在微调阶段,BERT可以应用于各种NLP任务,如文本分类、命名实体识别、问答等。只需要对模型进行少量的有监督数据训练,即可在特定任务上取得较好的性能。

1.Masked Language Model
MLM可以理解为完形填空,作者会随机mask每一个句子中15%的词,用其上下文来做预测,例如:my dog is hairy → my dog is [MASK]
此处将hairy进行了mask处理,然后采用非监督学习的方法预测mask位置的词是什么,但是该方法有一个问题,因为是mask15%的词,其数量已经很高了,这样就会导致某些词在fine-tuning阶段从未见过,为了解决这个问题,作者做了如下的处理:

80%的时间是采用[mask],my dog is hairy → my dog is [MASK]
10%的时间是随机取一个词来代替mask的词,my dog is hairy -> my dog is apple
10%的时间保持不变,my dog is hairy -> my dog is hairy

那么为啥要以一定的概率使用随机词呢?这是因为transformer要保持对每个输入token分布式的表征,否则Transformer很可能会记住这个[MASK]就是"hairy"。至于使用随机词带来的负面影响,文章中解释说,所有其他的token(即非"hairy"的token)共享15%*10% = 1.5%的概率,其影响是可以忽略不计的。Transformer全局的可视,又增加了信息的获取,但是不让模型获取全量信息。

2.Next Sentence Prediction (NSP)
在 BERT 的训练过程中,模型接收成对的句子作为输入,并且预测其中第二个句子是否在原始文档中也是后续句子。在训练期间,50% 的输入对在原始文档中是前后关系,另外 50% 中是从语料库中随机组成的,并且是与第一句断开的。

3、BERT:pre-training 和 fine-tuning预训练微调

参考:https://www.cnblogs.com/justLittleStar/p/17322240.html
BERT:分为pre-training 和 fine-tuning,两个阶段。
pre-training 阶段,BERT 在无标记的数据上进行无监督学习
fine-tuning 阶段,BERT利用预训练的参数初始化模型,并利用下游任务标记好的数据进行有监督学习,并对所有参数进行微调。

自编码语言模型的优缺点:
优点:自然地融入双向语言模型,同时看到被预测单词的上文和下文
缺点:训练和预测不一致。训练的时候输入引入了[Mask]标记,但是在预测阶段往往没有这个[Mask]标记,导致预训练阶段和Fine-tuning阶段不一致。https://github.com/datawhalechina/learn-nlp-with-transformers/blob/main

  • BERT采用Pre-training和Fine-tuning两阶段训练任务(源于GPT):
    1)在Pre-training阶段使用多层双向Transformer Encoder进行训练,并采用Masked LM 和 Next Sentence Prediction两种训练任务解决 token-level 和 sentence-level 的问题,为下游任务提供了一个通用的模型框架;
    2)在 Fine-tuning 阶段会针对具体 NLP 任务进行微调以适应不同种类的任务需求,并通过端到端的训练更新参数从而得到最终的模型。

  • BERT优点:
    BERT的Transformer Encoder的Self-Attention结构能较好地建模上下文,而且在经过在语料上预训练后,能获取到输入文本较优质的语义表征。
    BERT的MLP和NSP联合训练,让其能适配下游多任务(Token级别和句子级别)的迁移学习

  • BERT缺点:
    [MASK] token在推理时不会出现,因此训练时用过多的[MASK]会影响模型表现(需要让下游任务去适配预训练语言模型,而不是让预训练语言模型主动针对下游任务做优化)
    每个batch只有15%的token被预测,所以BERT收敛得比left-to-right模型要慢(BERT对语料的利用低。而GPT对语料的利用率更高,它几乎能利用句子的每个token);
    BERT的上下文长度固定为512,输入过长需要阶段(对长文本不友好)

4、Bert的输入

在这里插入图片描述
输入数据表示
在把数据喂给BERT之前,我们通过下面三个嵌入层将输入转换为嵌入向量:
标记嵌入(Token embedding)
片段嵌入(Segment embedding)
位置嵌入(Position embedding)

片段嵌入(Segment embedding):
注意[CLS]标记只加在第一个句子前面,而[SEP]标记加到每个句子末尾。
[CLS]标记用于分类任务,而[SEP]标记用于表示每个句子的结尾。
现在,在把所有的标记喂给BERT之前,我们使用一个叫作标记嵌入的嵌入层转换这些标记为嵌入向量。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、XLNet和bert

XLNet在自回归语言模型中,通过PLM引入了双向语言模型。也就是在预训练阶段,采用attention掩码的机制,通过对句子中单词的排列组合,把一部分下文单词排到上文位置。
PLM预训练目标、更多更高质量的预训练数据,transformerXL的主要思想。这就是XLNet的三个主要改进点,这使XLNet相比bert在生成类任务上有明显优势,对于长文档输入的nlp任务也会更有优势。
XLNet的实验可以看出,对于阅读理解类任务相对bert有极大提升,transformerXL的引入肯定是起了较大的作用,但由于数据差异没有抹平,所以无法确定是否是模型差异带来的效果差异。对于其他的nlp任务,效果有幅度不大的提升,同样无法确定这种性能提升来自于那个因素。其中磨平了数据规模因素的实验,可以发现,PLM和transformerXL确实带来了收益。XLNet在长文档和生成类任务比较有优势,在优势领域的应用结果值得期待,以及在这些任务上的进一步改进模型。

LNet 是一种大型双向 transformer,采用的是一种经过改进的训练方法。这种训练方法能够利用规模更大的数据集与更强的计算能力在 20 项语言任务中获得优于 BERT 的预测指标。为了改进训练方法,XLNet 还引入了转换语言建模,其中所有标记都按照随机顺序进行预测。这就与 BERT 的掩蔽语言模型形成了鲜明对比。具体来讲,BERT 只预测文本中的掩蔽部分(占比仅为 15%)。这种方法也颠覆了传统语言模型当中,所有标记皆按顺序进行预测的惯例。新的方法帮助模型掌握了双向关系,从而更好地处理单词之间的关联与衔接方式。此外该方法还采用 Transformer XL 作为基础架构,以便在非排序训练场景下同样带来良好的性能表现。

6、transformer和bert应用场景

Bert主要用于各种自然语言处理任务,如文本分类、命名实体识别、问答系统等,而Transformer主要用于序列到序列的任务,如机器翻译、语音识别等。

7、代码

https://github.com/datawhalechina/learn-nlp-with-transformers/tree/main
https://github.com/google-research/bert
https://huggingface.co/docs/transformers/en/model_doc/bert
https://www.tensorflow.org/text/tutorials/classify_text_with_bert

4、GPT

https://zhuanlan.zhihu.com/p/403469926
在这里插入图片描述
GPT系列【GPT、GPT1、GPT2、GPT3、InstructGPT(GPT3.5)、chatgpt、GPT4】来自openai

1.训练微调

GPT 的训练过程分为两个阶段:无监督Pre-training 和 有监督Fine-tuning。在Pre-training阶段使用单向 Transformer 学习一个语言模型,对句子进行无监督的 Embedding,在fine-tuning阶段,根据具体任务对 Transformer 的参数进行微调,目的是在于学习一种通用的 Representation 方法,针对不同种类的任务只需略作修改便能适应。
在这里插入图片描述

2.模型结构

GPT 使用 Transformer 的 Decoder 结构,并对 Transformer Decoder 进行了一些改动,原本的 Decoder 包含了两个 Multi-Head Attention 结构,GPT 只保留了 Mask Multi-Head Attention,如下图所示。
在这里插入图片描述
GPT 使用句子序列预测下一个单词,因此要采用 Mask Multi-Head Attention 对单词的下文遮挡,防止信息泄露。例如给定一个句子包含4个单词 [A, B, C, D],GPT 需要利用 A 预测 B,利用 [A, B] 预测 C,利用 [A, B, C] 预测 D。如果利用A 预测B的时候,需要将 [B, C, D] Mask 起来。
Mask 操作是在 Self-Attention 进行 Softmax 之前进行的,具体做法是将要 Mask 的位置用一个无穷小的数替换 -inf,然后再 Softmax,如下图所示。
在这里插入图片描述
Softmax 之前需要 Mask,GPT Softmax可以看到,经过 Mask 和 Softmax 之后,当 GPT 根据单词 A 预测单词 B 时,只能使用单词 A 的信息,根据 [A, B] 预测单词 C 时只能使用单词 A, B 的信息。这样就可以防止信息泄露。

3、GPT系列对比

https://zhuanlan.zhihu.com/p/609716668
https://zhuanlan.zhihu.com/p/620494604
https://blog.csdn.net/weixin_43646592/article/details/129064311

1~3微调方法:

fine-tuning:预训练 + 训练样本计算loss更新梯度,然后预测。会更新模型参数
zero-shot:预训练 + task description + prompt,直接预测。不更新模型参数
one-shot:预训练 + task description + example + prompt,预测。不更新模型参数
few-shot(又称为in-context learning):预训练 + task description + examples + prompt,预测。不更新模型参数

Zero-shot:仅使用当前任务的自然语言描述,不进行任何梯度更新; 
One-shot:当前任务的自然语言描述,加上一个简单的输入输出样例,不进行任何梯度更新; 
Few-shot:当前任务的自然语言描述,加上几个简单的输入输出样例,不进行任何梯度更新;

1.GPT
GPT基于transformer的decoder结构,原transformer的decoder包含2个attention:cross-attention(k,v来自encoder,q来自decoder),mask multi-head attention。gpt只用了mask multi-head attention。范式:预训练 + finetune

2.GPT2
GPT-2 相比于 GPT-1 有如下几点区别:

  1. 主推 zero-shot,而 GPT-1 为 pre-train + fine-tuning;
  2. 训练数据规模更大,GPT-2 为 800w 文档 40G,GPT-1 为 5GB;
  3. 模型大小,GPT-2 最大 15 亿参数,GPT-1为 1 亿参数;
  4. 模型结构调整,层归一化和参数初始化方式;
  5. 训练参数,batch_size 从 64 增加到 512,上文窗口大小从 512 增加到 1024,等等;

3.GPT3
GPT-3 相比于 GPT-2 有如下几点区别:

  1. 效果上,超出 GPT-2 非常多,能生成人类难以区分的新闻文章;
  2. 主推 few-shot,相比于 GPT-2 的 zero-shot,具有很强的创新性;
  3. 模型结构略微变化,采用 sparse attention 模块;
  4. 海量训练语料 45TB(清洗后 570GB),相比于 GPT-2 的 40GB;
  5. 海量模型参数,最大模型为 1750 亿,GPT-2 最大为 15 亿参数;

4.GPT3.5 (Instruct GPT)
InstructGPT采用基于人类反馈的强化学习(RLHF)来不断微调预训练语言模型(LLM),旨在让模型能够更好地理解人类的命令和指令含义,如生成小作文、回答知识问题和进行头脑风暴等。该方法不仅让模型学会判断哪些答案是优质的,而且可以确保生成的答案富含信息、内容丰富、对用户有帮助、无害和不包含歧视信息等多种标准。因此,RLHF是一种有效的方法,可以帮助LLM不断提升性能和适应各种用户需求。
关于 InstructGPT 的技术方案,原文分为了三个步骤:有监督微调,奖励模型训练,强化学习训练;实际上可以把它拆分成两种技术方案,一个是有监督微调(SFT),一个是基于人类反馈的强化学习(RLHF),下面我们简单介绍下。

5.ChatGPT
ChatGPT 是基于 GPT3.5 的基础模型框架,核心变化在于通过真实的调用数据以及人类反馈的强化学习进行训练。ChatGPT3.5 主要用于自然语言处理、机器翻译等任务,而 ChatGPT3.5-Turbo 拥有更强大的强度,可用于更复杂的语言分析,比如情感分析、语法结构分析。所以,ChatGPT 和 GPT3.5 是同一系列的产品,但 ChatGPT 是在 GPT3.5 的基础上进行了改进和优化。

6.GPT4 大语言模型
GPT-4(第 4 代生成式预训练变换模型 Generative Pre-trained Transformer 4)是一个大型多模态模型,能够接受图像和文本输入,并输出文本。GPT4 依旧采用 Transformer 模型结构,具有处理图片的能力,模型结构不再是 Decoder-only,而是具有 Encoder 完成图像的编码。

4、代码

https://github.com/datawhalechina/learn-nlp-with-transformers/tree/main
https://huggingface.co/docs/transformers/en/model_doc/gpt2
https://paperswithcode.com/paper/language-models-are-few-shot-learners

5、T5

https://zhuanlan.zhihu.com/p/589869911
http://121.199.45.168:13013/5_4.html

T5模型的内部基本采用了Transformer的结构, 但是核心思想在于将所有的NLP任务"大一统到seq2seq架构"中. 也就是说, 在T5模型中作者进行了多种优化方案的尝试, 各种对比实验, 消融实验, 得到一个最优的框架.T5本身没有什么算法上的亮点, 也没有模型结构上的巨大创新, 它最重要的作用是为NLP预训练模型提供了一个通用的框架, 为解决方案提供了一种通用思路, 那就是"万物皆可seq2seq"!

T5(Text-to-Text Transfer Transformer)模型将翻译、分类、回归、摘要生成等任务都统一转成Text-to-Text任务,从而使得这些任务在训练(pre-train和fine-tune)时能够使用相同的目标函数,在测试时也能使用相同的解码过程。就是把所有任务,如分类、相似度计算、文本生成都用一个Text-to-text(文本到文本)的框架里进行解决。

它最重要作用是给整个 NLP 预训练模型领域提供了一个通用框架,把所有任务都转化成一种形式,之后未来做 NLP 实验时,可能就不再是自己怎么调一些模型了,而是无论什么任务,直接拿来一个超大预训练模型,然后主要工作就变成了怎么把任务转换成合适的文本输入输出,于是我们就成了带引号的”数据科学家“。而且可以用于多种任务,而模型对这些任务的区分只是根据你构建的输入输出形式,

结构

在这里插入图片描述
T5模型和原始的Transformer结构基本一致,除了做了如下几点改动:
remove the Layer Norm bias
place the Layer Normalization outside the residual path
use a different position embedding

主要有以下几点不同:
删除了LayerNorm中的bias
将LayerNorm操作放在了残差连接后面
使用了一种相对位置编码的方案
在预训练阶段去掉了dropout,只有微调的时候使用dropout

预训练策

如图所示为Transformer结构的几种变种,主要区别在于模型中self-attention机制的可见范围。
在这里插入图片描述

fully-visible attention mask:输出序列的每个元素可以看见输入序列的每个元素。
causal attention mask:输出序列的每个元素只能看对应位置及之前的输入序列的元素,无法看见未来的元素。
causal with prefix attention mask:输入序列的一部分前缀采用fully-visible attention mask,其余部分采用 causal attention mask。
  • 在最左侧的Encoder-Decoder结构中,Encoder部分采用fully-visible attention mask,而Decoder部分采用causal attention mask。

  • 中间的Language model结构中,采用causal attention mask。

  • 最右侧的Prefix LM结构中,采用causal with prefix attention mask。比如在翻译任务中,给定训练样本translate English to German: That is good. target: Das ist gut.,我们对translate English to German: That is good. target:采用fully-visible attention mask,对Das ist gut.采用causal attention mask。
    经过作者大量的对比实验后, 发现第1种Encoder-Decoder架构效果最优, 因此T5模型中采用了第1种架构.

其实上图中所展示的3种架构策略, 本质上内部结构都是基于Transformer, 只是MASK机制不同:
在这里插入图片描述
T5文本MASK策略的选择
这里面有宏观角度和微观角度两方面:
宏观角度: 可以理解为自监督训练方法, 总共有3种策略可选.
1: GPT-style, 生成式语言模型的方式, 类似于GPT2, 从左到右预测.
2: BERT-style, MLM的方式, 类似于BERT将token遮掩掉, 然后再还原出来.
3: Deshuffling-style, 将文本顺序打乱, 然后再还原出来.
微观角度: 可以理解为具体对什么粒度的文本进行MASK操作, 总共有3种策略可选.
1: token mask法, 即直接将单个token替换成[MASK].
2: replace span法, 可以将相邻的若干个token合并成一个[MASK].
3: drop法, 没有替换操作, 直接将随选定的token删除掉.
经过T5作者大量的试验, 发现宏观监督的BERT-style最好, 微观角度的replace span最好, 因此在T5模型中共同采用这两种策略.

预训练过程

1.输入输出格式
我们来看如何将各种下游NLP任务都统一转化成Text-to-Text格式。在下游任务上fine-tune模型时,为了告诉模型当前要做何种任务,我们会给每条输入样本加一个与具体任务相关的前缀。
翻译前缀translate English to German:
分类前缀cola sentence:
摘要前缀summarize

2.Baseline网络结构
作者首先设置了一个baseline模型,然后每次修改模型设置一个方面,采用控制变量法进行对比实验。不同于BERT或GPT仅使用Transformer结构的一部分,T5的baseline模型直接采用标准的Transformer encoder-decoder结构,以便在生成任务和分类任务上都能取得不错的效果。 具体来说,baseline模型结构的encoder部分和BERT-base模型(12层)的大小一样,而decoder部分和encoder大小相似,因此baseline模型的参数量基本是BERT-base模型的2倍。 作者:深度之眼官方账号 https://www.bilibili.com/read/cv22768750/ 出处:bilibili

3.预训练
之后是对预训练目标的大范围探索,具体做了哪些实验,下面这张图就能一目了然
在这里插入图片描述
总共从四个层面来进行比较:

第一个方面,高层次方法(自监督的预训练方法)对比,总共三种方法:
语言模型式,就是 GPT-2 那种方式,从左到右预测
BERT-style式,就是像BERT一样将一部分给破坏掉,然后还原出来,其效果最好
Deshuffling(顺序还原)式,就是将文本打乱,然后还原出来

第二方面,对文本一部分进行破坏时的策略,也分三种方法:
Mask法,如现在大多模型的做法,将被破坏token换成特殊符如[M]Replace span法,可以当作是把上面 Mask 法中相邻 [M] 都合成了一个特殊符,每一小段替换一个特殊符,提高计算效率,其效果最好Drop法,没有替换操作,直接随机丢弃一些字符

第三方面,对文本进行多大程度的破坏,挑了 4 个值:10%,15%,25%,50%,最后发现 BERT 的 15%效果最好

第四方面,Replace Span需要决定对大概多长的小段进行破坏,于是对不同长度进行探索:2,3,5,10这四个值,最后发现3效果最好
链接:https://www.jianshu.com/p/627d4643f7a7

通过对各种对比实验的结果进行分析,作者最终确定了训练T5模型的较优方案,其中以下几点值得注意:
无监督训练目标:采用span-corruption目标,类似SpanBERT的做法。
预训练策略:采用multi-task预训练方式(即无监督任务和有监督任务一起预训练),在对比迁移方法一小节中我们发现Multi-task pretraining + fine-tuning的效果和Unsupervised pre-training + fine-tuning的效果差不多,但是前者在预训练过程还能够监控下游任务的性能,因此作者最后采用Multi-task pre-training。 作者:深度之眼官方账号 https://www.bilibili.com/read/cv22768750/ 出处:bilibili

应用场景

在过去的几年中,随着深度学习技术的发展,NLP领域取得了突破性进展。在众多的NLP模型中,T5模型作为一种强大的语言生成模型,在自然摘要、机器翻译、智能问答和文本分类等任务中表现出色,成为了该领域的研究热点之一。

代码

https://github.com/google-research/text-to-text-transfer-transformer
https://huggingface.co/docs/transformers/en/model_doc/t5

6、LLM主流框架:Causal Decoder、Prefix Decoder和Encoder-Decoder

https://blog.csdn.net/TFATS/article/details/135548188
https://www.53ai.com/news/qianyanjishu/1601.html
大模型主要架构分为三种::prefix Decoder 系、causal Decoder 系、Encoder-Decoder。
在这里插入图片描述本质上内部结构都是基于Transformer, 只是MASK机制不同

1.transformer中的mask机制
Padding mask(填充掩码)
Padding mask(填充掩码):在自注意力机制中,句子中的所有单词都会参与计算。但是,在实际的句子中,往往会存在填充符(比如-1),用来填充句子长度不够的情况。Padding mask就是将这些填充符对应的位置标记为0,以便在计算中将这些位置的单词忽略掉。
Sequence mask(序列掩码)
sequence mask用于在Decoder端的self-attention中,以保证在生成序列时不会将未来的信息泄露给当前位置的单词。例如,假设我们要生成一个长度为5的序列。在第i个位置上生成的单词,需要将前i-1个单词作为输入,但是不能将第i个位置以后的单词作为输入。这就需要使用sequence mask将第i个位置以后的单词掩盖掉。具体而言,sequence mask会将第i个位置以后的所有位置标记为0,表示在计算中需要忽略这些位置的信息。

2.Causal Decoder
Causal LM是因果语言模型,目前流行的大多数模型都是这种结构,别无他因,因为GPT系列模型内部结构就是它,还有开源界的LLaMa也是。Causal Decoder架构的典型代表就是GPT系列模型,**使用的是单向注意力掩码,**以确保每个输入token只能注意到过去的token和它本身,输入和输出的token通过Decoder以相同的方式进行处理。在下图中,灰色代表对应的两个token互相之间看不到,否则就代表可以看到。例如,”Survery”可以看到前面的“A”,但是看不到后面的“of”。Causal Decoder的sequence mask矩阵是一种典型的下三角矩阵。
在这里插入图片描述
注意力机制方式:从左到右的单向注意力
特点:自回归语言模型,预训练和下游应用是完全一致的,严格遵守只有后面的token才能看到前面的 token的规则
适用任务:文本生成任务效果好
优点:训练效率高,zero-shot 能力更强,具有涌现能力
代表模型:LLaMA-7B、LLaMa 衍生物

3.Prefix Decoder
Prefix LM,即前缀语言模型,Prefix Decoder架构也被称为non-causal Decoder架构,该结构是Google的T5模型论文起的名字。
(1) 在标准的Encoder-Decoder模型中,Encoder和Decoder各自使用一个独立的Transformer
( 2) 而在Prefix LM,Encoder和Decoder则共享了同一个Transformer结构,在Transformer内部通过Attention Mask机制来实现。Prefix LM是输入部分采用双向注意力,而输出部分采用单向注意力;和Encoder-Decoder不同的是,处理输入和输出的模型参数是完全共享的,从这一点看,它又和causal Decoder比较接近,都属于Decoder-Only架构:
在这里插入图片描述
注意力机制方式:输入双向注意力,输出单向注意力
特点:prefix部分的token互相能看到,属于causal Decoder 和 Encoder-Decoder 折中
代表模型:ChatGLM、ChatGLM2、U-PaLM
缺点:训练效率低

4.Encoder Decoder
Transformer最初被提出来的时候采用的就是Encoder-Decoder架构,模型包含两部分Encoder和Decoder,两部分参数独立。其中Encoder将输入序列处理为一种中间表示,而Decoder则基于中间表示自回归地生成目标序列,典型的LLM是Flan-T5。Encoder部分采用双向注意力,对应的prompt的每个token都可以互相看到;而Decoder部分仍然采用单向注意力,对应的completion仍然保证前面的token看不到后面的token:
在这里插入图片描述
在这里插入图片描述

注意力机制方式:输入双向注意力,输出单向注意力
特点:在输入上采用双向注意力,对问题的编码理解更充分
适用任务:在偏理解的 NLP 任务上效果好
缺点:在长文本生成任务上效果差,训练效率低
代表模型:T5、Flan-T5、BART

在这里插入图片描述
在这里插入图片描述
Prefix LM vs Causal LM
prefixLM前缀语言模型
在处理多轮对话的过程中,设有3轮对话,Q1A1,Q2A2,Q3A3,PrefixLM需要构建三条样本:
而这种数据构建方式带来了严重的数据膨胀问题,影响模型训练的效率。
Q1->A1
Q1A1Q2->A2
Q1A1Q2A2Q3->A3

Causal LM是因果语言模型,目前流行的大多数模型都是这种结构,别无他因,因为GPT系列模型内部结构就是它,还有开源界的LLaMa也是。
decoder-only LM
相反,Decoder-Only模型则可以利用Causal Mask的特性(每一个Token可以看到前面所有Token的真实输入),在一条样本中实现多轮对话:
样本构建:Q1 A1 Q2 A2 Q3 A3
Loss计算:只需要计算 A1 A2 和 A3 部分

Transformer是一种广泛应用于图像处理领域的模型,它在一些重要的视觉任务上取得了显著的成果。其中,一些主要的应用包括: 1. 图像检测和分割:DETR是一种使用了卷积神经网络和Transformer的简单而灵活的检测和分割方法。这种方法在目标检测和语义分割任务上取得了非常好的性能。 2. 图像分类:Vision Transformer(ViT)是一种只使用Transformer的图像分类方法,它取得了当前最先进的结果,并且减少了训练计算资源的消耗。ViT将图像拆分为小块,并通过线性嵌入序列作为Transformer的输入。 3. 像素级图像补全:Image GPT是一种使用Transformer进行像素级图像补全的方法。它可以根据图像的上下文信息预测缺失的像素,从而实现图像的修复和完整。 4. 车道标记检测:使用Transformer的端到端车道形状预测方法,可以根据图像中的车道线信息预测车道的形状和位置。这种方法在自动驾驶和智能交通领域具有重要的应用。 总之,Transformer在图像处理领域的应用非常广泛,包括图像检测、分割、分类、图像补全和车道标记检测等任务。它通过将图像信息进行有效的编码和处理,取得了令人瞩目的成果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【Transformer】一文搞懂Transformer | CV领域中Transformer应用](https://blog.csdn.net/qq_41094058/article/details/120463774)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值