文献阅读笔记(Transformer)

文献阅读笔记(Transformer)

  • 摘要
  • Abstract
  • 1、文献阅读
    • 1.1 文献题目
    • 1.2 文献摘要
    • 1.3 研究背景
    • 1.4 模型架构
      • 1.4.1 Encoder-Decoder
      • 1.4.2 注意力机制
      • 1.4.3 多头注意力
      • 1.4.4 Position-wise Feed-Forward Networks
      • 1.4.5 Embeddings and Softmax
      • 1.4.6 Positional Encoding
  • 2. Transformer公式推导以及原理
  • 3. Transformer整体执行流程
    • 3.1 masked self-attention推导以及原理细节
  • 总结

摘要

Transformer是一种流行的神经网络架构,用于处理自然语言处理(NLP)任务。它由"Attention is All You Need"一文中提出,相对于传统的循环神经网络(RNN)模型,Transformer采用了自注意力机制(self-attention),使得模型能够更好地捕捉输入序列中各个位置之间的关系。它通过同时考虑输入序列中的所有位置信息,而无需像RNN那样逐个位置地进行处理,大大提高了训练和推理的效率。Transformer的成功部分得益于其并行计算的能力和深层网络的表示能力。这使得Transformer模型能够处理长文本序列,同时提供更好的建模能力和上下文理解能力。本文将详细介绍Transformer的具体执行流程和原理。

Abstract

Transformer is a popular neural network architecture for natural language processing (NLP) tasks. Proposed in the article “Attention is All You Need”, Transformer employs a self-attention mechanism that allows the model to better capture the relationships between the positions in the input sequence, as opposed to the traditional recurrent neural network (RNN) model. It greatly improves the efficiency of training and inference by considering all the positional information in the input sequence at the same time, without having to process it position-by-position as in an RNN.Transformer’s success is due in part to its ability to parallelize the computation and representation of the deep network. This allows the Transformer model to process long text sequences while providing better modeling capabilities and contextual understanding. In this paper, we describe in detail the specific implementation process and principles of Transformer.

1、文献阅读

1.1 文献题目

题目:Attention Is All You Need
文献链接:https://arxiv.org/abs/1706.03762

1.2 文献摘要

主导序列转录模型基于复杂的循环或卷积神经网络,包括编码器和解码器。性能最好的模型还通过注意力机制连接编码器和解码器。文章主要提出了一种称为 Transformer 的新型网络架构,它完全基于注意力机制,完全不需要递归和卷积。对两个机器翻译任务的实验表明,这些模型具有卓越的质量,同时具有更高的并行性,并且需要的训练时间显着减少。

remark
所谓序列转录模型通俗理解就是给机器一个序列,机器生成另外一个序列

Dominant sequence transduction models are based on complex recurrent or convolutional neural networks, including encoders and decoders. The best performing models also connect the encoder and decoder through an attention mechanism. The article focuses on proposing a novel network architecture called Transformer, which is based entirely on the attention mechanism and does not require recursion and convolution at all. Experiments on two machine translation tasks show that these models have superior quality along with higher parallelism and require significantly less training time.

1.3 研究背景

减少顺序计算的目标也构成了扩展神经 GPU 、ByteNet 和 ConvS2S 的基础,这些模型都以卷积神经网络为基本构件,并行计算所有输入和输出位置的隐藏表示。在这些模型中,关联来自两个任意输入或输出位置的信号所需的操作数量随着位置之间的距离而增加,这使得学习遥远位置之间的依赖关系变得更加困难。在 Transformer 中,凭借其强大的自注意力机制和多头注意力机制,可以将其操作数降低至恒定数量。本文献提出的Transformer架构 是第一个完全依赖自注意力来计算其输入和输出表示的转换模型。

1.4 模型架构

大多数序列转导模型都具有 encoder-decoder 结构,Transformer模型中的编码器将符号表示的输入序列( x 1 、 x 2 、 x 3 、 . . . 、 x n x_1、x_2、x_3、... 、x_n x1x2x3...xn)映射到连续表示的序列 z = ( z 1 、 z 2 、 . . . 、 z n ) z=(z_1、z_2、... 、z_n) z=(z1z2...zn),给定 z z z,解码器然后每次生成一个元素的符号输出序列 ( y 1 , . . . , y m y_1, ..., y_m y1,...,ym)。在每个步骤中,模型都是自回归的,在生成下一个时将先前生成的符号用作附加输入,即模型会在生成序列时考虑到上下文信息,并根据已经生成的部分来决定下一个要生成的元素,也可以理解为过去时刻 t − 1 t-1 t1 的输出都会作为当前时刻 t t t 的输入。如下Transformer结构图:
在这里插入图片描述

