Attention、self-attention:从计算、公式的角度详解

参考:

这个视频量短而精

https://www.youtube.com/watch?v=XhWdv7ghmQQ

GitHub - wangshusen/DeepLearning


 

以机器翻译、rnn-seq2se2引入attention为例

1.attention

Attention、self-attention:从计算、公式的角度详解_第1张图片

最早提出attention的是15年的这篇论文

Attention、self-attention:从计算、公式的角度详解_第2张图片

 在encoder结束之后,output一个全局的s0,这包含了h1...hm的所有信息,同时s0也作为decoder的input。

权重apha表示s和h的相关性,(相关性越高,权重越大)。

encoder有m个状态,所以一共有m个apha,这里所有的值都是介于0和1的实数,全部加起来为1。

计算s0 hi的相关性的两种方式 

  1. 方式(1)Attention、self-attention:从计算、公式的角度详解_第3张图片用softmax归一化函数,来对apha 进行处理,使其解释性更强。w和v都是超参数
  2. 方式(2)

Attention、self-attention:从计算、公式的角度详解_第4张图片

 Wk Wq是在对hi s0向量作线性变换。与transformer相对应到的就是K Q ,那么问题来了?矩阵V怎么来的???


Attention、self-attention:从计算、公式的角度详解_第5张图片 


 计算过程

Attention、self-attention:从计算、公式的角度详解_第6张图片

 以当前输入x1‘ 为例。

  • 上一步骤已经计算得到c0

aph i的意义:s0与hi 的相关性,也可认为是权重 

c0的意义:h1,...hm的加权平均,所以它知道x1,..xm的所有信息

  • 计算s1

Attention、self-attention:从计算、公式的角度详解_第7张图片

Attention、self-attention:从计算、公式的角度详解_第8张图片

新的s1与没有加入attention的相比,在于在contact时候,加入了一个c0,信息更丰富了。由于c0知道x1,..xm的所有信息,因此现在的s1也能知道encoder完整的输入

  • 计算c1

 虽然上一步骤已经计算了apha ,但在进行状态更新时,仍然需要重新计算


2. self-attention

在rnn-seq2seq中,attention用在了decoder和encoder之间,也就是两个rnn上,而在一个rnn上应用的就是self-attention。

这里以只有一个simple rnn为基础为例,其中的计算过程是如何进行的?

Attention、self-attention:从计算、公式的角度详解_第9张图片

假设当前输入为x4,计算步骤如下

  • 在rnn内部首先计算h4 (hidden state)     

  • 根据权重 apha i 去计算 c4,m个时刻会对应m个apha 

apha i 表示的是当前时刻的隐状态和历史所有时刻隐状态的相关性,这也就做到了自注意(自相关)。在这个例子中,就是对一个rnn的输入的信息的自相关

c4也就是进行了加权平均后的输出。每个时刻都会重新计算c,说明每个时刻都会重新看一遍历史的信息,也就解决了rnn遗忘的问题。完成之后继续读入下一个数据。不断重复。

与attention中不同的是,在计算权重 apha i 时,把s0 换成了h4

你可能感兴趣的:(深度学习,nlp,深度学习,自然语言处理,人工智能,attention机制)