Transformer 初识:模型结构+attention原理详解

Transformer 初识:模型结构+原理详解

    • 参考资源
    • 前言
    • 1.整体结构
      • 1.1 输入:
      • 1.2 Encoder 和 Decoder的结构
      • 1.3 Layer normalization
        • Batch Normalization和Layer Normalization对比
        • Batch Normalization
        • Layer Normalization
    • 2. self-attention
      • 2.1 什么是 Attention Mechanisms?
      • 2.2 什么是 self-attention?
      • 2.3 对比self-attention和CNN
      • 2.4 self-attention如何计算?
    • 3. Multi-Head Attention
      • 3.1 multi-headed结果
      • 3.2 multi-headed机制
      • 3.3 为什么需要进行Multi-head Attention
    • 4. 位置编码


参考资源

知乎:Transformer模型详解(图解最完整版)
知乎:详解Transformer (Attention Is All You Need)
知乎:[整理] 聊聊 Transformer
知乎:Vision Transformer 超详细解读 (原理分析+代码解读) (一)
CSDN:史上最小白之Transformer详解
Attention? Attention!
代码:https://github.com/pengshuang/Transformer
代码:https://github.com/Kyubyong/transformer
论文:Attention Is All You Need
书籍:《Transformer自然语言处理Natural Language Processing with Transformers》
Transformer 初识:模型结构+attention原理详解_第1张图片


前言

CNN 的缺点: 要获得大的感受野需要堆叠很多层卷积
Transformer的优点: 不需要堆叠即可以获得全局信息

Transformer相比于RNN/LSTM,有什么优势?为什么?

  1. LRNN系列的模型,并行计算能力很差。RNN并行计算的问题就出在这里,因为 T 时刻的计算依赖 T-1 时刻的隐层计算结果,而 T-1 时刻的计算依赖 T-2 时刻的隐层计算结果,如此下去就形成了所谓的序列依赖关系。
  2. Transformer的特征抽取能力比RNN系列的模型要好。
    具体实验对比可以参考:放弃幻想,全面拥抱Transformer:自然语言处理三大特征抽取器(CNN/RNN/TF)比较

1.整体结构

Transformer是一个基于Encoder-Decoder框架的模型。其中:

一个encoder由Multi-Head Attention 和 全连接神经网络Feed Forward Network构成;两个部分,都有一个残差连接(residual connection),然后接着一个 Layer Normalization

一个decoder由Masked Multi-Head Attention,Multi-Head Attention 和 FFN 构成。比Encoder多了一个Masked Multi-Head Attention;和 encoder 一样,上面三个部分的每一个部分,都有一个残差连接,后接一个 Layer Normalization
Transformer 初识:模型结构+attention原理详解_第2张图片

1.1 输入:

输入inputs embedding后需要给每个word的词向量添加位置编码positional encoding
Transformer 初识:模型结构+attention原理详解_第3张图片
输入 x 和其添加的位置编码 t 示例:
Transformer 初识:模型结构+attention原理详解_第4张图片

1.2 Encoder 和 Decoder的结构

Encoder的结构如图:
self-attentionFeed Forward neural network组成
Transformer 初识:模型结构+attention原理详解_第5张图片
Decoder的结构如图:
Transformer 初识:模型结构+attention原理详解_第6张图片

它和encoder的不同之处在于Decoder多了一个Encoder-Decoder Attention,两个Attention分别用于计算输入和输出的权值:

  • Self-Attention:当前翻译和已经翻译的前文之间的关系;
  • Encoder-Decnoder Attention:当前翻译和编码的特征向量之间的关系。

1.3 Layer normalization

Normalization 有很多种,但是它们都有一个共同的目的,那就是把输入转化成均值为 0 方差为 1 的数据。我们在把数据送入激活函数之前进行 normalization(归一化),因为我们不希望输入数据落在激活函数的饱和区。

Batch Normalization和Layer Normalization对比

Batch Normalization强行让一个batch的数据的某个channel μ = 0 , σ = 1 \mu =0,\sigma =1 μ=0,σ=1