1.4.1 Encoder-Decoder

编码器(Encoder)

编码器由 N = 6 N = 6 N=6 个相同层的堆栈组成。每层有两个子层。第一层是多头自注意力机制,第二层是简单的位置全连接前馈网络。作者在两个子层周围采用残差连接,然后对其进行层归一化。即每个子层的输出为 L a y e r N o r m ( x + S u b l a y e r ( x ) ) LayerNorm(x + Sublayer(x)) LayerNorm(x+Sublayer(x)),其中 S u b l a y e r ( x ) Sublayer(x) Sublayer(x) 是子层本身实现的函数。6个子层分别是:

  1. Self-Attention(自注意力)层:该层使用自注意力机制来计算输入序列中每个位置的表示,并捕捉输入序列内部的依赖关系。
  2. Multi-Head Attention(多头注意力)层:该层在自注意力的基础上使用多个头(可以理解为子注意力)来同时计算不同的注意力表示,从而捕捉更丰富的信息。
  3. Feed-Forward(前馈)层:该层使用全连接神经网络来对每个位置的表示进行非线性变换。
  4. 残差连接(Residual Connection):在每个子层结束时,将其输入和输出通过残差连接进行相加,以便信息可以更加顺利地传递和保持梯度流。
  5. 层归一化(Layer Normalization):在残差连接之后,对输出向量进行层归一化操作,以加速训练过程和提升模型的鲁棒性。
  6. 位置编码(Positional Encoding):前馈层和自注意力层都采用了位置编码(Positional Encoding)来为输入序列的每个位置添加位置信息,从而帮助模型理解输入序列中元素的位置关系。

remark
通俗理解,编码器的作用是生成序列中每个词的注意力信息

解码器(Decoder)

解码器也是由N=6个相同层的堆栈组成。除了每个编码器层中的两个子层之外,解码器还插入第三个子层,该子层对编码器堆栈的输出执行多头注意力。与编码器类似,作者在每个子层周围采用残差连接,然后进行层归一化。作者修改了解码器堆栈中的自注意力子层,以防止位置关注后续位置。这种掩蔽与输出嵌入偏移一个位置的事实相结合,确保位置 i 的预测只能依赖于小于 i 的位置处的已知输出。

remark
解码器的作用是生成文本序列,解码器最开始的输入是由编码器的输出以及解码器输入的起始符start组成,当解码器以一个结束符end输出时,则表明文本序列生成完成。如下图:
在这里插入图片描述

1.4.2 注意力机制

注意力函数可以描述为将一个查询和一组键值对映射到一个输出,其中查询Q、键K、值V和输出都是向量。输出是以值V的加权和来计算的,其中分配给每个值V的权重是通过查询Q与相应键K的兼容函数来计算的。
在这里插入图片描述
Scaled Dot-Product Attention

缩放点积的输入包括查询Q和键K的维度 d k d_{k} dk以及值得维度 d v d_{v} dv。计算查询Q和键K得点积,然后将每个结果除以 d k \sqrt{d_k} dk ,用 sfotmax() 函数来获得值得权重 。

在实践中,我们同时计算一组查询的注意力函数,将其打包到矩阵 Q 中。键和值也打包到矩阵 K 和 V 中。我们将输出矩阵计算为: A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) Attention(Q,K,V)=softmax(\frac{QK^{T}}{\sqrt{d_{k}}} ) Attention(Q,K,V)=softmax(dk QKT)常用的有两种注意力机制,加法质注意力 和 点积(乘性质)注意力。点积注意力和本文的注意力相同,除了使用缩放因子 1 d k \frac{1}{\sqrt{d_{k}}} dk 1。加法注意力使用具有单个隐藏层的前馈网络计算兼容性函数。 虽然两者在理论复杂度上相似,但点积注意力在实践中速度更快,空间效率更高,因为它可以使用高度优化的矩阵乘法代码来实现。

虽然对于较小的 d k d_k dk值,这两种机制的表现相似,但加性注意力优于点积注意力,而无需针对较大的 d k d_{k} dk 值进行缩放。我们怀疑对于较大的 d k d_{k} dk 值,点积的量级会变大,从而将 s o f t m a x softmax softmax 函数推入梯度极小的区域。为了抵消这种影响,我们将点积缩放 1 d k \frac{1}{\sqrt{d_{k}}} dk 1

