LawsonAbs的认知与思考,还请各位读者批判阅读。
总结- 文章来源:csdn:LawsonAbs
- 不适合入门选手
- 因为对Attention(可能也是一切知识)的认知会随着论文的阅读,代码的实践持续改变,所以本文持续更新~
1.Self-Attention
1.1 Q:下面这个图是怎么得到的呢?
上面这个图讲得是:每个单词对其它单词的一个关注度。我们attention之后不是只得到一个向量吗? (左侧这句话是错误的)怎么会有关注度(attention score
)呢?仔细读读下面这段话:
As we are encoding the word “it” in encoder #5 (the top encoder in the stack), part of the attention mechanism was focusing on “The Animal”, and baked a part of its representation into the encoding of “it”.
也就是说:it
这个单词的 embedding
是结合了The
, animal
等一系列单词的权重得到的embedding。同样,对于单词animal
也会用一系列的加权值来表示它的向量,即对于每个token,都有:
t
o
k
e
n
=
∑
i
=
1
n
α
i
∗
v
i
token = \sum_{i=1}^n \alpha_i * v_i
token=i=1∑nαi∗vi
对应于下面这张图:
向量z1
和向量 z2
不同的原因在于==在计算attention值的时候,采用的不是同一个q。==也就是说,在计算Thinking
这个单词用的是
q
1
,
k
1
,
k
2
,
v
1
,
v
2
q_1,k_1,k_2,v_1,v_2
q1,k1,k2,v1,v2,但是计算Machines
这个单词用的是
q
2
,
k
1
,
k
2
,
v
1
,
v
2
q_2,k_1,k_2,v_1,v_2
q2,k1,k2,v1,v2 所以会得到一个不同单词对其它单词的关注度(但是事实证明,attention并不是像作者们说的这么有效,大家听听就好~,有兴趣深究的可以看我的博客:Bert实战二之探索Attention score)。
由上可知,不能单纯的以为attention 只能把一句话编码成一个向量!它还可以self-attention 把句子中的每个token都编码成一个向量。
2. 代码细节
2.1 在 key-value attention
中, 随机生成的 Query, Key 矩阵 在每个批次训练中是否是一致的?也就是说,这两个矩阵是否是全局唯一的?
我觉得是的,因为需要针对这两个也是参数,需要对应训练,如果总是变化,肯定是不可的。
参考资料- The Illustrated Transformer
- 生活中的加权求和就是attention 的真实来源。