怎么理解注意力机制和自注意力机制

一、注意力机制

对于一张图片,我们在观察它使,一定会有我们特别注意的地方和忽略的地方,而对于机器,对于一个模型来说,它无法理解到哪些地方重要,哪些地方不重要.

从而注意力机制诞生了。
人类注意力图
如上图所示,我们在理解一个事物时,往往会着重观察某一些地方从而给出判断,也有一些地方时是忽略的,甚至完全不注意。上图红色越重的地方代表着,我们眼睛越关注越聚焦,因为那些区域的信息更有效,信息更丰富。注意力机制就是想让机器也可以特别关注到一些重要的地方,忽略不重要的地方

1. 注意力机制的实现

假设对于我来说,想知道图片上对于自己来说哪些是重点,我需要一个Q作为查询对象,去查询图片内容哪些对我重要,哪些对我不重要,图片有其自己的值V(被查询对象),这里的Q和V可以理解为向量。

那么Q是如何得到V对自己来说哪些是重点呢------即用Q去点乘V得到二者的相似度,相似度就可以理解为重要度,之前说过Q和V可以理解为向量,向量的内积正可以体现出两个向量的的相似度,两个向量越接近内积的值就越大,相似度就越大。也就是说,Q与V的内积的值的大小就代表着V对Q的重要程度。

假设有 K = k 1 , k 2 , k 3 , ⋯   , k n K = k_1, k_2, k_3, \cdots , k_n K=k1,k2,k3,,kn(这里的K可以理解为V,或者与V同源),现在想要得到Q对K中每一个事物的相似度,即将Q与 K K K中的 k 1 , k 2 , k 3 , ⋯ k_1, k_2, k_3, \cdots k1,k2,k3,分别做点积即可,这样可以得到一组相似度值 ( a 1 , a 2 , a 3 , ⋯   , a n ) (a_1, a_2, a_3, \cdots, a_n) (a1,a2,a3,,an)在对这项相似度值做一层 s o f t m a x ( ( a 1 , a 2 , a 3 , ⋯   , a n ) ) softmax((a_1, a_2, a_3, \cdots, a_n)) softmax((a1,a2,a3,,an))就可以得到Q对K内的每个事物的重要度概率值 p 1 , p 2 , p 3 , ⋯   , p n p_1, p_2, p_3, \cdots, p_n p1,p2,p3,,pn

我们还得进行一个汇总,当你使用 Q 查询结束了后,Q 已经失去了它的使用价值了,我们最终还是要拿到这张图片的,只不过现在的这张图片,它多了一些信息(多了于我而言更重要,更不重要的信息在这里)。

原本的图片信息 V = v 1 , v 2 , v 3 , ⋯   , v n V=v_1, v_2, v_3, \cdots, v_n V=v1,v2,v3,,vn,加上对于我来说哪些的 v i v_i vi更重要,哪些不重要

新的 V ′ = p 1 ∗ v 1 + p 2 ∗ v 2 + p 3 ∗ v 3 + ⋯ + p n ∗ v n V'=p_1*v_1+p_2*v_2+p_3*v_3+\cdots+p_n*v_n V=p1v1+p2v2+p3v3++pnvn

这样用新的 V ′ V' V代替旧的 V V V,它比之前的多了‘我’的喜好信息。上面所提到的K,V可以是相等的,也可以是不等的,但即使不等也应该是同源的,因为其代表着图片的原始信息
attention-计算图

二、自注意力机制

self-attention机制可以理解为注意力机制的一个具体的实例

self-attention机制的实现方式如下图所示

self-attention流程图

首先可以看到 Self Attention 有三个输入 Q、K、V:对于 Self Attention,Q、K、V 来自句子 X 的 词向量 x 的线性转化,即对于词向量 x,给定三个可学习的矩阵参数 W Q , W K , W V W_Q,W_K,W_V WQ,WK,WV(这三个矩阵都是要经过训练得到的),x 分别右乘上述矩阵得到 Q、K、V。Q,K,V这三个矩阵在自注意力机制中是同源的,即 Q ≈ K ≈ V Q\approx K\approx V QKV

(部分同学可能对原始的词向量X是从何而来。这里给出答案:它是通过预训练而来。因为语言逻辑基本都是相同的,比如说我们通过一本书的所有文字训练得到里面所有词的向量,它其实可以用作回答我们的提问,但针对某一个具体的任务是它未免有偏差,这就需要对预训练相互来的X进行调整让他获取更多的关于这一具体任务的信息,从而在高维空间中找到更加符合这一任务的位置)

接下来为了表示的方便,我们先通过向量的计算叙述 Self Attention 计算的流程,然后再描述 Self Attention 的矩阵计算过程

1. Q,K,V从何而来

qkv获取

上图操作:两个单词 Thinking 和 Machines。通过线性变换,即 x 1 x_1 x1 x 2 x_2 x2 两个向量分别与 W Q , W K , W V W_Q, W_K, W_V WQ,WK,WV 三个矩阵点乘得到的 q 1 , q 2 , k 1 , k 2 , v 1 , v 2 q_1, q_2, k_1, k_2, v_1, v_2 q1,q2,k1,k2,v1,v2共 6 个向量。矩阵 Q 则是向量 q 1 , q 2 q_1, q_2 q1,q2的拼接,K、V 同理。所有的词共用 W Q , W K , W V W_Q, W_K, W_V WQ,WK,WV

