attention机制总结一

1. 机器翻译attention

在seq2seq结构中,针对一个样本,decoder的每个输入(字向量)都是encoder的最后一个词的输出。attention机制企图达到以下目的:以将“机器学习”翻译成machine learning为例。decoder中第一次只想关注机器,从而翻译成machine;第二次只想关注学习,并翻译成learning。因此,decoder中每个输入(字向量)都是不一样的。(下图为普通的seq2seq,encoder最后一层的输出是decoder的h0)
seq2seq
为了达到decoder每次的输入都不一样,引入了attention机制(本质上是一种加权和),如第一次只想关注机器,故可以把机和器的权重均设置成0.5,学和习的权重均设置成0(0.5和0都是讲解时的一种假设,具体为多少是学习出来的)。
在这里插入图片描述
现在讲解如何得到decoder的第一个输入(在encoder层加入attention机制)。机器学习四个字每个字对应一个字向量 x 1 , x 2 , x 3 , x 4 x_1, x_2, x_3, x_4 。其组成一个矩阵X(每一行代表 x i x_i ),现在有一个 z 0 z_0 列向量( z 0 z_0 是网络学习出来的,相当于一个query,代表我想找到机器) z 0 z_0 向量分别与 x i x_i 相乘,得到 h = ( h 1 , h 2 , h 3 , h 4 ) h=(h_1, h_2, h_3, h_4) ,h是一个列向量, h i h_i 为一个数,即 x i x_i z 0 z_0 的内积。将h向量转置成行向量后softmax得到 p = p 1 , p 2 , p 3 , p 4 p=p_1,p_2,p_3,p_4 (p是一个行向量),softmax的结果相当于概率值,代表了 x 1 , x 2 , x 3 , x 4 x_1, x_2, x_3, x_4 的权重。然后进行如下运算 i = 1 n p i x i \sum\limits_{i = 1}^{n}p_i x_i ,,为每个字向量乘以权重后相加。
上述讲到了如何得到decoder的第一次输入,如何得到decoder的第二次输入呢,原理相同,只是将 z 0 z_0 变成了 z 1 z_1 ,而 z 1 z_1 由RNN的结构决定,即初始的 z 0 z_0 与本次的输入经RNN层的结果。如此循环,直至遇到EOS结束。详见下图。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

回顾上述过程,softmax里面的内容 X z Xz ,我们采用的是每个向量内积的方式,而这一方式决定了每个字向量的概率(softmax前的概率),因此这一过程很重要,这一过程也被称为match操作,match操作有很多,可以是刚才的内积方式,也可以是其他很多,常见的有以下三种方式:

  • 内积
  • 简单神经网络
  • Z(XW)T

2. attention机制的泛化表示

借助机器翻译中的attention,对attention机制做一个概括。之前看attention经常会提到三个词Q(query)、K(key)、V(value)。下面以阅读理解为例讲解这三个字母的含义,给一篇文章和一个问题,得到该问题的答案。该篇文章就相当于上述的V(矩阵,每一行代表字向量或者词向量,也即机器翻译中的‘机器学习’四个字构成的矩阵),问题就相当于Q(第一行代表该问题,第二行是对该问题向量的修正,也即机器翻译中的Z),K可以等于V,也可以是VW等方式进行转化,主要是拿V的变形(机器翻译中直接是V或者X本身)与Q相乘再softmax得到每个 v i v_i 的概率值,得到概率值后再与V相乘(效果是数与向量相乘再相加,得到加权后的向量,多次这样操作,就得到了矩阵,每行代表加权后的向量)。
因此上述过程可以表示成 s o f t m a x ( m a t c h ( K , Q ) V ) softmax(match(K,Q)V)
简单的attention操作是在输入与target之间进行的,下面讲到的self-attention则是在输入之间进行的,具体操作下面会讲到

3. self-attention

给定一个输入向量X,可以通过下面操作分别得到K、Q、V:在encoder层, K = X W k ; ; ; Q = X W q ; ; V = X W v ; K=XW_k;;;Q=XW_q;;V=XW_v; 。同样的原理encoder+attention后的输出为 o u t = s o f t m a x ( m a t c h ( K , Q ) ) V out=softmax(match(K,Q))V ,在transformer结构中out=softmax(QK^T)V。具体的分解过程如下图所示,可更好的理解self-attention。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到self-attention中Q的每个向量是相互独立的,即 q i + 1 q_{i+1} 不依赖于 q i q_i ,故可以直接矩阵运算(并行)。机器翻译的例子中,虽然也可以表示成矩阵形式,但是 q i + 1 q_{i+1} 依赖于 q i q_i ,或者说 z i + 1 z_{i+1} 依赖于 z i z_i ,故只能串行运算。

multi-self-attention

multi-self-attention和selfattention的原理很相似,只是得到Q、K、V时不止得到一个,而是多个,以两个为例, K 1 = X W k 1 ; ; ; Q 1 = X W q 1 ; ; V 1 = X W v 1 ; K_1=XW_k^1;;;Q_1=XW_q^1;;V_1=XW_v^1;
K = 2 X W k 2 ; ; ; Q 2 = X W q 2 ; ; V 2 = X W v 2 ; K_=2XW_k^2;;;Q_2=XW_q^2;;V_2=XW_v^2;
上述过程也可以写成矩阵相乘得方式,只是现在的矩阵是广义的形式,本例中K、Q、V都是三维,最后两维的矩阵即 K i K_i ,第0维即代表了i。之前对于一次self-attention得到的是一个向量,现在由于multi,得到的是一个矩阵,每行代表一头的结果,然后对这多头进行method操作,method可以是向量求和,也可以是均值,拼接等。tansformer中为拼接操作
分解的图如下所示:
在这里插入图片描述
在这里插入图片描述

发布了111 篇原创文章 · 获赞 113 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43178406/article/details/102811815