当前位置:   article > 正文

十一、注意力机制(Attention Mechanism)_注意力机制结构图

注意力机制结构图

注意力机制是一种模仿人类视觉和认知系统的方法,允许神经网络在处理输入数据时集中注意力于相关的部分。核心目标也是从众多信息中选出对当前任务目标更加关键的信息。

通过引入注意力机制,神经网络能够自动地学习并选择性地关注输入中的重要信息,提高模型的性能和泛化能力。注意力机制最主要包括自注意力机制多头自注意力机制。不同的注意力机制模型对输入序列的不同位置分配不同的权重,以便在处理每个序列元素时专注于最相关的部分。参考注意力机制综述

1 自注意力机制(Self-Attention Mechanism)

自注意力机制的基本思想是,在处理序列数据时,每个元素都可以与序列中的其他元素建立关联,而不仅仅是依赖于相邻位置的元素。它通过计算元素之间的相对重要性来自适应地捕捉元素之间的长程依赖关系。

具体而言,对于序列中的每个元素,自注意力机制计算每一个元素与其他元素之间的相似度,并将这些相似度归一化为注意力权重。然后,通过将每个元素与对应的注意力权重进行加权求和,可以得到自注意力机制的输出。参考多头自注意力机制介绍

在自注意力机制中,输入序列首先通过线性变换得到查询(Query)、键(Key)和值(Value)向量。然后,通过计算查询向量 Q 与键向量 K 之间的相似度得到注意力 Attention 权重,再将注意力权重与值(输入特征)向量 V 相乘并求和,得到最终的输出表示。

自注意力机制计算过程原理图如下所示:

从输入的 x(1) 得到所对应的输出 b(1) 的过程:

  • 第一步:最底层的输入 x(i) 表示输入的序列数据,代表某个句子的第 i 个词所对应的向量;
  • 第二步:通过嵌入层将第一步得到的向量进行初步的 word embedding,得到 a(i);
  • 第三步:使用三个权重矩阵 W(Q)、W(K)、W(V) 分别与 word embedding 相乘,得到 q(i)、 k(i)、v(i);
  • 第四步:利用 q(1) 分别与 k(1), k(2), k(3)…k(T) 计算向量点积,得到 a(1,1), a(1,2), a(1,3),…, a(1,T);
  • 第五步:将 a(1,1), a(1,2), a(1,3),…, a(1,T) 输入softmax层,从而得到均在(0-1)之间的注意力权重值:a^(1,1), a^(1,2), a^(1,3),…, a^(1,T);
  • 第六步:将 a^(1,1), a^(1,2), a^(1,3),…, a^(1,T) 分别与对应位置的 v(1), v(2), v(3)…v(T)  相乘,然后求和,这样便得到了与输入的 x(1) 所对应的输出 b(1)。
  • 第七步:同样地,与输入的 x(2) 所对应的输出 b(2) 也根据类似过程获得,只是此时是利用与 x(2) 对应的 q(2) 分别与 k(1), k(2), k(3)…k(T) 计算向量点积

从输入的 x(2) 得到所对应的输出 b(2) 的过程:

从输入的 x(3) 得到所对应的输出 b(3) 的过程:

从输入的 x(T) 得到所对应的输出 b(T) 的过程:

对于输入的序列 x(1), x(2), x(3)…x(T) 与 RNN 和 LSTM 的处理过程不同,Self-Attention 机制能够对 x(1), x(2), x(3)…x(T) 进行并行计算,大大提高了对 x(1), x(2), x(3),…, x(T) 特征进行提取(即获得 b(1), b(2), b(3),…, b(T))的速度。

Self-Attention 的计算过程如下:

由上图可以看到,通过对输入 I 分别乘以三个权重矩阵 W(Q)、W(K)、W(V), 我们便得到了三个矩阵 Q、K、W,然后得到注意力矩阵 a^ ,进而得到输出 。

多头自注意力机制(Multi-head Self-Attention Machanism)

多头自注意力机制通过使用多个独立的注意力头,分别计算注意力权重,并将它们的结果进行拼接或加权求和,旨在增强模型的表达能力和泛化能力。

多头自注意力机制的原理图:

如果将前文中得到的 q(i)、 k(i)、v(i) 整体看做一个“头”,则“多头”则指的是对于特定的 x(i) 来说,需要用多组 W(Q)、W(K)、W(V) 与之相乘,进而得到多组 q(i)、 k(i)、v(i) 。

以上图中输入的 x(1) 为例,通过多头(这里取 head = 3)注意力机制得到了三个输出 b1(head)、b2(head)、b3(head),为了获得与 x(1) 对应的输出 b(1),在 Multi-headed Self-attention 中,我们会将这里得到的 b1(head)、b2(head)、b3(head) 进行拼接(向量首尾相连),然后通过线性转换(即不含非线性激活层的单层全连接神经网络)得到 b(1)。对于序列中的其他输入也是同样的处理过程,且它们共享这些网络的参数。

多头自注意力机制通过引入多个注意力头(Attention Head),每个头都可以学习到不同的关注点和语义信息。每个头都会生成一个输出表示,最后将这些表示进行拼接或加权求和,得到最终的输出表示。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/514790
推荐阅读
相关标签
  

闽ICP备14008679号