remark
注意力的计算机指是,对每个 Q 和 K做内积,将它作为相似度。当两个向量做内积时,如果他俩的 d 相同,向量内积越大,余弦值越大,相似度越高。如果内积值为0,他们是正交的,相似度也为0。

1.4.3 多头注意力

在该文章中,作者通过添加一种多头注意力机制,进一步完善了自注意力层。具体做法:首先,通过 h 个不同的线性变换对 Query、Key 和 Value 进行映射;然后,将不同的 Attention 拼接起来;最后,再进行一次线性变换。每一组注意力用于将输入映射到不同的子表示空间,这使得模型可以在不同子表示空间中关注不同的位置。整个计算过程可表示为:
在这里插入图片描述
多头注意力机制与卷积神经网络有些相似,卷积神经网络中,我们往往希望能够提取到的特征越多越好,而在文本中,我们也希望能够得到的特征越多越好。我们一组Q、K、V矩阵,得到一组特征表达,那么我们多组Q、K、V,就会得到多组特征表达。就比如第一个词,根据上述的计算过程,我们一开始有一组 Q 1 、 K 1 、 V 1 Q_1、K_1、V_1 Q1K1V1矩阵,能够得到最后特征表达的值 Z 1 Z_1 Z1,如果再来一组 Q 2 、 K 2 、 V 2 Q_2、K_2、V_2 Q2K2V2,那么最后会得到另一组特征表达的值 Z 2 Z_2 Z2,以此类推。通过不同的head得到多个特征表达,通俗来讲,就是通过多组的 Q 、 K 、 V Q、K、V QKV,最终得到多个 Z i Z_i Zi 的值。一般情况下,所谓的多头机制,基本上都是只有8个head。然后通过8组head得到8个特征表达,最终将8个特征拼接在一起,通过全连接层进行降维,最后得到的一个特征可能会比之前用一组head得到的特征表现更好。

remark
通俗来说,多头注意力机制就是将原来的一组 Q 、 K 、 V Q、K、V QKV增加至八组,就类似于CNN的多层卷积一样,卷积层越多,提取的特征越好。而多头注意力机制也同理。 F F N ( x ) = m a x ( 0 , x W 1 + b 1 ) W 2 + b 2 FFN(x)=max(0,xW_{1}+b_{1})W_{2}+b_{2} FFN(x)=max(0,xW1+b1)W2+b2虽然不同位置的线性变换是相同的,但它们在层与层之间使用不同的参数。

1.4.4 Position-wise Feed-Forward Networks

除了注意力子层之外,我们的编码器和解码器中的每一层都包含一个完全连接的前馈网络,该网络分别且相同地应用于每个位置。 这由两个线性变换组成,中间有一个 ReLU 激活。

1.4.5 Embeddings and Softmax

由于输入的为词,我们需要将其映射为向量,通俗来说,embedding就是给任何一个词,用一个长为 d m o d e l d_{model} dmodel的向量来表示它,在该文献中, d m o d e l = 512 d_{model}=512 dmodel=512,即编码器和解码器都需要有Embedding,在进入Softmax的输入端也需要进行Embedding。

1.4.6 Positional Encoding

简单理解就是需要给每个词向量加上位置编码,用以联系上下文,即这些词向量不管排列顺序如何发生变化,最终通过attention后,输出的注意力分数仍然不变,因为attention没有时序信息。

2. Transformer公式推导以及原理

RNN模型是分阶段执行的,即第一个时间段执行完后,才开始执行下一个时间点,整体执行过程为串行,输入序列需要一个个输入进模型中,输出序列也是一个个输出,这样的效率和性能较低。而Transformer拥有其强大的完全自注意力机制,能够实现序列处理的并行化,即输入一排向量,输出一排向量。

