对于Self Attention来说,它的输入是一个序列,序列的获得依靠的是vector。我们把一个词转换为序列模块,需要用到vector向量去指向。而vector的指向,是有空间性的,好比说两个意思很相近大概同义的词汇,它们在空间中的距离就会比较小。相反,意思差的多,距离固然就远。
如许也可以理解为vector是和词语的意义有关系的。
留意力分配的多少取决于公式:
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V
此中,Q代表Queries(输入的信息),K代表Keys(内容信息),V代表Values(信息本身,只表达了信息的特征)。
Q,K,V的获得
本质上,是input的线性变更。计算利用的是矩阵乘法,实现方法是nn.Linear。
用点积表示相似度的方法是由于cos角投影长度可以很直观地理解两个量的相似度。
在1.3的式子里除以 d k \sqrt{dk} dk 这一步看起来很多余,但是它是为了避免较大的数值。较大的数值会导致softmax之后值更极端,softmax的极端值会导致梯度消失。这一步相称于控制了数值范围,让它在可观测范围内。
为什么是 d k \sqrt{dk} dk ?假设q,k是均值为0,方差为1的尺度正态分布的独立随机变量,那么它们的点积的均值和方差分别为0以及dk。
之后做逐元素相乘(enterwise)。
我们需要将单词意思转换为句中意思,这就涉及一词多义的问题,在逐元素相乘得到的sum之后的z就涉及这个问题。那么我们需要根据句子中其他词来推理当前词的意思。
就好比说Mine,它有两种意思,一种是“我的”,一种是“矿石”。这固然是大相径庭的词性和词义。假设我们完全不知道这个多义词,但我们可以通过观察它们在句子中的位置和与上下文的接洽来推理这是什么意思。
1.4 Multihead Attention