关于注意力机制的一些细节的思考

点击上方“CVer”,选择加"星标"置顶

重磅干货,第一时间送达

本文作者:马东什么

https://zhuanlan.zhihu.com/p/339123850

本文已由原作者授权,不得擅自二次转载

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

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

2、可不可以直接在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的结构来做映射。。。。

3、紧接着第二点,为啥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没有做详细的解释,就是告诉你他们这么做了,取得了很好的效果。。。就是这么不讲道理哈哈哈

6、self attention看起来很像使用dnn来做attention

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

目标检测综述下载

后台回复:目标检测二十年,即可下载39页的目标检测最全综述,共计411篇参考文献。

下载2

后台回复:CVPR2020,即可下载代码开源的论文合集

后台回复:ECCV2020,即可下载代码开源的论文合集

后台回复:YOLO,即可下载YOLOv4论文和代码

重磅!CVer-论文写作与投稿交流群成立

扫码添加CVer助手,可申请加入CVer-论文写作与投稿 微信交流群,目前已满2400+人,旨在交流顶会(CVPR/ICCV/ECCV/NIPS/ICML/ICLR/AAAI等)、顶刊(IJCV/TPAMI/TIP等)、SCI、EI、中文核心等写作与投稿事宜。

同时也可申请加入CVer大群和细分方向技术群,细分方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch和TensorFlow等群。

一定要备注:研究方向+地点+学校/公司+昵称(如论文写作+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群

▲长按加小助手微信,进交流群

▲长按关注CVer公众号

整理不易,请给CVer点赞和在看

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值