查看原文
其他

【源头活水】关于attention机制的一些细节的思考

“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

作者:知乎—马东什么

地址:https://www.zhihu.com/people/he-he-he-he-77-19-21


01

为什么attention有这么多计算相似度的方式

关于相似度计算的方式,上图列举了两个经典的style的attention类型使用到的相似度的计算方法,不同的相似度取决于不同的任务而设计,说的更小白一点,某个论文的作者在某种类型的任务上发现某种类型的相似度计算结果效果更好,那么我们后续处理这类任务的时候沿用一下人家的思路,置于是不是真的合适,效果好坏就要自己测试了。

02

可不可以直接在embedding上进行相似度score的计算?
之前看过的一些attention机制,除了self attention之外,基于rnn或者cnn的attention在处理文本问题的时候基本上是embedding之后经过了rnn或者cnn结构的映射之后得到了映射后的向量V,然后attention是针对于V进行注意力weights的计算,问题来了,能不能直接在embedding上进行score的计算?
这一点在attention word embeding中可以看到有一些雏形:
https://zhuanlan.zhihu.com/p/161999947
不过很可惜,这里对于embedding是做了一个dense层的映射之后再做,这一点上和self attetion是非常类似的,可以看到如果不使用rnn或者cnn的结构,也会使用dnn的结构来做映射。。。。

03

紧接着第二点,为啥self attention里要先对embedding做dense层的映射然后再进行attention的计算啊?为什么embedding不能直接做attention的计算啊????

也就是这个公式里的q、v、k来自于embedding但不是embedding,而是分别接了三个dense层得到了q、v、k
注意这里啊,x到q、v、k是这样的:

也就是这里的wq、wk、wv,为啥要接三个矩阵啊????
关于这里这三个projection层(论文里这么叫的)的作用:
1、https://ai.stackexchange.com/questions/23332/what-is-the-weight-matrix-in-self-attention
针对于多头机制,如果不使用这三个映射层,则每一个多头的输入部分完全一样,通过使用这三个映射层,多头中的每一个头对应的wq、wk、wv矩阵不同,对于模型的本身的特征抽取的多样性具有一定的帮助;
2、https://jalammar.github.io/illustrated-transformer/
来自于这篇神文,
计算自我注意力的第一步是从每个编码器的输入向量(在这种情况下,是每个单词的嵌入)创建三个向量。因此,对于每个单词,我们创建一个查询向量,一个键向量和一个值向量。通过将嵌入乘以我们在训练过程中训练的三个矩阵,可以创建这些向量。
请注意,这些新向量的维数小于嵌入向量的维数。它们的维数为64,而嵌入和编码器输入/输出矢量的维数为512。它们不必较小,这是使多头注意力(大部分)计算保持恒定的体系结构选择。
通过dense层的映射可以灵活的控制q、v、k的大小,可以起到一定的维度降低的作用(比如这里把512的embeding转化为了64维的q、v、k)
3、http://peterbloem.nl/blog/transformers
Every input vector i is used in three different ways in the self attention operation:
  • It is compared to every other vector to establish the weights for its own output i
  • It is compared to every other vector to establish the weights for the output of the j-th vector j
  • It is used as part of the weighted sum to compute each output vector once the weights have been established.
在self attention中,以三种不同方式使用每个输入向量:
1、将其与其它所有向量进行比较,以为其自身的输出 i建立权重,即对应的query
2、将其与其他所有向量进行比较,以建立第j个向量 j的权重,即对应key
3、一旦权重确定,它就用作加权总和的一部分,以计算每个输出向量,即对应value
These roles are often called the query, the key and the value (we'll explain where these names come from later). In the basic self-attention we've seen so far, each input vector must play all three roles. We make its life a little easier by deriving new vectors for each role, by applying a linear transformation to the original input vector. In other words, we add three k×k weight matrices q, k, v and compute three linear transformations of each xi, for the three different parts of the self attention
这些角色通常称为query,key和value。到目前为止,在基本的self attention中,每个输入向量必须扮演所有三个角色,通过对原始输入向量进行线性变换,我们为每一个输入创建了三个新向量对应3个角色。换句话说,对于self attention的三个不同部分,我们添加了三个权重矩阵 q, k, v并计算每个xi的三个线性变换:

This gives the self-attention layer some controllable parameters, and allows it to modify the incoming vectors to suit the three roles they must play.
这为自注意力层提供了一些可控制的参数,并允许其修改传入的向量以适合它们必须扮演的三个角色。
4、https://medium.com/lsc-psd/introduction-of-self-attention-layer-in-transformer-fc7bff63f3bc
For every inputx, the words inxare embed into vectoraas Self-Attention input.
这部分也咨询了一下诸神们,得到的感觉比较合理的回答:
一个词在做query和key和value的时候应该是不同表示,如果不用q、v、k的话 一个词在做query和key的时候就是完全相同的,也是不符合直觉的,
原始embedding空间体现的是语义关系,语义相近的靠近,自身和自身就重合了,经过qvk这样的转换,转换到新的空间中在做点积,这个新的空间就更加专注于注意力的学习,非要在原始embedding空间做点积也可以,但这样就默认了语义相近的注意力更高,原本自身的embedding会跟自身的embedding有很强的注意力计算结果,那其他位置上有关系的注意力相关性就会被弱化很多,但如果转换到新的空间的话,语义相近的就不一定注意力很高了;(在embedding空间中,体现的是语义相似性,自己点积自己肯定相似性最高,设置qvk的目的应该是开一个新的空间,专门用于学习注意力机制,在这个空间里点积高表示注意力高,但不代语义相似度高,这样就强化了其它上下文的注意力机制的计算结果)
5、
原文,原文对这里的q、v、k没有做详细的解释,就是告诉你他们这么做了,取得了很好的效果。。。就是这么不讲道理哈哈哈

04

self attention看起来很像使用dnn来做attention
像attention-based model,目前开源的资料基本上是用rnn或者cnn作为组件来进行原始的embedding的特征提取得到某些表示,例如rnn的hidden state或者cnn的卷积计算之后提取的高阶特征,在这些提取出来的高级表示上进行attention计算,而self attetion则是使用简单的dense层来将原始的embedding映射到新的表示上,然后在这个新表示上进行attention的计算,形式上就很像使用dnn来帮助做attention。。

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、点赞、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存