Attention 机制的相关疑问及其解答
1、Attention 机制可以并行运算吗?如果可以,那原因是什么?如果不可以,那原因是什么?
在 Encoder 部分:
在 Attention 层与层之间不可以并行,因为第 n 层的输入依赖于第 n - 1 层的输入,故不可以并行。
但在 Attention 层之内是可以并行的,因为根据公式 可以得知,在某一层内,第 j 个输出就由全部的输入所决定,换言之,在梯度反向传播时,可以将梯度同时传给所有的输入神经节点,故可以并行更新所有的参数。而此时可以将所有的输入同时输入神经节点,即可避免像 RNN 那样,第 n 个输出需要依赖第 n - 1 个输出,从而可以实现并行。事实上 RNN 也可以同时传入所有的输入给输入神经节点,但是由于梯度反向传播时,仍然需要从第 n 层传给第 n - 1 层,从而无法实现梯度的并行更新。而并行输入数据和并行更新参数的梯度均满足,才是 Attention 在层内可以实行并行计算的关键。
在 Decoder 部分:
因为 Decoder 在生成第 n 个输出的时候是需要依赖第 n - 1 个输出的,故而 Decoder 部分虽然也是由 Attention block (Attention 块)组成的,但却不可以并行计算。
Decoder 生成序列的过程:
图 1.12、k和v的来源总是相同的,q在encoder及第一级decoder中与k,v来源相同,在encoder-decoder attention layer中与k,v来源不同。为什么呢?
图 2.1如图 2.1 所示,在第一个 decoder (一个 decoder 共包含两层,第二层被称作 encoder-decoder attention layer )中,
第一层的 Q、K、V 均来自 Input,而第二层中的 Q 则来自第一层的 Output,K 和 V 则来自 encoder 的输出。
3、为什么说 Attention 机制不会发生梯度消失呢?
因为使用了残差连接
4、最后一个 encoder 的输出是传给 Decoder 中的所有 decoder 作为输入吗?
是的
5、为什么 Q、K、V 的大小要是 batch_size 呢?是为了能够在整个批次样本中进行并行计算吗?