注意力机制的计算:
-
要计算s_j就要先计算c_j, 要计算c_j就要先计算a_j:
-
将decoder当前状态s_j与m个h_i做运算得到权重向量(权重的具体计算见下)
-
h_i,s_j 各自乘以权重矩阵W_K,W_Q
-
k,q进行内积
-
经softmax
-
一共有三个“权重矩阵”:
-
在seq2seq版本注意力机制中,c的更新依靠: a和h(encoder状态)
-
在transformer版本的注意力机制中,c的更新依靠:a和v
-
去掉RNN层,只保留attention层:
-
transformer的组成:attention层 + self attention层 + 全连接层
-
目标是得到去掉RNN只留有attention的模型
-
encoder输入:x_i
-
decoder输入:通过所有x_i + x'_i得到下一个x'_i
-
-
对于encoder输入向量X:分别乘以权重矩阵W_K和W_V:得到k,v
-
对于decoder输入值x':乘以权重矩阵W_Q : 得到q
-
用一个q和每个k可以得到:a
-
a和v做向量内积可以得到c
-
对接下来的decoder输入都是同理
-
所以,就会得到每一个decoder输入的c,作为attention层的输出
-
整体看来:就是用k,q,v得到了c
-
即,c是x和x'的函数
-
可以在输出的基础上加softmax,加分类器
-
将上一个输出作为下一个输入
-
可以将attention网络看成一个C=Attn(X,X‘)函数
-
接下来说明self-attention
-
attention和self-attention的区别就是:
-
attention用于seq2seq模型,是encoder-decoder的结构,有两方面输入
-
self-attention用于单个模型,只有一方面输入
-
-
self-attention网络,对于输入x有分别乘以三个权重矩阵之后,得到三个输出
-
所以,对于每一个x都有三个输出
-
a1:一个q+所有k
-
同理,算出所有的a
-
a,v点成得到c
-
同理,算出其它c
-
self-attention的输出就是c
-
同样地,可以将self-attention网络看成是一个C=Attn(X,X)函数
-
15:attention
-
16: self-attention
-
17:transformer