Transformer 简介

Transformer 是 Google 在 2017 年底发表的论文 Attention Is All You Need 中所提出的 seq2seq 模型。Transformer 模型的核心是 Self-Attention 机制,能够处理输入序列中的每个元素,并能计算其与序列中其他元素的交互关系的方法,从而能够更好地理解序列中的上下文关系。

Transformer 模型能够处理不同长度的序列,捕捉长距离依赖关系,并在大规模数据上进行高效训练。这使得它成为自然语言处理领域取得重大突破的关键模型之一,逐渐取代了 CNN 和 RNN。

一. 预备知识

1. Attention 机制

Attention 机制 1 也叫注意力机制,是一种用于改善神经网络 对输入序列中不同部分的关注度 的机制。在传统的神经网络中,所有输入信息都被平等对待,无论其在序列中的位置或重要性。而 Attention 机制允许网络在处理输入序列时更加关注其中的特定部分,使网络能够更灵活地学习输入之间的关系。

Attention 机制的基本思想是:对于每个输出位置,网络都动态地计算一个权重分布,以指示输入序列中哪些位置更重要。这个权重分布是通过计算 Query(即用户提出的问题)与 Key(即模型中的知识摘要)之间的关联度 F(Dot-product 或 Additive),然后 softmax 归一化,最后查询得到 Value(即与 Key 相关联的知识)输出。因此有:
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
在这里插入图片描述

Attention 机制解决了先前 RNN 不能并行计算的问题,节省了训练时间,并且能够获取到局部的关键信息。但 Attention 机制也有一些缺点:

  1. 只能在 Decoder 阶段实现并行运算,Encoder 部分依旧采用的是 RNN、LSTM 等按照顺序编码的模型,无法实现并行运算;
  2. 因为 Encoder 部分仍依赖 RNN,所以中长距离之间的两个词相互之间的关系没有办法很好的获取;

为了改进 Attention 机制的缺点,出现了 Self-Attention。

2. Self-Attention 机制

Self-Attention(自注意力)机制是 Attention 的一种特殊形式,它允许一个 序列中的不同位置之间进行交互,而不是像 Attention 机制那样仅仅对输入序列的不同部分进行关注。在 Self-Attention 中,对于序列中的每个元素,都会计算该元素与序列中所有其他元素之间的关联度,然后利用这些关联度为每个元素分配一个权重。这样,每个元素都能够考虑到整个序列的信息,能够与序列中的所有其他位置进行交互,而不仅仅是局部信息,从而更好地捕捉长距离依赖关系。

⌈ \lceil 英-中机器翻译 ⌋ \rfloor 为例,解释 Attention 和 Self-Attention 的区别:Source 是输入的英文语句,Target 是输出的翻译出的中文语句,Source 和 Target 内容不相同。Attention 机制发生在 Target 中所有元素和 Source 中所有元素之间;而 Self-Attention 指的是 Source 内部元素之间或者 Target 内部元素之间发生的 Attention 机制,也可以理解为 Target = Source 这种特殊情况下的注意力计算机制。因此 Self-Attention 具体计算过程和 Attention 是一样的,只是计算对象发生了变化,相当于是 Query = Key = Value(更准确地说叫做同源)。

在这里插入图片描述

Self-Attention 中的 Q、K、V 是同源的,来自同一个矩阵 X。如上图所示,X 是嵌入了 Positional Encoding 的 Input Embedding,每一行都是一个词向量;WQ、WK、WV 分别是用于计算 Query、Keys、Values 的权值矩阵;Q、K、V 分别是 Input Embedding 与权值矩阵计算所得的 Query、Keys、Values 向量,用于计算 Attention 值。下面详细介绍一下 Self-Attention 的计算过程 2

2.1 单个输出

对于每一个输入向量 a i a^i ai,经过蓝色部分 Self-Attention 之后都会输出一个向量 b i b^i bi b i b^i bi 考虑了所有的输入向量对 a i a^i ai 产生的影响。下面以 b 1 b^1 b1 为例:
在这里插入图片描述

  1. 使用 q 1 q^1 q1 查询 k i k^i ki,得到 attention 得分 a 1 , i a_{1, i} a1,i
    在这里插入图片描述
  2. 对 attention 得分 a 1 , i a_{1, i} a1,i 做 softmax 归一化得到 a 1 , i ′ a'_{1, i} a1,i
    在这里插入图片描述
  3. 使用 a 1 , i ′ a'_{1, i} a1,i 查询 v i v^i vi,输出最终的 b 1 b^1 b1
    在这里插入图片描述

