论文阅读:
(有些自己忘记的知识就顺便回忆了一遍)
结合理论,代码实践
个人疑问:
-
Q:弄这么多Q、V、K干嘛?确实有提到query,value,key,但是到底怎么提取的呢?怎么就有这个含义了
A:知乎传送门。
大致意思就是,这三个权重矩阵作为分别提取的产物,是有不同的用途的,这样的话可以实现:q你可以理解为代表自己用的,用q去和别的输入找关系;k理解为给别人用的,专门对付来跟你找关系的输入。 另外有,定义了个v大概等于又对a加了一层可以学习的参数。另外,有人提出了它的来源:《Memory Networks》。
当时聚焦于question answering,先用输入的问题query检索key-value memories,找到和问题相似地memory的key,计算相关性分数,然后对value embedding进行加权求和,得到一个输出向量。
在Transformer中,Q,V,K是分别用X与Wq,Wv,Wk相乘得到的(Q,V,K由embedding的结果通过不同的线性变换得到),因为直接用X参数太少,影响模型容量。