用vit的时候读了一下transformer的思想,前几天面试结束之后发现对QKV又有点忘记了, 写一篇文章来记录一下
参考链接: 哔哩哔哩:在线激情讲解transformer&Attention注意力机制(上)
更具体的介绍可以去阅读论文
在Attention is all you need这篇文章中提出了著名的Transformer模型
Transformer中抛弃了传统的CNN和RNN,整个网络结构完全是由Attention机制组成。
更准确地讲,Transformer由且仅由self-Attenion和Feed Forward Neural Network组成。
一个基于Transformer的可训练的神经网络可以通过堆叠Transformer的形式进行搭建,作者的实验是通过搭建编码器和解码器各6层,总共12层的Encoder-Decoder,并在机器翻译中取得了BLEU值得新高。
在深度学习中,注意力机制的目标是从大量的信息中选择出更有用的信息。
而Attention is all you need
这篇文章体现注意力机制的核心就是下面这个公式了
刚刚看到这个公式的时候我也是很蒙的,查了很多资料才搞懂,这里再次推荐一个B站的up主,讲的很形象, 本文的素材也是部分来自于此
在线激情讲解transformer&Attention注意力机制(上)
Q
,K
,V
是由输入的词向量x
经过线性变换得到的,其中各个矩阵w
可以经过学习得到, 这种变换可以提升模型的拟合能力, 得到的Q
,K
,V
可以理解为
Q
: 要查询的信息
K
: 被查询的向量
V
: 查询得到的值
总结一下:
首先Q
、K
、V
都源于输入特征本身,是根据输入特征产生的向量,但目前我们现在无需关注是如何产生这组向量的。
V
可以看做表示单个输入特征的向量。当我们直接把一组V
输入到网络中进行训练,那这个网络就是没有引入Attention
机制的网络。
但如果引入Attention
,就需要将这组V
分别乘以一组权重 α \alpha α,那么就可以做到有重点性地关注输入特征,如同人的注意力一般。
下面就用一个通俗的例子来解释如何学习到 α \alpha α并且使用attention
机制
有一个海王,有N个备胎,他想要从自己的备胎中寻找出最符合自己期望的那个,便于他分配注意力并且来管理时间。
在这个案例中
Q
表示渣男对备胎的要求
K
表示渣男自身的条件 因为备胎们也会看渣男的条件是否让她们满意
V
表示匹配的结果
无论是渣男还是备胎, 都有着自己的一套Q
K
V
来记录他们选择的情况
现在我们的渣男要开始筛选备胎了, 对他来说,当然是备胎的条件越符合他的理想越好
放在Q
,K
,V
上来讲就是渣男的Q
与备胎的K
之间的相似度越高越好
现在的问题就是如何计算他们的相似度了
点乘拓展:
在向量中,AB点乘的结果反应了他们之间的相似度, (A在B上的投影与B的模相乘得到的结果)
如果AB
垂直,那么他们点乘为0
, 也就是他们的相似度为0
因此AB
点乘的结果越大, 我们就可以认为两个向量的相似度越高
在渣男选择备胎的过程中, 由于他们选择的条件Q
,K
是矩阵的形式, 因此计算矩阵之间的相似度我们采用 Q ∗ K T Q*K^T Q∗KT 来实现
相当于计算了Q
的每一行与K
的每一行的点乘结果(结合下图中2
行3
列的例子来理解) 也就得到了Q
的每一行与K
的每一行之间的相似度结果
最后通过softmax
来进行归一化, 得到一个直观的0~1
之间的相似度结果
渣男与备胎之间的这些结果共同构成了权值, 也就是核心式中的左半部分, 这里的 d k {\sqrt{d_k}} dk 只是一个常数,为了让训练过程中的梯度更加稳定。
α = s o f t m a x ( Q K T d k ) \alpha = softmax(\frac{QK^T}{\sqrt{d_k}}) α=softmax(dkQKT)
利用上面计算后得到的权重矩阵来对每个备胎加权,也就是
A t t e n t i o n ( K , Q , V ) = α ∗ V Attention(K,Q,V) = \alpha * V Attention(K,Q,V)=α∗V
这样渣男就知道自己该对谁付出更多的注意力了,也有可能渣男比较自恋, 备胎都不太满足他的要求, 他的理想型可能是自己这种类型的, 那么他最需要关注的就是他自己