同理, b 2 b^2 b2 b 3 b^3 b3 b 4 b^4 b4 计算过程同上:
在这里插入图片描述

如果 a 1 a^1 a1 a 2 a^2 a2 关联性较高, a 1 , 2 ′ a'_{1, 2} a1,2 就比较大,那么,得到的输出 b 1 b^1 b1 就比较接近 v 2 v^2 v2 ,即 attention score 决定了 v i v^i vi 在结果中的占比。

2.2 矩阵表示

将上述单个输出合并成矩阵,令 I = ( a 1 , a 2 , a 3 , a 4 ) I=(a^1, a^2, a^3, a^4) I=(a1,a2,a3,a4) Q = ( q 1 , q 2 , q 3 , q 4 ) Q=(q^1, q^2, q^3, q^4) Q=(q1,q2,q3,q4) K = ( k 1 , k 2 , k 3 , k 4 ) K=(k^1, k^2, k^3, k^4) K=(k1,k2,k3,k4) V = ( v 1 , v 2 , v 3 , v 4 ) V=(v^1, v^2, v^3, v^4) V=(v1,v2,v3,v4) O = ( b 1 , b 2 , b 3 , b 4 ) O=(b^1, b^2, b^3, b^4) O=(b1,b2,b3,b4),则有:
A = K T ⋅ Q A ′ = softmax ( A ) O = V ⋅ A ′ A=K^T \cdot Q\\ A'=\text{softmax}(A)\\ O=V \cdot A' A=KTQA=softmax(A)O=VA
在这里插入图片描述

下面举例说明 Self-Attention 机制能够关注序列中不同位置:当我们想知道这句话中的 its 指代的是什么,那么就可以将 its 作为 Query,然后将这一句话作为 Key 和 Value 来计算 Attention 值,找到与这句话中 its 最相关的单词。通过 Self-Attention 计算发现 its 在这句话中与之最相关的是 Lawapplication

在这里插入图片描述

Self-Attention 最为突出的应用就是在 Transformer 模型中,它允许模型在处理序列数据时,不受到固定的感受野大小的限制,而能够根据任务的需要自适应地捕捉不同位置的信息。这使得 Self-Attention 成为了处理序列数据的强大工具,被广泛用于自然语言处理和其他领域的任务。

3. Cross-Attention 机制

Cross-Attention(交叉注意力)机制是 Attention 机制的一种扩展,它主要应用于 处理两个不同序列之间的关系,使得模型能够对一个序列中的元素关注另一个序列中的相关部分,从而更好地捕捉两个序列之间的关联信息。

Cross-Attention 机制的引入使得模型能够在处理两个序列时,动态地关注源序列的不同部分,从而更好地理解源序列与目标序列之间的关系。这在处理序列对之间的任务时非常有用,比如在问答、机器翻译等任务中。

Transformer 的 Decoder 部分使用 Cross-Attention 机制来处理输入序列和输出序列之间的关系。具体来说,Decoder 在生成目标序列的每个位置时,能够动态地关注输入序列的不同部分,更好地对应输入和输出之间的对应关系,尤其在翻译等任务中效果显著。

Cross-Attention 和 Self-Attention 的不同之处在于,Cross-Attention 的输入来自不同的序列,Self-Attention 的输入是一个单一的嵌入序列,其他基本相同。Cross-Attention 将两个相同维度的嵌入序列不对称地组合在一起,而其中一个序列作为查询 Q 输入,另一个序列用作键 K 和值 V 输入:
在这里插入图片描述

4. Multi-Head Attention

Multi-Head Attention 是 Transformer 模型中的一种注意力机制,它是对单一 Attention 头的扩展。通过使用多个独立的 Attention 头,模型能够并行地学习不同的关注权重,从而更好地捕捉序列中的不同关系。这有助于提高模型的表达能力和学习复杂关系的能力。

Multi-Head Attention 使用多个独立的 Attention 头,对于每个Attention头,学习三个线性变换,分别用于生成各自的 Query、Key 和 Value;然后使用每个头的 Query、Key 和 Value 并行计算关联度和权重;再将多个头的输出拼接在一起以增加模型对不同关系和特征的表达能力;最后将拼接后的输出通过线性变换生成最终的 Multi-Head Attention 的输出。
在这里插入图片描述

通过使用多个 Attention 头,模型能够学习到数据不同方面的表示,从而更全面地捕捉序列中的关系。这种多头机制在提高模型的性能、泛化能力和处理复杂任务方面都发挥了重要作用。

5. 位置编码

