将单词数字化——方向代表语义
每一个单词可以对应到高维空间的一个向量,这个向量叫嵌入向量。以三维为例,女人-男人=叔叔-婶婶(四个都是向量),可以这么理解,”男人“这个词的意思转化成”女人“这个词的意思,需要”男人“这个词的向量加上向某个方向的向量,加上这个向量,可以让这个词义由“男性”转化成“女性”,而“叔叔”和“婶婶”这的词义很接近只差性别的转化,当“叔叔”这个词的向量加上刚才的向量(男人-女人)就可以转化成”婶婶“的意思。
单头注意力机制
每一个词可以用一个高维向量表示,这个向量可以表示这个词的含义和在句子中的位置,每个单词用向量 E ⃗ \vec{\mathrm{E}} E表示,我们以下面的短语“fluffy bule create(毛茸茸的蓝色的生物)”为例,解释如何通过注意力机制,让“生物”注意到“毛茸茸”和“蓝色”。
以形容词修饰名词为例,在整个句子中,我们人脑很快会明白:“生物”被“毛茸茸”和“蓝色”修饰,那计算机是怎么实现的呢?
首先我们对每一个嵌入向量分别乘两个矩阵 W Q W_{Q} WQ和 W K W_{K} WK,每个 E ⃗ \vec{\mathrm{E}} E都得到了对应的 Q ⃗ \vec{\mathrm{Q}} Q向量和 K ⃗ \vec{\mathrm{K}} K向量, Q ⃗ \vec{\mathrm{Q}} Q是query(查询)的意思, K ⃗ \vec{\mathrm{K}} K是Key(值)的意思,可以这么理解:“生物”这个词问:谁跟我关系最好(因为我们要找到“毛茸茸”和“蓝色”两个词在修饰“生物”),“毛茸茸”和“蓝色”这两个词喊:“我们俩跟你关系最好!“这里面”生物“的提问就是 Q ⃗ \vec{\mathrm{Q}} Q,“毛茸茸”和“蓝色”的回答就是 K ⃗ \vec{\mathrm{K}} K。
我们将所有的 K ⃗ \vec{\mathrm{K}} K和 Q ⃗ \vec{\mathrm{Q}} Q相乘,得到下面的矩阵,由于向量的点积可以表示两个向量的相关性,因此当从一列来看,我们通过比较一列数值的大小就可以知道哪个词这个词相关性最大了,这个例子中,”生物“这列数值最大的就是 K ⃗ 2 \vec{\mathrm{K}}_2 K2 Q ⃗ 4 \vec{\mathrm{Q}}_4 Q4 和 K ⃗ 3 \vec{\mathrm{K}}_3 K3 Q ⃗ 4 \vec{\mathrm{Q}}_4 Q4,进而得到了:“生物”与“毛茸茸”和“蓝色”相关性最大,即“生物”注意到“毛茸茸”和“蓝色”,即“生物”被“毛茸茸”和“蓝色”修饰。
到这里我们已经说完除去V的原论文中Attention的做法(softmax可以理解成将一列的数转化成0-1之间的数,乘积大的数就靠近1,乘积小的数就靠近0,也就是两个向量越相关,越靠近1,而指数上的T和分母都是细节操作,不影响注意力机制的理解,因此先按下不表,本文着重阐述注意力机制的原理)
当知道哪些单词之间的相关性大之后,我还要改变原来的向量让它的含义更加准确的表达句子的含义,这个例子中就是让“生物”变成”毛茸茸的蓝色的生物“, V ⃗ \vec{\mathrm{V}} V就是这个作用。
与 Q ⃗ \vec{\mathrm{Q}} Q和 K ⃗ \vec{\mathrm{K}} K产生的方式相同,用 E ⃗ \vec{\mathrm{E}} E与 W V W_{V} WV相乘得到了 V ⃗ \vec{\mathrm{V}} V。向量 V ⃗ \vec{\mathrm{V}} V就是原来向量向更准确的含义改变所需要加的向量,例如"生物"的向量 E ⃗ \vec{\mathrm{E}} E,加上”毛茸茸的“的向量 V ⃗ \vec{\mathrm{V}} V就可以得到“毛茸茸的生物”这个含义的向量。再加上”蓝色“的向量 V ⃗ \vec{\mathrm{V}} V就可以得到“毛茸茸的蓝色的生物”这个含义的向量。
由前面的 K ⃗ \vec{\mathrm{K}} K* Q ⃗ \vec{\mathrm{Q}} Q再softmax,我们得到了与“生物”相关性最大的两词“毛茸茸的”和“蓝色的”,从数值上看,这两个词的数值占很大比重,而其他无关的数数值接近0,我们将这个数值与可以改变含义的V向量相乘,再将所有的这一列的乘好的向量相加,就得到了“生物”的含义到”毛茸茸的蓝色的生物“的含义的变化向量。这个“生物”向量与这个变化向量相加得到了”毛茸茸的蓝色的生物“向量。
刚才讲述的只是“生物”词,实际上,一个句子进行注意力机制是所有列(所有的词)进行刚才的操作,同样的,原始的向量组,加上改变的向量组,得到了的向量组更准确地表达了这句话的含义。
补充
masking(掩码)——注意力机制不能让后词影响前词
想想这样一个场景:在未来世界人们可以穿梭到未来,正常一个高中生每次做题目的时候都是通过运用之前学过的知识来做题,但是小明不喜欢思考,每次做作业都要穿梭到未来看这道题的答案是什么,接着再穿越回来把答案写上。由于规定不允许在高考的时候穿越时间,而小明平时总是通过“投机”方式学习,因此高考成绩不如意。
同样道理,在训练一个文本的时候如果允许后词影响前词,那么模型会学到一种不符合实际情况的“投机”策略。当真正需要预测的后文的时候,没有后文的提示会让它的预测效果下降。
由于矩阵的下三角区域是后词影响前词的部分,因此为了处理这个问题,在softmax前将矩阵的下三角的数值变成负无穷,这样一来通过softmax后这些区域都变成了0。