而Layer Normalization让一个数据的所有channel μ = 0 , σ = 1 \mu =0,\sigma =1 μ=0,σ=1
Transformer 初识:模型结构+attention原理详解_第7张图片
Transformer 初识:模型结构+attention原理详解_第8张图片

Batch Normalization

BN 的主要思想就是:在每一层的每一批数据上进行归一化。我们可能会对输入数据进行归一化,但是经过该网络层的作用后,我们的数据已经不再是归一化的了。随着这种情况的发展,数据的偏差越来越大,我的反向传播需要考虑到这些大的偏差,这就迫使我们只能使用较小的学习率来防止梯度消失或者梯度爆炸。

BN 的具体做法就是对每一小批数据,在批这个方向上做归一化。
Transformer 初识:模型结构+attention原理详解_第9张图片
Transformer 初识:模型结构+attention原理详解_第10张图片

Layer Normalization

LN 是在每一个样本上计算均值和方差,而不是 BN 那种在批方向计算均值和方差!
Transformer 初识:模型结构+attention原理详解_第11张图片
Transformer 初识:模型结构+attention原理详解_第12张图片

2. self-attention

2.1 什么是 Attention Mechanisms?

注意力背后的主要想法是,编码器不是为输入序列产生一个单一的隐藏状态,而是在每一步输出一个隐藏状态,供解码器访问。这就是注意力的作用:它让解码器在每个解码时间段为每个编码器状态分配不同的权重,或称 “注意力”。下图说明了这个过程,其中注意力的作用是预测输出序列中的第三个符号。
Transformer 初识:模型结构+attention原理详解_第13张图片
通过关注在每个时间点上哪些输入标记是最相关的,这些基于注意力的模型能够学习生成的翻译中的词和源句中的词之间的非线性排列。例如,下图直观地显示了英译法模型的注意力权重,其中每个像素表示一个权重。图中显示了解码器是如何正确对齐 "zone "和 "Area "这两个词的,这两个词在两种语言中的排序不同。
Transformer 初识:模型结构+attention原理详解_第14张图片

2.2 什么是 self-attention?

The “self” part of self-attention refers to the fact that these weights are computed for all hidden
states in the same set—for example, all the hidden states of the encoder. By contrast, the attention mechanism associated with recurrent models involves computing the relevance of each encoder hidden state to the decoder hidden state at a given decoding timestep.
The main idea behind self-attention is that instead of using a fixed embedding for each token, we can use the whole sequence to compute a weighted average of each embedding. Another way to formulate this is to say that given a sequence of token embeddings x1, …, xn, self-attention produces a sequence of new embeddings x′1, …, x′n where each x′i is a linear combination of all the xj: 在这里插入图片描述
——《Transformer自然语言处理Natural Language Processing with Transformers 》

self attention 的“self”部分指的是这些权重是针对同一集合中的所有隐藏状态计算的——例如,编码器的所有隐藏状态。相比之下,与递归模型相关的注意机制涉及在给定的解码时间步计算每个编码器隐藏状态与解码器隐藏状态的相关性。上式中 系数 w j i w_{ji} wji 称为注意力权重
Transformer 初识:模型结构+attention原理详解_第15张图片

2.3 对比self-attention和CNN

在使用self-attention去处理一张图片的时候,1的那个pixel产生query,其他的各个pixel产生key。在做inner-product的时候,考虑的不是一个小的范围,而是一整张图片。

但是在做CNN的时候是只考虑感受野红框里面的资讯,而不是图片的全局信息。

即:CNN考虑感受野范围,而self-attention考虑的不是一个小的范围,而是一整张图片

但是self-attention由attention找到相关的pixel,就好像是感受野的范围和大小是自动被学出来的,所以CNN可以看做是self-attention的特例

Transformer 初识:模型结构+attention原理详解_第16张图片

但,既然self-attention是更广义的CNN,则这个模型更加flexible,训练它所需要的数据量就越多,所以在训练self-attention模型时就需要更多的数据,这一点在论文 ViT 中有印证,它需要的数据集是有3亿张图片的JFT-300,而如果不使用这么多数据而只使用ImageNet,则性能不如CNN。

2.4 self-attention如何计算?

三个需要训练的矩阵
Q: query,要去查询的
K: key,等着被查的
V: value,实际的特征信息