位置编码 (Positional Encoding) 3 是为了在 Transformer 等无法处理序列顺序信息的模型中引入位置信息而设计的一种技术。由于 Transformer 没有像循环神经网络 RNN 那样的内在顺序感知,因此位置编码的目的是为模型提供有关输入序列中元素位置的信息。
在这里插入图片描述

位置编码的一种常见形式是通过将位置信息嵌入到输入向量中来实现,这个向量的设计通常基于三角函数或正弦余弦函数,以确保模型能够学到有关序列位置的有用信息。以正弦余弦函数为例,对 Input Embedding 中每个位于 p o s pos pos 的字符和字符中的位置 i i i,位置编码的计算方式如下 4
PE ( p o s , 2 i ) = sin ⁡ ( p o s 10000 2 i / d ) PE ( p o s , 2 i + 1 ) = cos ⁡ ( p o s 10000 2 i / d ) \text{PE}(pos, 2i) = \sin\left(\frac{pos}{{10000}^{2i/d}}\right)\\ \text{PE}(pos, 2i+1) = \cos\left(\frac{pos}{{10000}^{2i/d}}\right) PE(pos,2i)=sin(100002i/dpos)PE(pos,2i+1)=cos(100002i/dpos)
其中, PE \text{PE} PE 是位置编码, p o s pos pos 是当前字符在输入文本中的位置, i i i 是当前字符编码某一位置的索引, d d d 是 Input Embedding 中每个字符编码的维度。这种位置编码的设计允许模型在不同位置和不同维度上学到有关位置的信息。

在训练过程中,这些位置编码与输入嵌入相加,从而将位置信息引入模型。位置编码的选择是可学习的,因此模型可以根据任务学到最适合的位置表示。通过引入位置编码,Transformer 能够更好地处理序列中元素的顺序关系,从而更好地捕捉长距离的依赖关系。

二. Transformer

Transformer5 是一种神经网络架构,引入了 Self-Attention 机制,允许模型同时处理输入序列中的所有位置信息,而无需使用循环神经网络或卷积神经网络。Transformer 的核心部分是 Encoder 和 Decoder 块:编码器接收一段输入序列,进行一系列的自注意力和全连接网络操作,并输出一段连续的表示;解码器部分接受编码器的输出以及之前解码器的输出,生成新的输出。

在这里插入图片描述

1. Input Block

Transformer 将输入文本分词然后编码为词向量序列,也就是 Input Embedding。词向量可以是 word2vec、GloVe、one-hot 等编码形式,不同词向量都具有相同的维度。处理好 Input Embedding 后需要给每个词向量添加位置编码,来保留输入文本内部的相对位置信息。以输入文本 “Tom chase Jerry” 为例,Input Block 内部如下:
在这里插入图片描述

Input Embedding 和 Output Embedding 都属于 Input Block,只有在训练期间才会接收 Output Embedding 输入,进行预测时 Output Embedding 不接受输入。

2. Encoder Block

Encoder Block 由多个 Encoder 堆叠而成,每个 Encoder 内部包括 Multi-Head Attention 和 Feed Forward:
在这里插入图片描述

Multi-Head Attention 就是在 Self-Attention 的基础上,使用多组 WQ、WK、WV 得到多组 Query、Keys、Values,然后每组分别计算得到一个 Z 矩阵,最后进行拼接。
在这里插入图片描述

Feed Forward 是一个普通的全连接网络,依次做线性、ReLU 非线性等变换。

Multi-Head Attention 和 Feed Forward 后面都加入了 Add 和 Normalize 层:Add 层就是在 Z 的基础上添加残差块 X(其实就是 Multi-Head Attention 的输入 X),防止在深度神经网络训练中发生退化问题;Normalize 层用于对输入数据 Normalize 归一化,从而加快训练速度、提高训练的稳定性。

3. Decoder Block

Decoder 的输入分训练和预测两种:训练时的输入就是已经准备好的 target 数据,例如翻译任务中 Encoder 输入"Tom chase Jerry",Decoder 输入 “汤姆追逐杰瑞”;预测时的输入则是上一时刻 Transformer 的输出。

Decoder Block 相较于 Encoder Block 只增加了 Masked Multi-Head Attention:
在这里插入图片描述
Masked Multi-Head Attention 就是在 Multi-Head Attention 的基础上多加了一个 mask 码,对部分值进行掩盖使其在参数更新时不产生效果。

4. Output Block

Output Block 结构简单:先经过一次线性变换,然后 Softmax 就可以得到输出的概率分布。

三. 应用

