attention是干什么用的?解决什么问题?
我们如果使用传统的窗口分割数据的方法,那么我们很难让每个窗口都有全局的信息,实际上每个窗口只有自己的那部分信息其他部分的信息其实这个窗口是没有的。
为了让这个点又具有当前窗口的信息也具有全局的信息,这里就要求我们在这里融入其他部分的信息,这就是注意力机制提出的背景驱动。
query和key的理解
可以看到我们是想把其他部分的信息融合到当前这个窗口当中,但是这个融合不可以是简单的加和,是需要一个权重,这就是我们需要使用query和key的原因。
这哥俩的作用就是生成一个权重的情况,这里想要完全的了解这个东西为什么叫这个东西,我们还得想一下谁起的这个名字的了,也就是谷歌,这个大哥主要是搞搜索的(虽然他现在搜索只是一小部分业务,但是这个东西毕竟是起家的行当嘛)这个例的query其实就是查询,而key则是被比对的项。
这俩相乘其实得到的是一个向量的点积,这个点积其实反映的是两个是不是十分相似,而这个相似与否,则可以理解乘是不是相关的问题。
所以这个最终的结果就是我们通过这个乘算之后过softmax得到一个权重,这个权重其实是两者的cos相似度,之后通过这个cos相似度,当成相关性给原来的数据融入资源。
但是为什么我们看到的都是直接矩阵乘法乘在一起的?
我们先针对单个query进行理解:
其实只是单个query和全部的key(包括这个query本身)求相似度,之后通过这个相似度将value(对应每个key)融入到这个query当中。
然后我们对这个内容进行并行化:
也就得到了softmax(q×k)×v的形式
这个推算的过程之后会补充。