乐于分享
好东西不私藏

AI入门:注意力机制

AI入门:注意力机制
假如要翻译“I swam accross the river to get to the bank",其中的bank有多种意思:河岸或者银行。到底选择哪个?显然要求能够识别这句话中与bank最为紧密的上下文词汇,比如其中的I/the/to等无关紧要,不用太关注,而“swap/river"等要特别关注。这种对关键信息给予更多关注的机制,称为注意力机制(Attention)。
根据词向量概念,bank的词向量可能是512维。因为词向量维度比较大,将会用类似卷积的方式对向量进行变换,“过滤”出它的关键特征。那么要过滤出哪些特征呢?因为目的是找出bank与其它词之间的关系,所以关注一下三类特征:
  • Query(查询):它代表了bank在查询其他单词时,想要找到哪些与其含义相符的词义。这个特征用矩阵Wq来表示。
  • Key(键):它代表了bank自身有哪些词义可以被其他单词查询出来。这个特征用矩阵Wk来表示。
  • Value(值):它表示了bank根据 Key 键查询出来具体的值。这个特征用矩阵Wv来表示。

通过这三个矩阵,就能洞察出bank与其他单词之间的深层关系。而这三个矩阵也是通过神经网络训练出来的。将词向量与这三个矩阵进行点乘,将得到转换后的三个向量Q/K/V,它们分别代表了bank的查询要求、可被查询的语义特征以及相应的语义信息。

可以这样来简单地理解上面 3 个特征:每个词的含义都是由很多 <Key,Value> 这样的数据对组成,例如river这个词,它的含义可以是 < 词性,名词 >,< 是否与水相关,是 >,< 感情色彩,褒义词 > 类似这样的数据对,而 Query 是这个词想要查询哪些特征,例如bank需要查询 river是否与水有关、是否与金融有关等。因此计算 Attention 的过程可以看作先计算bank的Query和river各个 Key 的相关性,得到river每个 Key 对bank的重要程度,也就是river中对应Value的权重系数,然后对Value 进行加权求和,即得到了最终的Attention数值。

具体公式如下:

所以本质上讲,计算bank与river的Attention,就是对river中的Value值进行加权求和,而Query和Key是用来计算river中对应Value的权重系数。

那么对bank,将每个词都计算出Attention值,可以看到swam和river的Attention明显要大,所以可以将bank理解为河岸的意思: