写在前面:博主本人也是刚接触计算机视觉领域不久,本篇文章是为了记录自己的学习,大家一起学习,有问题欢迎大家指出。(博主本人的习惯是看文章看到不懂的有立马去看不懂的那块,所以博文可能内容比较杂)
本篇将详细讲解transfomer中的自注意力机制,自注意力机制使模型能够同时考虑输入序列中的所有位置(循环神经网络RNN和卷积神经网络CNN只能逐步处理,不了解RNN和CNN的同学可以看本篇的第三大点)。自注意力机制允许模型根据输入序列中的不同部分来赋予不同的注意权重,从而更好地捕捉语义关系。
论文链接:[1706.03762] Attention Is All You Needhttps://arxiv.org/abs/1706.03762
目录
一、自注意力机制的输入
二、自注意力机制的计算方式
三、额外知识扩展
下图是原论文在中的自注意力机制的计算流程图:
一、自注意力机制的输入
首先是从整个模型的最开始,输入一个句子(序列)X,然后从这个输入中生成三个向量,分别为查询向量(Q,Query)、键向量(K,Key)、值向量(V,Value)。这个时候,肯定会有同学疑惑,这三个向量是咋生成的嘞?这三个向量是通过输入序列与三个权重矩阵相乘(即线性变换)创建出来的,其实就是最简单的矩阵乘法。
下图是生成过程的直观表达:
二、自注意力机制的计算方式
上图是原论文给出的计算公式——首先是将生成的Q和K进行点积,原论文中提到点积是计算两个矩阵相似度的方法,即为每个向量都计算了一个score分数,也就是相似度分数。然后,为了梯度的稳定(不出现梯度爆炸和梯度消失的情况),进行了score分数归一化,即将上一步得到的分数除以(输入向量的维度的平方根)。紧接着是将得到的分数放到softmax中,经过softmax后,所有分数的都是正值且总和为1。最后再将经过softmax后的输出与V进行点乘,这样就得到了加权的每个输入向量的评分,从而实现了筛选值得注意的部分。
值得注意的一部分是,在最开始的流程图有一个Mask(opt.)模块,这个模块是将计算相似度分数之后的数转换为一个非常大的负数,这样经过softmax后就无限趋于0,也就是完全不需要关注了。
可能有的同学看完上面一段感觉非常难理解,的确是,因为我语言组织能力有限,同学们可以根据自己的矩阵知识来理解这个公式,就是将得到的相似分数归一化后再加权得到注意力分数,大家不要把它想得过于复杂了。
三、额外知识扩展
RNN主要用于语言处理,类似与耳朵和嘴巴,用于解析语言,RNN的假设——事物的发展是按照时间顺序展开的,即前一刻发生的事物会对未来的事情的发展产生影响通常用于自然语言处理中,可以用来处理时间序列数据,RNN的主要思想是把前面的信息传递到后面,这样网络可以利用之前的信息做出预测,能够处理序列中每个时间步的数据。(“时间步”通常指的是序列数据中一个观察点到下一个观察点之间的时间间隔。)
CNN主要用于图像识别,类似眼睛,用于图像处理,CNN的假设——人的视觉总是会关注视线内特征最明显的点。通常用于计算机视觉中,CNN用于提取图像的空间特征,通过不断的卷积和池化操作实现特征提取和降维。
Word2Vec是一种流行的词嵌入(word embedding)方法,将词汇映射到向量的技术,使得语义上相似的词在向量空间中彼此接近。
我觉得我这篇博客写的好水啊,但是我还是得写,以后复习也能有参考,还能发现自己的漏洞,同学们,继续一起努力吧!