BERT 和 GPT 都是在 Transformer 基础上衍生出来的预训练语言模型,被广泛应用于各种 NLP 任务 6 。不同之处在于 BERT 采用的是双向 Transformer,能够同时获取上下文的信息;而 GPT 采用的是单向 Transformer,完全放弃了下文信息。
在这里插入图片描述

1. BERT

BERT (Bidirectional Encoder Representations from Transformers) 是一种基于 Transformer 的预训练语言模型,它引入了 双向 Transformer 编码器,使得模型可以同时考虑输入序列的前后上下文信息。BERT 通过在大量文本数据上进行预训练,学习到了丰富的语言知识,然后在特定任务上进行微调,如文本分类、情感分析等。

BERT 有预训练和微调两个阶段 7

  • 在预训练阶段,BERT 使用未标记的数据进行训练。通过 掩码语言模型 (masked language model, MLM) 消除 Transformer 的单向性约束,使用 双向 Transformer 编码器 在输入序列中随机地掩盖一些单词,并要求模型双向预测这些被掩盖的单词,从而帮助模型更好地理解语言中的上下文信息。
  • 在微调阶段,使用来自下游任务的标记数据对 (text-pair) 对模型参数进行微调。此时模型的输入是两个序列,一个作为模型的输入,另一个作为模型的输出,BERT 需要判断这两个序列是否相互关联,该过程被称为 下一句预测任务 (next sentence prediction, NSP)

在这里插入图片描述

BERT 模型微调之后可以广泛用于多种 NLP 相关任务 8

  • 句子对分类任务:给定一对句子,预测第二个句子相对于第一个句子是包含,矛盾还是中立的。
  • 单句子分类任务:分析单句子中包含的人类情感倾向,正面、负面还是中立。
  • 单句子标注任务:也叫命名实体识别,即识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等,以及时间、数量、货币、比例数值等文字。

2. GPT

GPT (Generative Pre-trained Transformer) 也是一种基于 Transformer 的预训练语言模型,它使用的是 单向 Transformer 编码器,这使得模型可以更好地捕捉之前输入序列的信息。GPT 模型的输入是一个文本序列,目标是生成与输入序列相关的下一个单词或序列。在 GPT 中,每个单词的表示都是通过自回归模型计算得到的,这个模型会考虑前面所有的单词,以及它们对应的位置,来预测下一个单词。GPT 通过在大量文本数据上进行预训练,学习到了丰富的语言知识,然后在特定任务上进行微调,如文本生成、摘要等。

GPT 有预训练和微调两个阶段 9

  • 在预训练阶段,采用 无监督 的预训练方法,不需要人工标注的数据,这样可以更好地利用现有的大规模文本语料库。预训练的过程中,将句子 n 个词的词向量位置编码后输入到 Transfromer 中,n 个输出分别预测该位置的下一个词。由于使用的是单向 Self-Attention,所以每个位置的词都不会 “看见” 后面的词,也就是预测的时候是看不见 “答案” 的,从而保证了模型的合理性。
  • 在微调阶段,使用少量来自下游任务的带标签数据对模型参数进行微调。为避免 Fine-Tuning 使得模型过拟合,使用最后一个词的预测结果进行监督学习的同时,前面的词继续上一步的无监督训练。

GPT 模型微调之后可以广泛用于多种 NLP 相关任务,针对不同任务需要修改输入数据的格式:
在这里插入图片描述

  • Classification:对于分类问题,不需要做什么修改。
  • Entailment:对于推理问题,可以将先验与假设使用一个分隔符分。
  • Similarity:对于相似度问题,由于模型是单向的,但相似度与顺序无关。所以需要将两个句子顺序颠倒后两次输入的结果相加来做最后的推测。
  • Multiple Choice:对于问答问题,则是将上下文、问题放在一起与答案分隔开,然后进行预测。

GPT 的特点在于它能够自动地生成自然语言文本,可以用于文本生成、对话系统等任务。它的独特之处在于它具有非常大的参数量和深度,能够学习到更多的语言知识,并生成更加自然的文本。


  1. 史上最小白之Attention详解 ↩︎

  2. 自注意力机制(Self-Attention) ↩︎

  3. transformer学习笔记:Positional Encoding(位置编码) ↩︎

  4. Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in neural information processing systems, 2017, 30. ↩︎

  5. 史上最小白之Transformer详解 ↩︎

  6. 秒懂AI-深度学习五大模型:RNN、CNN、Transformer、BERT、GPT简介 ↩︎

  7. paperswithcode | BERT ↩︎

  8. Bert模型的细节到底是怎么样的? ↩︎

  9. Transformer结构及其应用详解–GPT、BERT、MT-DNN、GPT-2 ↩︎

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值