2. 计算相似度值(即MatMul操作)

Q-K乘积
上图操作:向量 q 1 , k 1 q_1, k_1 q1,k1 做点乘得到得分 112, q 1 , k 2 q_1, k_2 q1,k2 做点乘得到得分96。同理 q 2 q_2 q2也会对 k 1 , k 2 k_1, k_2 k1,k2做同样的操作。注意:这里是通过 q 1 q_1 q1 找到对于 x 1 x_1 x1来说 x 1 , x 2 x_1, x_2 x1,x2中的重要信息。

3. Scale&Softmax

qk-scaleandsoftmax

对于这里为什么要对得到的重要度值先进行规范化Scale再来Softmax

这里简单讲解除以 d k \sqrt{d_k} dk 的作用:假设 Q , K Q,K Q,K 里的元素的均值为0,方差为 1,那么 A = Q T K A=Q^TK A=QTK中元素的均值为 0,方差为 d。当 d 变得很大时, A A A中的元素的方差也会变得很大,如果 A A A中的元素方差很大(分布的方差大,分布集中在绝对值大的区域),在数量级较大时, softmax 将几乎全部的概率分布都分配给了最大值对应的标签,由于某一维度的数量级较大,进而会导致 softmax 未来求梯度时会消失。总结一下就是 s o f t m a x ( A ) softmax(A) softmax(A)的分布会和d有关。因此 A A A中每一个元素乘上 1 d k \frac{1}{\sqrt{d_k}} dk 1后,方差又变为 1,并且 A A A的数量级也将会变小。

用大白话来说,这是因为Softmax的一个缺陷:

假设相似度值为:

52, 48经过Softmax–>0.52, 0.48

88, 12经过Softmax–>0.999, 0.001

就是说只有当两个相似度值相差较近的时候经过Softmax得到的概率值才比较合理,相差较大时,得到的概率值是非常不合理的,所以就需要先进行规范化,缓和一下差值,得到一个更为合理的概率值

4. MatMul得到新的词向量(z)

结果-z

用得分比例 [ 0.88 , 0.12 ] [0.88,0.12] [0.880.12] 乘以 [ v 1 , v 2 ] [v_1, v_2] [v1,v2] 值得到一个加权后的值,将这些值加起来得到 [ z 1 , z 2 ] [z_1, z_2] [z1,z2]

上述过程就是self-atention所做的事,对于词Thinking而言用 q 1 q_1 q1 K = [ k 1 , k 2 ] K=[k_1,k_2] K=[k1,k2]相乘得到Thinking与其自身和Machine的相似度,在经过Scale和Softmax得到权重值后与 V = [ v 1 , v 2 ] V=[v_1,v_2] V=[v1,v2]相乘再相加得到新的Thinking的词向量 z 1 z_1 z1,同理Machine以同样的方式得到新的词向量 z 2 z_2 z2

上面所演示的都是单个向量的计算,我们可以将向量拼接成矩阵,加快运算的速度,输入是一个 [2x4] 的矩阵(句子中每个单词的词向量的拼接),每个运算是 [4x3] 的矩阵,求得 Q、K、V。

QKV-矩阵表示

Q 对 K 转制做点乘,除以 d k \sqrt{d_k} dk ,再做一个 Softmax conger得到合为 1 的比例,对 V 做点乘得到输出 Z。那么这个 Z 就是一个考虑过 Thinking 周围单词 Machine 的输出。

QKVZ-结果

注意看这个公式, Q K T QK^T QKT其实就会组成一个 word2word 的 attention map!(加了 softmax 之后就是一个合为 1 的权重了)。比如说你的输入是一句话 “i have a dream” 总共 4 个单词,这里就会形成一张 4x4 的自注意力机制的图,里面的每一个元素代表着一个权重值,每一行和为1:

Snipaste_attentionmap

这样一来,每一个单词对应每一个单词都会有一个权重,这也是 Self Attention 名字的来源,即 Attention 的计算来源于 Source(源句) 和 Source 本身,通俗点讲就是 Q、K、V 都来源于输入 X 本身。

三、注意力机制与自注意力机制的差别

说白了,自注意力机制可以理解为注意力机制的一个子类,注意力是父亲,自注意力是儿子,注意力机制是一个很广泛很庞大的概念,它提出了利用Q和K来得到权重值,在原来V的基础上得到一个富含重要度信息的一个新的 V ′ V' V,但它并为提出Q,K,V究竟从何而来。

而自注意力就是一个注意力机制的具体实现,他提出了Q,K,V的具体来源,它们是同源的。

比如说交叉注意力机制,Q,V不同源但K,V是同源的,它同样也只是注意力机制的子类

出Q,K,V究竟从何而来。

而自注意力就是一个注意力机制的具体实现,他提出了Q,K,V的具体来源,它们是同源的。

比如说交叉注意力机制,Q,V不同源但K,V是同源的,它同样也只是注意力机制的子类

参考文献

[1] 预训练语言模型的前世今生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值