Transformer及其子孙后代

82 篇文章 10 订阅

三大灵魂模型

Transformer

attention is all you need,现在已经是money is all you need时代了(x

首先介绍自注意力机制

Atention ⁡ ( Q , K , V ) = softmax ⁡ ( Q K T d k ) V \operatorname{Atention}(Q,K,V)=\operatorname{softmax}(\dfrac{QK^T}{\sqrt{d_k}})V Atention(Q,K,V)=softmax(dk QKT)V

q,k和v都是原输入x通过变换矩阵得到的

q和k相乘得到系数矩阵,用softmax进行归一化,再乘v得到加权后的表示,这就是自注意力做的事情
在这里插入图片描述

过程如图:

在这里插入图片描述

模型图
在这里插入图片描述
encoder与decoder,有三个多头注意力,decoder下面那个多头注意力进行了mask,因为不能让前面的token直接看到后面token的信息,会造成泄露
在这里插入图片描述

位置编码(绝对位置):

P E ( p o s , 2 i ) = s i n ( p o s / 1000 0 2 i / d model ) P E ( p o s , 2 i + 1 ) = c o s ( p o s / 1000 0 2 i / d model ) \begin{array}{c}PE_{(pos,2i)}=sin(pos/10000^{2i/d_{\text{model}}})\\ PE_{(pos,2i+1)}=cos(pos/10000^{2i/d_{\text{model}})}\\ \end{array} PE(pos,2i)=sin(pos/100002i/dmodel)PE(pos,2i+1)=cos(pos/100002i/dmodel)

复杂度
在这里插入图片描述

BERT

把encoder拿出来叠起来,用三个embedding相加作为word embedding,至于为什么可以直接相加,没有理论解释,问就是玄学,想怎么扯可以自由发挥

在这里插入图片描述

BERT使用Next Sentence Prediction,NSP和 Masked Language Model,MLM
把token mask掉让模型完形填空是BERT的灵魂,使模型拥有强大的语言能力

在使用BERT进行下游任务时,通常需要在BERT模型的基础上添加一个适当的输出层,以适应特定的任务。此外,由于BERT模型非常大,需要大量的计算资源来训练和部署。因此,在实际应用中,人们通常会使用预训练好的BERT模型,并在此基础上微调(fine-tune)模型以适应特定任务的需求

GPT GPT-2 GPT-3

GPT比BERT出现的时间更早,但是由于前两代的效果没有BERT那么惊艳,其热度一直远低于BERT,但是GPT-3 带着175B的模型参数来到战场后,一举把群雄都斩于马下,由此开启了AI军备竞赛时代,各顶级机构争相推出自己的大模型,目前效果最好的PaLM540B和最近2023年二月meta刚刚发布的最新开源大模型LLaMA用65B的参数打败了GPT-3,期待一下GPT-4的惊人表现,同时也有失败的例子,meta的OPT 175B和huggingface的BLOOM 176B,为什么失败,可以看看OneFlow写的 GPT-3/ChatGPT复现的经验教训

2022年李沐老师说GPT影响力不如BERT,是因为OpenAI选择去解决更大的问题,然后2022年底发布的ChatGPT爆火,一举改变NLP范式,引发新一轮AI狂热,无数研究机构跟进,给AI带来了史无前例的影响力

Improving Language Understanding by Generative Pre-Training
GPT(Generative Pre-trained Transformer)是一种基于Transformer架构的自然语言生成模型,由OpenAI于2018年推出
GPT模型采用了单向的预训练方式(自回归 ,AutoRegressive),即只考虑前文的信息,通过对给定文本前面的词汇进行预测,来训练模型生成接下来的词汇

无监督预训练,优化一个标准语言模型的函数:

L 1 ( U ) = ∑ i log ⁡ P ( u i ∣ u i − k , … , u i − 1 ; Θ ) L_1(\mathcal U)=\sum_i\log P(u_i|u_{i-k},\ldots,u_{i-1};\Theta) L1(U)=ilogP(uiuik,,ui1;Θ)

如果要预测第u个位置的词的概率的,把之前u-1个词的token embedding合并成一个U,并加上位置编码进行计算得到 h 0 h_0 h0,经过下面的计算得到概率分布

h 0 = U W e + W p h l = t r a n s f o r m e r _ b 1 o c k ( h l − 1 ) ∀ i ∈ [ 1 , n ] P ( u ) = s o f t m a x ( h n W e T ) \begin{aligned}h_0&=UW_e+W_p\\ h_l&=\mathsf{transformer\_b1ock}(h_{l-1})\forall i\in[1,n]\\ P(u)&=\mathsf{softmax}(h_nW_e^T)\end{aligned} h0hlP(u)=UWe+Wp=transformer_b1ock(hl1)i[1,n]=softmax(hnWeT)

监督fine-tune:

把预测词改成预测标号:
P ( y ∣ x 1 , … , x m ) = s o f t m a x ( h l m W y ) . P(y|x^{1},\ldots,x^{m})=\mathsf{s o f t\mathrm{max}}(h^{m}_{l}W_{y}). P(yx1,,xm)=softmax(hlmWy).

得到fine-tune的目标
L 2 ( C ) = ∑ ( x , y ) log ⁡ P ( y ∣ x 1 , … , x m ) . L_2(\mathcal C)=\sum_{(x,y)}\log P(y|x^1,\ldots,x^m). L2(C)=(x,y)logP(yx1,,xm).

实验发现两个目标函数一起效果更好
L 3 ( C ) = L 2 ( C ) + λ ∗ L 1 ( C ) L_3(\mathcal C)=L_2(\mathcal C)+\lambda*L_1(\mathcal C) L3(C)=L2(C)+λL1(C)

对不同任务的处理方法:
在这里插入图片描述

Language Models are Unsupervised Multitask Learners
GPT-2是GPT模型的改进版,于2019年推出。与GPT相比,GPT-2模型具有更多的参数和更大的模型容量,同时采用了更先进的训练技术和更大的数据集,GPT-2的卖点是zero-shot

GPT-2的一个很大的贡献是,取消掉了训练下游任务时的分隔分类token,比如『CLS』『SEP』这些符号,而改成了训练和预测都用prompt,使得训练和预测任务对齐,这对模型来说是一个比较重要的调整,对于之后GPT-3和ChatGPT有着深远的影响

Language Models are Few-Shot Learners
GPT-3一个重要的点是in-context learning,即为回答问题的时候考虑到上下文,最近的Chain-of-Thought已经证明了其强大的效果
在这里插入图片描述

Transformer的后代们

Transformer-XL

  1. Transformer-XL中的两个核心创新是Relative Positional Encoding和Segment-Level Recurrence。Relative Positional Encoding是一种相对位置编码方法,它考虑了不同位置之间的相对距离,相比于标准的位置编码能够更好的捕捉序列中的长期依赖关系。而Segment-Level Recurrence则是一种循环结构,它将前一次处理过的状态通过递归结构传递到下一次处理中,处理长文本时,下一个segment能获取之前的segment的信息,使模型拥有长距离建模的能力
    在这里插入图片描述

REFORMER

  1. REFORMER 通过使用可逆残差网络 (reversible residual network) 和分块注意力机制 (chunked attention mechanism) 来减少内存和计算的开销。与传统的 Transformer 模型不同,REFORMER 采用了分块注意力机制,将输入序列分成多个块,并且每个块中的每个位置只与该块内的其他位置进行注意力计算。这样就可以将注意力计算从全局计算转化为局部计算,从而降低了计算复杂度。同时,REFORMER 也可以通过调整块大小和块数量来平衡计算和精度之间的权衡
  2. REFORMER 还采用了可逆残差网络,这是一种特殊的神经网络结构,可以在不增加模型大小的情况下使模型的计算具有可逆性。这种结构可以在每个层中使模型的内存需求减半,从而显著降低了内存开销。

REFORMER 通过这些创新技术,在保持与 Transformer 相同的模型质量的同时,将模型的内存需求减少了 3 到 4 倍,从而使得处理更长的输入序列成为可能。REFORMER 的出现为处理长文本、长语音序列等任务提供了一种新的选择

ROFORMERv1

ROFORMER 是在 REFORMER 的基础上进一步改进的模型,由华为 Noah’s Ark 实验室于 2021 年提出。ROFORMER 旨在解决 REFORMER 在处理长序列时存在的一些问题,并且在性能方面取得了显著的提升

ROFORMER 的改进主要包括以下方面:

  1. 跨块注意力机制:ROFORMER 引入了一种新的注意力机制,称为跨块注意力机制,可以在块之间进行信息交流。在传统的分块注意力机制中,不同块之间的信息是无法共享的,而跨块注意力机制可以在保持较低计算复杂度的情况下实现信息共享,从而提高模型的性能
  2. 软化跨块注意力机制:ROFORMER 进一步改进了跨块注意力机制,引入了一种软化的跨块注意力机制。软化跨块注意力机制将跨块信息交流问题视为一个概率分布问题,通过学习每个位置向不同块的概率分布,从而实现了更加灵活的跨块信息交流
  3. 交替块处理:ROFORMER 引入了交替块处理机制,将块分为两种类型,一种是处理输入序列的块,另一种是处理输出序列的块。交替块处理机制可以在保证模型性能的同时,进一步减少计算和内存开销。
  4. 自适应分块:ROFORMER 引入了一种自适应分块机制,根据输入序列的长度和复杂度自适应地调整块的大小和数量。这样可以使模型在处理不同类型和长度的序列时都具有较好的性能

ROFORMERv2

相比RoFormer,RoFormerV2的主要改动是简化模型结构、增加训练数据以及加入有监督训练,这些改动能让RoFormerV2最终取得了速度和效果的“双赢”

在结构上,RoFormerV2主要去掉了模型的所有Bias项,以及Layer Norm换成了简单的RMS Norm,并且去掉了RMS Norm的gamma参数。这些改动的灵感主要来自Google的T5模型。

大家的潜意识里可能会觉得Bias项以及Layer Norm的beta和gamma参数计算量都很小,至少对速度来说是无关痛痒的。但事实却出乎意料:去掉这些看似“无关痛痒”的参数外,RoFormerV2的训练速度获得了明显的提升

在这里插入图片描述

BART

BART的主要贡献在于使用了多种不同的mask方式,增强了模型的效果
在这里插入图片描述
文本分类:类似BERT的『CLS』,在decoder最后,将额外的token添加到末尾,以便在decoder中对token的表示可以从完整的输入中注意到decoder的状态

机器翻译:用一个新的随机初始化的encoder取代BART的encoder embdding层
该模型是端到端的训练,它训练新的编码器将外语单词映射成BART可以去噪的输入变成英语
新的编码器可以使用与原始BART模型不同的词汇表。我们分两步训练源编码器,在这两种情况下,都是从BART模型的输出中反向传播交叉熵损失
第一步,我们冻结了大部分BART参数,只更新随机初始化的源编码器、BART位置嵌入以及BART编码器第一层的自我注意输入投影矩阵
第二步,我们对所有模型参数进行少量的迭代训练

在这里插入图片描述

token分类:直接将整个文档放入encoder-decoder,用decoder最上层的隐状态作为每个词的表示,用此表示来分类

序列生成:直接输入到encoder然后让decoder输出结果

BERT的后代们

RoBERTa

对于BERT的改进:

  1. 使用动态maskBERT依赖于随机mask和预测token。原始的BERT实现在数据预处理过程中进行了一次mask,导致了一个单一的静态mask。为了避免在每个epoch中对每个训练实例使用相同的mask,训练数据被重复了10次,因此在40个epoch的训练中,每个序列被以10种不同的方式进行mask。因此,在训练期间,每个训练序列都用相同的mask看了4次
  2. 使用2k,8k的batch size
  3. Text Encoding:原bert使用的是char-level的BPE,词表大小30k,这里换成bytes-level的BPE,词表大小50k
  4. 去掉NSP任务,改用:
    • FULL-SENTENCES:每个输入都是由从一个或多个文件中连续取样的完整句子组成,因此总长度最多为512个token。输入的句子可以跨越文件的边界。当我们到达一个文档的末尾时,我们开始从下一个文档中抽取句子,并在文档之间添加一个额外的分隔符
    • DOC-SENTENCES:输入的构造与FULL-SENTENCES类似,只是它们不能跨越文档的边界。在文档末尾附近取样的输入可能短于512个token,所以我们在这些情况下动态地增加batch-size,以达到与FULL-SENTENCES相似的总token数

DEBERTA

  1. disentangled attention mechanism :每个词用两个向量表示,分别编码其内容和位置,而词之间的注意力权重则分别用关于其内容和相对位置的分解矩阵来计算
  2. enhanced mask decoder :用于在解码层中加入绝对位置,以预测模型预训练中的掩码符号
  3. 一个新的虚拟对抗训练方法被用来进行微调,以提高模型的泛化能力,虚拟对抗训练是一种提高模型泛化能力的正则化方法。它通过提高模型对对抗性例子的鲁棒性来实现,对抗性例子是通过对输入进行小幅扰动而产生的。模型被正则化,以便当给定一个特定任务的例子时,模型产生的输出分布与它在该例子的对抗性扰动中产生的输出分布相同。对于NLP任务,扰动被应用于单词嵌入而不是原始单词序列。然而,嵌入向量的值范围(规范)在不同的词和模型中是不同的。对于具有数十亿参数的大型模型来说,方差会变大,从而导致对抗性训练的一些不稳定性

给出一个句子 “新商场旁边开了一家新店”,其中的 "店 "和 "商场 "两个词被掩盖起来进行预测。仅仅使用局部语境(如相对位置和周围的词)不足以让模型区分这个句子中的商店和商场,因为两者都在新词后面,相对位置相同。为了解决这一局限性,该模型需要考虑绝对位置,作为相对位置的补充信息。例如,该句的主语是 "商店 "而不是 “商场”。这些句法上的细微差别在很大程度上取决于这些词在句子中的绝对位置

XLNet

  1. XLNet不是像传统的AR模型那样使用固定的前向或后向因式分解顺序,而是将序列的预期对数似然在因式分解顺序的所有可能的排列中最大化。由于排列操作,每个位置的上下文可以由左右两边的token组成。在期望中,每个位置学会利用来自所有位置的上下文信息,即捕捉双向的上下文
  2. 作为一个广义的AR语言模型,XLNet并不依赖于数据损坏。因此,XLNet不会像BERT那样受到预训练-调整差异的影响。同时,自回归目标还提供了一种自然的方法,可以使用乘积法则对预测标记的联合概率进行因子化,消除了BERT中的独立假设

取消mask标记避免了微调时候输入与预训练输入不一致带来的误差问题

引入Transformer-XL,解决了长文本处理的问题

ALBERT

  1. ALBERT通过两种方法减少模型参数数量:嵌入层共享和交叉层参数共享。嵌入层共享是指将输入嵌入矩阵和输出嵌入矩阵共享,这样可以减少输入和输出嵌入矩阵的参数数量。交叉层参数共享是指将BERT中的多层转换成多个交叉层,其中每个交叉层共享参数。这种共享可以大大减少参数数量,同时保持较高的性能
  2. ALBERT还使用了两种新的训练技术来提高模型性能:句子顺序预测和动态掩码。句子顺序预测与BERT中的“下一句预测”类似,但它从两个句子中随机选择一个,并要求模型预测这个句子是否出现在原始文本中。动态掩码技术允许在每次训练迭代中随机遮蔽不同的词,这有助于模型学习更通用的上下文表示

ELECTRA

ELECTRA的全称是Efficiently Learning an Encoder that Classifies Token Replacements Accurately(高效地学习一个编码器,以准确分类令牌替换),通过利用对抗学习的思想,使得预训练的模型具有更好的鲁棒性和泛化能力

在ELECTRA中,作者提出了两个新的概念,即GeneratorDiscriminator。Generator是一个标准的Transformer语言模型,它用于生成输入文本中的每个词的表示。而Discriminator是一个分类器,它的目标是判断一个输入的词是否来自原始文本,还是来自Generator生成的替换文本。通过这种方式,Discriminator可以在Generator生成的大量文本中筛选出有用的部分,从而提高模型的效率和泛化能力

具体来说,在预训练过程中,Generator随机替换输入文本中的一部分词,并使用其余词生成替换文本。Discriminator使用输入文本和替换文本,以及它们的真实标签,训练一个二元分类器,以判断词是否来自原始文本。在训练中,Generator和Discriminator相互竞争,Generator的目标是欺骗Discriminator,而Discriminator的目标是正确地分类词的来源
在这里插入图片描述

相比于传统的预训练方法,ELECTRA在训练数据效率和模型效率方面都具有显著的优势。由于Generator只需要对每个词进行一次计算,而不是对整个文本序列进行计算,因此ELECTRA的训练速度比BERT等模型更快。此外,Discriminator可以有效地筛选出Generator生成的高质量替换文本,从而提高了模型的泛化能力和鲁棒性

GPT的超级后浪 InstructGPT(ChatGPT)

ChatGPT的官方介绍:
We trained this model using Reinforcement Learning from Human Feedback (RLHF), using the same methods as InstructGPT, but with slight differences in the data collection setup. We trained an initial model using supervised fine-tuning: human AI trainers provided conversations in which they played both sides—the user and an AI assistant. We gave the trainers access to model-written suggestions to help them compose their responses. We mixed this new dialogue dataset with the InstructGPT dataset, which we transformed into a dialogue format.

To create a reward model for reinforcement learning, we needed to collect comparison data, which consisted of two or more model responses ranked by quality. To collect this data, we took conversations that AI trainers had with the chatbot. We randomly selected a model-written message, sampled several alternative completions, and had AI trainers rank them. Using these reward models, we can fine-tune the model using Proximal Policy Optimization. We performed several iterations of this process.

核心是:

  1. 基于GPT-3.5
  2. 使用了RLHF
  3. 分为三步训练:
    • 收集解释数据(prompt)并进行监督训练
    • 在第一布训练好的模型SFT基础上,用模型生成答案,并让人对答案的质量进行排序,使用强化学习中的RM算法 – 给定prompt和输出,对它生成一个分数,使得模型输出的答案的分数能满足人类标注的排序关系
    • 使用PPO算法,继续优化SFT,使得好的答案拥有更高的分数
      在这里插入图片描述

一些其他知名衍生模型

SpanBERT

  1. SpanBERT是一种预训练语言模型,它是BERT(Bidirectional Encoder Representations from Transformers)的扩展版本。BERT是一种双向Transformer编码器,它在大规模文本语料库上进行预训练,然后可以用于各种自然语言处理(NLP)任务的微调。与BERT不同,SpanBERT是一种通过处理特定任务中的连续子序列而预训练的语言模型
  2. SpanBERT使用span-level的表示形式,它可以将句子中的任何连续子序列视为单个训练样本。这种表示方式可以更好地捕捉句子中的复杂关系,因为它可以学习到不同子序列之间的交互作用。此外,SpanBERT还在BERT的预训练任务中引入了新的目标:Span Boundary Objective,要求模型预测输入句子中所有可能的span序列的起始和结束位置,或许作者想通过这个目标,让模型在一些需要 Span 的下游任务取得更好表现。具体做法是,在训练时取 Span 前后边界的两个词,这两个词不在 Span 内,然后用这两个词向量加上 Span 中被遮盖掉词的位置向量,来预测原词
  3. 移除了NSP任务

这样做的目的是:增强了 BERT 的性能,为了让模型让模型在一些需要 Span 的下游任务取得更好表现,特别在一些与 Span 相关的任务,如抽取式问答。

Sentence-BERT

Sentence-BERT主要是解决Bert语义相似度检索的巨大时间开销和其句子表征不适用于非监督任务如聚类,句子相似度计算等而提出的。Sentence-BERT使用鉴孪生网络结构,获取句子对的向量表示,然后进行相似度模型的预训练即为sentence-BERT。其预训练过程主要包括如下步骤:

  1. 使用孪生网络结构,使用Bert进行finetune来进行句子的语义相似度模型的预训练,其具体做法是:将句子对输入到参数共享的两个bert模型中,将Bert输出句子的所有字向量进行平均池化(既是在句子长度这个维度上对所有字向量求均值)获取到每个句子的句向量表示
  2. 然后将两向量的元素级的差值向量与这两个句向量进行拼接,最后接softmax分类器来训练句子对分类任务,这样做的目的是减小Bert语义检索的巨大时间开销,并使其适用于句子相似度计算,文本聚类等无监督任务

在这里插入图片描述

[1] 万字长文带你纵览 BERT 家族
[2] Attention Is All You Need
[3] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
[4] Improving Language Understanding by Generative Pre-Training
[5] Language Models are Unsupervised Multitask Learners
[6] Language Models are Few-Shot Learners
[7] Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
[8] REFORMER: THE EFFICIENT TRANSFORMER
[9] ROFORMER: ENHANCED TRANSFORMER WITH ROTARY POSITION EMBEDDING
[10] RoFormerV2:自然语言理解的极限探索
[11] BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension
[12] RoBERTa: A Robustly Optimized BERT Pretraining Approach
[13] DEBERTA: DECODING-ENHANCED BERT WITH DISENTANGLED ATTENTION
[14] XLNet: Generalized Autoregressive Pretraining for Language Understanding
[15] ALBERT: A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS
[16] ELECTRA: PRE-TRAINING TEXT ENCODERS AS DISCRIMINATORS RATHER THAN GENERATORS
[17] SpanBERT: Improving Pre-training by Representing and Predicting Spans
[18] Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
[19] Training language models to follow instructions with human feedback
[20] Analogy Generation by Prompting Large Language Models: A Case Study of InstructGPT

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Transformer是一种基于自注意力机制的深度学习模型,最初用于机器翻译任务。它在处理序列数据时具有很强的表达能力和并行计算的能力,因此在自然语言处理领域取得了重要的突破。 Transformer的核心思想是通过自注意力机制来捕捉输入序列中不同位置之间的依赖关系。自注意力机制允许模型在编码和解码阶段同时对整个输入序列进行关注,而不仅仅是局部区域。这种全局的关注能力有助于模型更好地理解语义和上下文。 除了Transformer本身,还有一些改进方法被提出来进一步优化模型性能。其中包括: 1. 多头注意力机制:在传统的自注意力机制中,通过引入多个注意力头并行处理不同的线性投影来增强模型的表达能力。 2. 残差连接和层归一化:为了避免训练深层网络时梯度消失或梯度爆炸问题,Transformer引入了残差连接和层归一化来加强网络的稳定性。 3. 位置编码:由于Transformer没有使用循环神经网络或卷积神经网络,它无法直接处理序列中的位置信息。为了解决这个问题,位置编码被引入到Transformer中,以提供序列中的位置信息。 4. Transformer-XL:为了解决Transformer对长序列的建模能力问题,Transformer-XL引入了循环机制,并通过缓存先前计算的隐藏状态来扩展模型对长序列的依赖关系建模能力。 5. BERT(Bidirectional Encoder Representations from Transformers):BERT是一种预训练模型,通过在大规模文本语料上进行无监督学习,学习得到通用的语言表示。BERT在多个自然语言处理任务上取得了显著的性能提升。 这些改进方法使得Transformer模型更加强大和灵活,被广泛应用于自然语言处理、语音识别和计算机视觉等领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值