下面,我们来具体看一下Attention机制的推导过程以及每个词的注意力分数是如何计算的:
我们首先输入四个词向量 x 1 、 x 2 、 x 3 、 x 4 x^1、x^2、x^3、x^4 x1x2x3x4,它们各自会分别乘上 W q 、 W k 、 W v W_q、W_k、W_v WqWkWv,生成新向量 q ( q u e r y ) 、 k ( k e y ) 、 v ( v a l u e ) q(query)、k(key)、v(value) q(query)k(key)v(value),这里的 W q 、 W k 、 W v W_q、W_k、W_v WqWkWv为四个词向量共享的参数,计算公式如下 q i = W q x i q^{i}=W_{q}x^{i} qi=Wqxi k i = W k x i k^{i}=W_{k}x^{i} ki=Wkxi v i = W v x i v^{i}=W_{v}x^{i} vi=Wvxi我们以输出第一个向量 y 1 y^{1} y1为例,来了解一下attention机制的全部流程:

  1. 首先向量 q 1 q^{1} q1会和每个词向量对应的的 k k k 向量作内积,在本例中, q 1 q^{1} q1 k 1 k^{1} k1 内积得到 α 1 , 1 \alpha_{1,1} α1,1 q 1 q^{1} q1 k 2 k^{2} k2 内积得到 α 1 , 2 \alpha_{1,2} α1,2 q 1 q^{1} q1 k 3 k^{3} k3 内积得到 α 1 , 3 \alpha_{1,3} α1,3 q 1 q^{1} q1 k 4 k^{4} k4 内积得到 α 1 , 4 \alpha_{1,4} α1,4,在这里, α \alpha α代表的是每个词的注意力分数,该值越大,就说明这个位置更重要一些。
  2. 然后所有的 α \alpha α 注意力分数会通过一个softmax层,得到 α ′ \alpha^{'} α,分别为 α 1 i ′ , i = 1 , 2 , 3 , 4 \alpha^{'}_{1i},i=1,2,3,4 α1ii=1234,如下图所示:
    在这里插入图片描述
  3. 然后我们将得到的 α ′ \alpha^{'} α与其对应词向量的 v v v 相乘,让 α 1 , 1 ′ \alpha^{'}_{1,1} α1,1乘上 v 1 v^{1} v1 α 1 , 2 ′ \alpha^{'}_{1,2} α1,2乘上 v 2 v^{2} v2 α 1 , 3 ′ \alpha^{'}_{1,3} α1,3乘上 v 3 v^{3} v3 α 1 , 4 ′ \alpha^{'}_{1,4} α1,4乘上 v 4 v^{4} v4,将所有的乘积结果相加起来,得到最终的输出 y 1 y^{1} y1,如下图所示:
    在这里插入图片描述
    我们可以发现 α ′ \alpha^{'} α 相当于是向量 v v v 的权重,假设 α 1 , 2 ′ \alpha^{'}_{1,2} α1,2的值很大,那么我们在做按权求和的时候, v 2 v^{2} v2就会有更多的信息传入到 y 1 y^{1} y1,即 v 2 v^{2} v2得到了更多的关注。

下面我们用矩阵变换的思维回顾下这一整个过程:

首先是 x x x 向量分别乘上 W q 、 W k 、 W v W_q、W_k、W_v WqWkWv,生成 q 、 k 、 v q、k、v qkv 向量,这里,我们以生成 q 2 q_2 q2 向量为例,假设目标 q 2 q_2 q2的维度为2,输入向量 x 2 x_2 x2的维度为3,那么我们就需要训练一个2*3的矩阵进行转换,这里的 W q W_q Wq 为两行三列, x 2 x^2 x2为三行一列,这里实现了 x 2 x^2 x2 q 2 q^2 q2 的转换,同理,可以依次得到 q 1 、 q 3 、 q 4 q^1、q^3、q^4 q1q3q4,如下图:
在这里插入图片描述
然后我们将向量拼接成一个矩阵,同理,按照这种方式,可以得到 K 、 V K、V KV矩阵
在这里插入图片描述
在这里插入图片描述
接下来分别让 q 2 q^2 q2 k 1 、 k 2 、 k 3 、 k 4 k^1、k^{2}、k^3、k^4 k1k2k3k4做内积,分别得到 α 2 , 1 、 α 2 , 2 、 α 2 , 3 、 α 2 , 4 \alpha_{2,1}、\alpha_{2,2}、\alpha_{2,3}、\alpha_{2,4} α2,1α2,2α2,3α2,4,这里得到的 α 2 , 1 、 α 2 , 2 、 α 2 , 3 、 α 2 , 4 \alpha_{2,1}、\alpha_{2,2}、\alpha_{2,3}、\alpha_{2,4} α2,1α2,2α2,3α2,4均是 1 * 1 的向量,由于 q 2 q^2 q2为 2 * 1 的向量, k 1 k^1 k1 为 2 * 1 的向量,此时我们需要将 k k k 进行转置,将其转换成 1 * 2 的向量,最终得到的 α 2 , i \alpha_{2,i} α2,i 均为 1 * 1 的向量,我们可以将这四次矩阵运算整合成一次,将转置后的每个词向量的 k k k 上下堆叠,因此最终得到一个 4 * 1 的 α \alpha α 向量。
在这里插入图片描述
同理可以计算出其他词向量的注意力得分,将 α \alpha α 矩阵记为 A A A,将堆叠的 k k k 记为 K T K^{T} KT,将 q q q 记为 Q Q Q A = K T Q A=K^{T}Q A=KTQ
在这里插入图片描述
然后将每一列的 α \alpha α 做一次 softmax 的操作,进行归一化,即 A ′ = s o f t m a x ( A ) A^{'}=softmax(A) A=softmax(A)
在这里插入图片描述
最终我们将所有的 α 2 , i \alpha_{2,i} α2,i乘上 v i v^i vi,然后将其相加,得到 y 2 = α 2 , 1 v 1 + α 2 , 2 v 2 + α 2 , 3 v 3 + α 2 , 4 v 4 y^{2}=\alpha_{2,1}v^{1}+\alpha_{2,2}v^{2}+\alpha_{2,3}v^{3}+\alpha_{2,4}v^{4} y2=α2,1v1+α2,2v2+α2,3v3+α2,4v4,按照此思路,我们可以计算出其他词向量的输出值。

从上述推导过程中,我们可以发现,attention机制是忽视序列长度的,无论两个输入向量相隔有多远,q与k做内积,就能知道当前的词需要放多少注意力在序列中的各个词上,做到了通过语境、语意同步,联系了上下文。在处理序列任务的attention模型中,常常会对输入的词向量进行位置编码,对不同位置的词向量,加上不同的位置向量

3. Transformer整体执行流程

Transformer模型整体分为编码器和解码器,编码器用于提取输入的信息,比如我们用一排one-hot编码的向量作为编码器的输入,编码器就会自动的帮我们提取这句序列文本中有用的信息,得到另外一排向量,然后解码器结合编码器提取的信息来预测输出的结果,在解码器这部分就涉及到了transformer的另外一个特性——自回归,所谓自回归,就是前一时间段的输出会作为下一时间段的输入。

我们往解码器里输入一串向量,< bos > 代表 beginning of the sentence,表示形式为one-hot,然后解码器会根据编码器的输出和向量< bos >的信息输出第一个预测结果,然后再结合上一时间段解码器的输出结果和编码器的输出,输出第二个预测结果,以此类推,直至解码器输出终止向量< eos >代表endding of the sentence,当模型解码器发现已经输出了 < eos > 向量,也就是代表了整个序列文本已经输出完毕,因此也就可以停止运行,这就是自回归。
在这里插入图片描述

接下来我们来模拟下transformer编码器:

我们输入一排向量 nerver say never,首先会经过一个 input embedding 层,这样我们的词就会变成了词向量,接着就和上文我们所学习的attention模型一样,对每个向量进行位置编码,得到一排新的输出。
在这里插入图片描述
然后经过一个 self-attention 层,第一个向量生成的 q 与 所有的 k 作内积,得到 α \alpha α,接着 α \alpha α 做一个softmax操作,得到 α ′ \alpha^{'} α,所有的 v v v 乘上每个词向量对应的 α ′ \alpha^{'} α,然相加,得到最终的输出 y 1 y^{1} y1, 同理,我们可以得到 y 2 、 y 3 、 y 4 y^{2}、y^{3}、y^{4} y2y3y4,在编码器中,输入多少向量,输出就会有多少向量。
在这里插入图片描述
然后要经过一个 add&norm 层,它要对输入的向量进行残差连接和 layer normalization层标准化的操作,残差连接就是做做一个相加的操作,将原来的输入向量与selft-attention输出的向量相加,得到新的一排向量,在这里两组向量相加,需要保证两组向量的维度相同,残差连接目的是使得信息能够在网络中能够更好的传递,并帮助减轻梯度消失的问题。
在这里插入图片描述
这里的层标准化指的就是每个输出向量各自做一个标准化,即所有特征减去一个均值,除上标准差。就比如通过残差连接后,其中一个输出向量为 [ 1 3 5 ] \begin{bmatrix}1\\3\\5\end{bmatrix} 135,均值 μ = 1 + 3 + 5 3 = 3 \mu=\frac{1+3+5}{3}=3 μ=31+3+5=3,标准差 σ = ( 1 − 3 ) 2 + ( 3 − 3 ) 2 + ( 5 − 3 ) 2 3 ≈ 1.63 \sigma=\sqrt{\frac{(1-3)^2+(3-3)^2+(5-3)^2}{3} }\approx1.63 σ=3(13)2+(33)2+(53)2 1.63,因此 [ ( 1 − 3 ) 2 1.63 ( 3 − 3 ) 2 1.63 ( 5 − 3 ) 2 1.63 ] = [ − 1.83 0 1.83 ] \begin{bmatrix}\frac{(1-3)^2}{1.63}\\\frac{(3-3)^2}{1.63}\\ \frac{(5-3)^2}{1.63}\end{bmatrix}=\begin{bmatrix}-1.83\\0\\1.83\end{bmatrix} 1.63(13)21.63(33)21.63(53)2=1.8301.83,得到的就是标准化后的向量,同理,残差连接后的所有向量都要做一个layer normalization的操作。然后所有的向量都会经过一个 feed forward 层,它本质上就是一个全连接网络,然后得到一排相同维度和数量的向量,再进行残差连接和层标准化操作,这样我们的编码器部分就结束了。
在这里插入图片描述
接下来就是解码器部分,解码器这部分除了需要接受编码器的输入信息外,它还是自回归的,同编码器一样,我们需要对解码器的输入做一个output embedding操作,这里output embedding是逐个时间步对序列模型输出进行嵌入的过程,而不是一次性对所有序列进行嵌入,具体通过根据编码器输出向量的数量和维度,首先随机生成其对应数量的词向量(向量里的数值都是随机生成的)——这也就是掩码mask的操作,并依照时间段对其 一 一 进行词嵌入和位置编码。

在解码器部分,第一个时间段只有一个 < bos > 输入向量,对其进行Embedding操作和位置编码后,将编码器的输出信息和当前仅有< bos > 信息经过 masked self-attention,输出结果 “永”,在第二个时间段,解码器可以结合前面编码器的输出信息和后面 < bos >、“永” 两个词的信息来做运算,得到预测结果 “不”,同理,得到 “言”、“弃”,最后一个时间段,通过masked self-attention输出 < eos >,代表结束。
在这里插入图片描述
在这里插入图片描述

3.1 masked self-attention推导以及原理细节

我们首先有4个输入向量: x 1 、 x 2 、 x 3 、 x 4 x^{1}、x^{2}、x^{3}、x^{4} x1x2x3x4,其中 x 1 、 x 2 x^{1}、x^{2} x1x2代表解码器已经输出的向量,它们是可以利用的, x 3 、 x 4 x^{3}、x^{4} x3x4代表后面才能输出的向量,此时为向量的值为随机数值。masked self-attention的操作和普通的self-attention操作几乎一摸一样,具体步骤如下:
在这里插入图片描述

  1. 首先是所有的向量各自乘上 W q 、 W k 、 W v W_q、W_k、W_v WqWkWv,得到向量 q 、 k 、 v q、k、v qkv
  2. 然后我们以 q 1 q^1 q1做query操作为例,这里的 q 1 q^1 q1会与 k 1 、 k 2 、 k 3 、 k 4 k^1、k^2、k^3、k^4 k1k2k3k4分别做内积,计算注意力得分。
  3. 接着就是masked self-attention它独有的一个操作,就是把 x 3 、 x 4 x^3、x^4 x3x4这两个不想要关注的向量对应的注意力得分 α \alpha α的值全部设置为负无穷。
  4. 对四个 α \alpha α 做softmax操作,进行归一化,得到 α 1 , 1 ′ 、 α 1 , 2 ′ 、 α 1 , 3 ′ 、 α 1 , 4 ′ \alpha^{'}_{1,1}、\alpha^{'}_{1,2}、\alpha^{'}_{1,3}、\alpha^{'}_{1,4} α1,1α1,2α1,3α1,4,其中 α 1 , 1 ′ 、 α 1 , 2 ′ \alpha^{'}_{1,1}、\alpha^{'}_{1,2} α1,1α1,2均有值,而 α 1 , 3 ′ 、 α 1 , 4 ′ \alpha^{'}_{1,3}、\alpha^{'}_{1,4} α1,3α1,4的值均为0。
  5. α ′ \alpha^{'} α的值作为权重,所有的向量 v v v 按权相加求和,得到我们的最终输出结果 y 1 y^{1} y1 y 2 y^2 y2的操作和 y 1 y^1 y1一摸一样,而 y 3 、 y 4 y^3、y^4 y3y4它们对应位置的 x x x 还不存在,故我们暂时先将其设置为0。

得到输出向量后,需要经过残差连接和层归一化,然后后面是一个self-attention层,这里的attention和编码器的attention不一样,这里的是cross-attention,它用来混合编码器和解码器的信息,cross attention 会用解码器生成的 q q q,去查询编码器生成的 k k k,一起计算注意力得分后,softmax会将编码器的向量 v v v按权相加,得到cross attention的输出结果,下面我们来了解一下具体操作:
在这里插入图片描述

  1. 我们假设 never say never 这句话它经过transformer编码器,变成了3个向量
  2. 解码器这边的5个向量会生成对应的 q q q向量,编码器这边的3个向量会生成对应的 k 、 v k、v kv向量
  3. 我们永解码器这边的 q q q,去查询编码器这边的 k k k,即做一个内积的运算,得到注意力得分
  4. 接着经过softmax层,可以得到 α ′ \alpha^{'} α α ′ \alpha^{'} α与对应的 v v v相乘后相加,即可得到我们的输出 y y y

这里我们是通过 q 1 q^1 q1进行查询的结果,同理可以得到 y 2 、 y 3 、 . . . y^2、y^3、... y2y3...,输入几个向量,cross attention 则输出几个向量,接着输出的结果继续做一个残差和层归一化操作,得到一批新的向量,然后再经过前馈神经网络层,随后再经过残差和层归一化操作,得到一批向量,将这组向量输入进 Linear 层,这层其实就是做一个线性回归,将输入的x乘上矩阵W,加上偏置项b, L i n e a r ( x ) = W x + b Linear(x)=Wx+b Linear(x)=Wx+b,目的是为了转换向量的维度,通过Linear层后的向量和输出的向量y的维度一致,最后所有的向量经过softmax操作,即可得到输出的向量,这个向量的每一个维度代表一个中文字出现的概率值,数字越大就代表这个字出现的可能性越大。我们可以将每个向量位置中,最大的值置为1,其余的置为0。

总结

本周再次回顾了Transformer文献,理解了Transformer的执行原理和流程,对self-attention和masked self-attention有了更深入了了解

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Docker搭建YesPlayMusic网易云音乐播放器并发布至公网访问

目录 ⛳️推荐 1. 安装Docker 2. 本地安装部署YesPlayMusic 3. 部署公有云YesPlayMusic播放器 3.1 安装cpolar内网穿透 3.2 固定YesPlayMusic公网地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一…

PyQT5学习--新建窗体模板

目录 1 Dialog 2 Main Window 3 Widget Dialog 模板&#xff0c;基于 QDialog 类的窗体&#xff0c;具有一般对话框的特性&#xff0c;如可以模态显示、具有返回值等。 Main Window 模板&#xff0c;基于 QMainWindow 类的窗体&#xff0c;具有主窗口的特性&#xff0c;窗口…

Freemarker环境搭建快速入门

Freemarker环境搭建&快速入门 测试工程搭建快速入门Freemarker指令语法基础语法种类集合指令&#xff08;List和Map&#xff09;if指令运算符空置处理内建函数 输出静态化文件 测试工程搭建 创建一个freemarker-demo 的测试工程专门用于freemarker的功能测试与模板的测试。…

【数据结构】顺序表的实现——静态分配

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;数据结构 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

图片标注编辑平台搭建系列教程(3)——画布拖拽、缩放实现

简介 标注平台很关键的一点&#xff0c;对于整个图片为底图的画布&#xff0c;需要支持缩放、拖拽&#xff0c;并且无论画布位置在哪里&#xff0c;大小如何&#xff0c;所有绘制的点、线、面的坐标都是相对于图片左上角的&#xff0c;并且&#xff0c;拖拽、缩放&#xff0c;…

linux之进程

一、背景 冯.诺依曼体系结构 输入设备键盘、鼠标、摄像头、话筒、磁盘、网卡...输出设备显示器、声卡、磁盘、网卡...CPU运算器、控制器存储器一般就是内存 数据在计算机的体系结构进行流动&#xff0c;流动过程中&#xff0c;进行数据的加工处理&#xff0c;从一个设备到另一…

Qt 多线程QThread的四种形式

重点&#xff1a; 1.互斥量&#xff1a;QMutex配套使用&#xff0c;lock(),unlock(),如果一个线程准备读取另一个线程数据时候采用tryLock()去锁定互斥量&#xff0c;保证数据完整性。 QMutexLocker简化版的QMutex,在范围区域内使用。 QMutex mutex QMutexLocker locker(&…

【unity】如何汉化unity编译器

在【unity】如何汉化unity Hub这篇文章中&#xff0c;我们已经完成了unity Hub的汉化&#xff0c;现在让我们对unity Hub安装的编译器也进行下汉化处理。 第一步&#xff1a;在unity Hub软件左侧栏目中点击安装&#xff0c;选择需要汉化的编译器&#xff0c;再点击设置图片按钮…

Dubbo启动流程

Java面试题 Dubbo启动流程 1.服务提供者将服务实例化后注册到注册中心。 2.服务消费者向注册中心订阅所需的服务。 3.注册中心将服务提供者注册的服务地址推送给服务消费者&#xff0c;同时基于长链接推送变更。 4.服务消费者通过代理对象&#xff08;Proxy&#xff09;发起远…

Java毕业设计-基于springboot开发的休闲娱乐代理售票系统-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、后台登录2.1管理员功能2.2用户功能 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的休闲娱乐…

腾讯云优惠券领取及使用常见问题解答

随着云计算的普及&#xff0c;腾讯云作为国内领先的云计算服务提供商&#xff0c;为越来越多的企业和个人提供了丰富的云产品和服务。为了帮助用户更好地了解和使用腾讯云优惠券&#xff0c;本文将为大家解答关于腾讯云优惠券领取及使用的常见问题。 一、腾讯云优惠券概述 腾讯…

利用互斥锁解决缓存击穿问题

2.9 利用互斥锁解决缓存击穿问题 核心思路&#xff1a;相较于原来从缓存中查询不到数据后直接查询数据库而言&#xff0c;现在的方案是 进行查询之后&#xff0c;如果从缓存没有查询到数据&#xff0c;则进行互斥锁的获取&#xff0c;获取互斥锁后&#xff0c;判断是否获得到了…

包子凑数(蓝桥杯,闫氏DP分析法)

题目描述&#xff1a; 小明几乎每天早晨都会在一家包子铺吃早餐。 他发现这家包子铺有 N 种蒸笼&#xff0c;其中第 i 种蒸笼恰好能放 Ai 个包子。 每种蒸笼都有非常多笼&#xff0c;可以认为是无限笼。 每当有顾客想买 X 个包子&#xff0c;卖包子的大叔就会迅速选出若干笼…

爱上数据结构:顺序表和链表

一、线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条…

netty rpc框架 即时通讯

Netty是Java领域有名的开源网络库&#xff0c;特点是高性能和高扩展性&#xff0c;因此很多流行的框架都是基于它来构建的&#xff0c;比如我们熟知的Dubbo、Rocketmq、Hadoop等&#xff0c;针对高性能RPC&#xff0c;一般都是基于Netty来构建&#xff0c;比如sock-bolt。总之一…

2024-3-28 市场情绪强修复

这一轮退潮负反馈都修复了&#xff0c; 艾艾精工 博信股份 安奈尔 永悦科技 大理药业 &#xff0c;高新发展 也补跌了&#xff0c;收尸队也干活了&#xff0c;情绪不修复不接力得最好写照。这轮周期 宁科生物 已经7板&#xff0c;已经追平了 博信股份7板&#xff0c;看明天溢…

18.字面量

文章目录 一、字面量二、区分技巧三、扩展&#xff1a; /t 制表符 一、字面量 在有些资料&#xff0c;会把字面量说成常量、字面值常量&#xff0c;这种叫法都不是很正确&#xff0c;最正确的叫法还是叫做&#xff1a;字面量。 作用&#xff1a;告诉程序员&#xff0c;数据在…

环信IM集成教程---消息转发合并转发的实现

前言 在发送消息体系中&#xff0c;转发消息是一个重要的环节&#xff0c;可以单条转发也可以合并转发。本文教大家在接入环信IM过程中如何实现单条转发&#xff0c;合并转发消息功能&#xff0c;同时举例一些容易踩坑的位置&#xff0c;以便大家尽快顺利的实现转发消息功能。…

高效 CUDA 调试:将 NVIDIA Compute Sanitizer 与 NVIDIA 工具扩展结合使用并创建自定义工具

高效 CUDA 调试&#xff1a;将 NVIDIA Compute Sanitizer 与 NVIDIA 工具扩展结合使用并创建自定义工具 NVIDIA Compute Sanitizer 是一款功能强大的工具&#xff0c;可以节省您的时间和精力&#xff0c;同时提高 CUDA 应用程序的可靠性和性能。 在 CUDA 环境中调试代码既具有挑…

Exception in thread “main“ com.fasterxml.jackson.databind.JsonMappingException:

问题&#xff1a;jaskson反序列化超出最大长度 Caused by: com.fasterxml.jackson.core.exc.StreamConstraintsException: String length (5043456) exceeds the maximum length (5000000) 场景&#xff1a;前端传递过大base64 原因&#xff1a; jaskon默认已经限制了最大长…