Transformer中的kqv
之前一直不了解Transformer中的kqv到底是什么意思,为什么要有kqv?kqv的含义都是什么?所以近期准备从最原始的自注意力机制开始学习,逐步加深对Transformer的了解。
言归正传,关于transformer中的kqv结构其实很好理解:
我们要实现的目标是:
💡 自注意力机制其实是希望实现当前一组输入的自关联,输入信息内部自己注意到哪些特征之间是关联性很高的(比如一个句子,相同词汇要根据整个句子才能知道具体意思)。
通过kqv的操作就能实现上面的目的:
💡 比如一组输入包含4个特征,那就需要两两计算不同特征之间的关联性。如果先计算第一个特征与其余特征的关联性,那第一个特征就先通过一个FC层变成合适计算查询关联性的形态,因为它要与别的两个特征统统去计算关联性,相当于它是作为一个查询人员,去一一查询(query)与别的特征的相关性,而被查询的特征其实就相当于被索引了一样,而计算机中一般被索引的数据都是通过索引键(key)来找到整个数据的(比如键值对,就是通过键,就能找到整个值)。同样,其余3个特征也需要通过FC层变成适合计算被查询关联性的形态。而k与q做一个内积就得到特征之间的关联性了。
💡 现在想通过得到的这些关联性计算出新的特征,该特征包含了全局的关联信息,所以一个直观的思路就是对应的关联性×原特征的值(value),然后全部相加就可以得到新的包含全局关联信息的特征了。而实际上这个value也是让原特征经过FC层变成合适与关联性相乘的值(value,就是所谓的v)。