基于Transformer和视觉Transformer的注意力机制

基于Transformer和视觉Transformer的注意力机制

基于注意力机制的神经网络是一种强大的工具。根据输入特征的重要性来分配神经网络的资源调整权重,使神经网络集中处理输入中的关键信息,提高模型的准确性和鲁棒性

Transformer

Transformer是一种基于注意力机制的序列模型,最初由Google的研究团队提出并应用于机器翻译任务。Transformer仅使用自注意力机制(self-attention)来处理输入序列和输出序列,因此可以并行计算,极大地提高了计算效率。下面是Transformer的详细解释。

自注意力机制

允许模型在处理序列时,将输入序列的每个元素与其他元素进行比较,以便在不同上下文中正确的处理每个元素

有三个重要输入矩阵:查询矩阵Q、键矩阵K、值矩阵V,这三个矩阵都是由输入序列X经过不同的线性变换得到的。

查询矩阵Q和键矩阵K经过softmax函数得到一个概率分布,该分布表示每个元素对于查询矩阵Q的重要性

将这个概率分布乘以值矩阵V得到注意力向量,表示每个元素的值加权平均后的结果

多头注意力机制

多个并行的自注意力机制进行处理

得到多个自注意力向量

模型结构

Transformer模型由编码器和解码器两部分组成,模型结构如下

左侧为encoder部分,右侧为decoder部分,N表示encoder和decoder有N个block,会经过N次的encoder、decoder过程,如下(N=6)

整体结构来分析工作流程:

  • 将输入特征转换为自注意力向量矩阵

  • 将自注意力矩阵输入到encoder部分输出编码矩阵

  • 将编码矩阵C传给encoder并结合输入的目标语言的词矩阵,根据翻译过的单词来预测下一个单词

下图中,左侧根据句子开始符 “Begin” (第0个单词),预测第一个单词单词 “I” ;右侧根据开始符 “Begin” 和单词 “I”,预测单词 “have”,以此类推,得到整个句子的翻译结果。

Transformer Encoder

单个Encoder Block是由Multi-Head Attention、Add & Norm、Feed Forward、Add & Norm组成,经过N次encoder block堆叠再输出。第一个encoder block的输入是经过两层embedding得到的,后续几个Encoder Block则是前一个Encoder Block的输出。

下图中红色方框为Encoder Block结构:

Multi-Head Attention

将多个输出拼接在一起然后进行线性变换来降低维度

Add & Norm

Add,加上类似ResNet提出的残差连接,用来解决深层网络训练不稳定的问题,防止梯度消失(不稳定指:深度神经网络随着网络层数的增加,loss逐渐减小,然后趋于稳定达到饱和,然后再继续增加网络层数,loss反而增大)。

Norm(Normalize)为归一化层(加快训练速度、提高训练的稳定性),这里用的是Layer Norm。

Feed Forward

前馈神经网络(Feed-Forward Networks)这一层由两个全连接层(MLP:多层感知机)构成,第一层的激活函数为Relu,第二层不使用激活函数。对应公式如下:
$$
FFN(x) = max(0,XW_1+b_1)W_2+b_2
$$

Transformer Decoder

Decoder Block也由Multi-Head Attention、Add & Norm、Feed Forward组成,但Decoder Block中的Multi-Head Attention与Encoder Block中的不同。下图中红色方框部分为Decoder Block结构:

可以看到图中两个Multi-Head Attention层

  • 第一个采用了Masked操作
  • 第二个的K和V使用了Encoder的编码信息矩阵C,而Q使用上一个Decoder Block的输出

Masked Multi-Head Attention

作为Decoder Block的第一个 Multi-Head Attention,它采用了 Mask 操作,因为在翻译的过程中是按顺序翻译的,即翻译完第 i 个单词,才可以翻译第 i+1 个单词。通过 Mask 操作可以防止第 i 个单词知道第 i 个单词之后的信息。

下面以 “我有一只猫” 翻译成 “I have a cat” 为例,了解一下 Mask 操作。

如上图所示。首先根据输入 ““ 预测出第一个单词为 “I”,然后根据输入 “ I” 预测下一个单词 “have”。

mask过程:

  • 根据输入矩阵生成Mask矩阵。输入矩阵包含 “ I have a cat” (0, 1, 2, 3, 4) 共5个单词的表示向量
  • 通过矩阵X线性计算Q、K、V矩阵,然后计算$QK^T$

  • 使用softmax()计算自注意力向量

Multi-Head Cross-Attention

Decoder Block 第二个 Multi-Head Attention 也叫多头交叉注意力(Multi-Head Cross-Attention),主要的区别在于 Attention 的 K, V 矩阵不是来自上一个 Decoder Block 的输出计算的,而是来自Encoder输出的编码信息矩阵CQ还是根据上一个Decoder Block 的输出 Z 得到的

Transformer输出

通过N次Decode Block后,再经过一次线性变换,然后经过Softmax得到输出的概率分布,分类数为字典长度,输出概率最大的单词作为我们的预测输出

Linear层将 Decoder Block 输出的编码矩阵,转化成一个跟词表大小一样的 logit 矩阵。词表通常很大,比如 WMT翻译任务中,英德词表有三万多个 subword

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2024 John Doe
  • 访问人数: | 浏览次数:

让我给大家分享喜悦吧!

微信