在self-attention中,每个单词有3个不同的向量,它们分别是Query向量( Q Q Q ),Key向量( K K K )和Value向量( V V V),长度均是64。它们是通过3个不同的权值矩阵由嵌入向量 X X X 乘以三个不同的权值矩阵 W Q W^Q WQ W K W^K WK W V W^V WV 得到,其中三个矩阵的尺寸也均是 512 x 64 。

假如输入序列是"Thinking Machines",x1,x2就是对应地"Thinking"和"Machines"添加过位置编码之后的词向量,然后词向量通过三个权值矩阵 W Q W^Q WQ W K W^K WK W V W^V WV ,转变成为计算Attention值所需的Query,Keys,Values向量。

Q,K,V的关系示例图:
Transformer 初识:模型结构+attention原理详解_第17张图片

Q,V,K的矩阵计算:
Transformer 初识:模型结构+attention原理详解_第18张图片

不管是哪种 attention,我们在计算 attention 权重的时候,可以选择很多方式,常用的方法有

  • additive attention
  • local-base
  • general dot-product
  • scaled dot-product

Transformer模型采用的是最后一种:scaled dot-product attention
通过 query 和 key 的相似性程度来确定 value 的权重分布,计算公式如下:

Self-Attention的向量计算:
Transformer 初识:模型结构+attention原理详解_第19张图片
其中 d k d_{k} dk 表示 Key 的维度,默认用 64。

下面3张图表示一样的意思:
Transformer 初识:模型结构+attention原理详解_第20张图片Transformer 初识:模型结构+attention原理详解_第21张图片
Transformer 初识:模型结构+attention原理详解_第22张图片

3. Multi-Head Attention

Multi-Head Attention相当于 h 个不同的self-attention的集成(ensemble),在这里我们以 h=8 举例说明。Multi-Head Attention的输出分成3步:

  1. 将数据 X X X 分别输入到8个self-attention中,得到8个加权后的特征矩阵 Z i Z_{i} Zi
  2. 将8个 Z i Z_{i} Zi 按列拼成一个大的特征矩阵;
  3. 特征矩阵经过一层全连接后得到输出 Z Z Z
    Transformer 初识:模型结构+attention原理详解_第23张图片

3.1 multi-headed结果

不同的注意力结果
得到的特征向量表达也不相同

3.2 multi-headed机制

一组q,k,v得到了一组当前词的特征表达
类似卷积神经网络中的filter

3.3 为什么需要进行Multi-head Attention

原论文中说到进行Multi-head Attention的原因是将模型分为多个头,形成多个子空间,可以让模型去关注不同方面的信息,最后再将各个方面的信息综合起来。其实直观上也可以想到,如果自己设计这样的一个模型,必然也不会只做一次attention,多次attention综合的结果至少能够起到增强模型的作用,也可以类比CNN中同时使用多个卷积核的作用,直观上讲,多头的注意力有助于网络捕捉到更丰富的特征/信息。

4. 位置编码

在self-attention中每个词都会考虑整个序列的加权,所以其出现位置并不会对结果产生什么影响,相当于放哪都无所谓,(类似功能更强大的词袋模型),但是这跟实际就有些不符合了,我们希望模型能对位置有额外的认识。

为了解决这个问题,论文在编码词向量时引入了位置编码 PE(Position Embedding)。具体地说,位置编码会在词向量中加入了单词的位置信息,这样Transformer就能区分不同位置的单词了。

如果缺失了位置信息,可能的结果就是:所有词语都对了,但是无法组成有意义的语句。

在实现的时候使用正余弦函数。公式如下:

Transformer 初识:模型结构+attention原理详解_第24张图片
其中,pos 是指词语在序列中的位置。可以看出,在偶数位置,使用正弦编码,在奇数位置,使用余弦编码


本篇是 Transformer 基础原理知识点, 对小白友好

Transformer最初提出是针对NLP领域的

对于计算机视觉方向,Vision Transformer (ViT) 将 CV 和 NLP 领域知识结合起来

可以参考下篇文章 :Vision Transformer

你可能感兴趣的:(transformer,深度学习,人工智能)