梳理一下注意力机制

注意力机制,让我很头疼的一个问题,看了很多视频总算是弄懂了一点。今天便想趁热打铁,记录一下。

一、注意力机制的思想

来看这样一幅图片,我们一眼看过去,注意到了什么,有人、山、花、鸟、绸带(我猜的,不重要),我们注意到了这幅图片上可以说较为显著的东西,但是如果仔细观看我们可以看到最上方的红色小字,其实这就是我们人注意力的分配,而计算机的注意力机制说白了就是对有限资源的分配。

正如人的注意力的机制是有限的,我们观察事物的时候无法做到一下对其全部细节的掌握,比如:迎面走来一个人,我们首先回去注意这个人的整体外形(身高,胖瘦),然后是穿搭,然后定睛观察五官。

而对于计算机而言,注意力机制能够帮助模型关注输入数据中最相关的部分,从而忽略不相关的信息。这种能力在处理大量输入时尤其重要,可以有效减少信息过载。

现在说回这张图片上来,我们可以我们注意到的事物进行打分(0-100)代表了我们对事物的注意程度,那么假设人:80、山:60、花:50、鸟:30、绸带:10,这是在自然条件(不加任何约束)的注意力权重,那么当我加上一个条件比如:飞行,那么我们再去看这幅图片时就会重新分配注意力,着重去找图片上会飞的事物,而对这些事物的注意力权重就会重新分配人:20、山:30、花:10、鸟:100、绸带:10(分数瞎打的主要看关系)。那么现在我们得到了鸟的注意力权重值是最大的,也就是说我们现在关注的重点是鸟,因为他会飞。

现在我们有了这样一组关系

元素绸带
自然条件下的注意力权重8060503010
飞行条件下的注意力权重20301010010

我们都知道注意力机制最重要的三个值Q(Query)、K(Key)、V(Value),而在我们现有的关系中就可以将Q理解为飞行条件,K理解自然条件下的注意力权重,QK得到飞行条件下的注意力权重也就是注意力分数,那么V是什么呢?V其实就是这些元素的数字化形式,要想让计算机识别这些事物我们会将这些文字转化成一种特殊的表示形式(例如:one-hot),那么这里我们就可以理解这些元素在计算机中被映射为某些数字化形式的值就是V。

二、公式原理

OK到了这里我们大概讲清了注意力机制,以一个例子入了门,但是我们都知道注意力机制他的公式是Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V

那么这个公式代表了什么意思呢,我们来慢慢拆解它。

我们先引入这样一个知识点,那就如何计算相似度。计算相似度的方法有两个一个是点积,还有一个是余弦相似度。点积就是将两个元素的所代表的向量进行逐元素相乘,最后再相加。举个例子吧:

假设我们现在有三个物品:苹果、橘子和iPhone,我们要计算三者之间的相似度。我们在计算机中会将这样的文字信息映射到向量空间中用向量表示,例如苹果的向量为(1,2,3),向量的维度代表了其特征数,比如苹果的向量是三个维数分别是颜色、水果、科技这样三个方面的特征,其在这三个特征方面所占权重就分别是1,2,3。当然数字是瞎说的,举例只是希望可以理解,这样一个知识点叫作词嵌入(具体不展开,感觉理解到这种程度就行)

好,那么我们现在对这个三个词分别映射成向量,苹果(1,2,1),橘子(2,2,0),iPhone(0,2,3),点积计算相似度的方法就是把向量逐元素相乘再相加,就是苹果\bigodot橘子=1x2+2x2+1x0=6,二者相似度为6,如果利用余弦相似度计算就是计算两个向量之间的余弦夹角值cos\theta。我们知道cos\theta的大小是[-1,1],那么越接近1代表二者相似度大,越接近0甚至是负数就代表二者相似度小。

但其实点积和余弦相似度是具有联系的,试想一下以原点为中心,画一个半径为1的圆(这里以二维平面为向量空间,但现实上任何一个词映射成向量放入向量空间的维度都是高维>4的)将向量缩放入这个圆中,那么其实点积和余弦相似度计算出的结果是相同的。

QK^T就是在计算相似度,之所以转置是为了方便计算,因为矩阵相乘的话必须要前列=后行。

计算出单词之间的相似度之后,我们就可以用一个单词与其他单词的相似度来重新表示这个单词,在向量空间我们其实是在移动这个单词向着与它相似的单词靠近,例如苹果=1苹果+0.71橘子+0.5iPhone,但是现实生活中一个单词的映射出的向量维数可能有10000,也就是说一个单词有着多个方面的语义特征,那么按照上述的方法得出来的数依然很大,所以我们想到的第一个方法就是除以系数的和进行归一化(苹果=\frac{1apple+0.71 orange+0.5 iPhone}{1+0.71+0.5}),但是如果出现了负数的情况,使得分母=0,那么就出现了第二个问题,解决办法就是将全部数值化作以e为的指数形式,而这其实就是softmax函数。

讲到这里就解释了softmax和QK^T,那么乘以V又是什么意思呢,我们可以这样理解,矩阵的相乘的本质是在进行线性变换,而我们得到原本元素的注意力分数,我们就要将注意力分数映射的元素本身所在的向量空间中,也就是进行了一个空间的拉伸,使得我们得到这些元素的注意力数值。或者从另一个角度来说,我们所得到的注意力分数就是原来所在元素的一种权重,那么我们现在就要将这些权重分配给原来的元素。

当然这里我的解释不够专业,但是这部分理解我觉得不用细究背后的数学原理,知道其机制即可。如果有意探访我觉得可以看一3b1b的线性代数本质的讲解

另一个细节就是除以\sqrt{d_k},这其实也是为了方便计算的一种手段罢了。

写到这里我知道自己对注意力机制的理解还不够完美,但是我觉得学习就是这样,没必要为了一个知识点停止不前,也许后续的知识会让我们对前面的知识有新的理解。

后续有新的理解我当然会对这篇文章再进行完善。

参考:

注意力与自注意力_哔哩哔哩_bilibili

视觉十分钟|自注意力机制原理|计算机视觉/手绘/手把手推导公式_哔哩哔哩_bilibili

爆肝制作《注意力机制》_哔哩哔哩_bilibili

注意力机制背后的数学原理:关键字、查询和值矩阵_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值