🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀《深度学习基础知识》相关专栏: ⚽《机器学习基础知识》
🏐《机器学习项目实战》
🥎《深度学习项目实战(pytorch)》💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
前言
在注意力机制论文 Attention Is All You Need 中最苦恼大家的肯定是K、Q、V三个变量的含义
翻阅了CSDN、知乎大量文章后,我发现没有文章能够带大家对注意力机制建立直观的认识
大部分文章要么没有从初学者的角度出发介绍的是注意力机制上层应用,要么其作者自己也并没有真正理解注意力机制所以讲的不清不楚
所以在看完《动手学深度学习(pytorch版)》、Attention Is All You Need 论文、以及大量文章后,我开始动手写这篇专门为初学者的介绍注意力机制的文章
注意力机制的起源
深度学习中的注意力机制(Attention Mechanism)是一种模仿人类视觉和认知系统的方法,它允许神经网络在处理输入数据时集中注意力于相关的部分。通过引入注意力机制,神经网络能够自动地学习并选择性地关注输入中的重要信息,提高模型的性能和泛化能力。
人类的注意力
以下这张图可以较好地去理解注意力机制,其展示了人类在看到一幅图像时如何高效分配有限注意力资源的,其中红色区域表明视觉系统更加关注的目标,从图中可以看出:人们会把注意力更多的投入到人的脸部。文本的标题以及文章的首句等位置。
大数据引发的两个问题
信息过载:随着大模型的出现,训练一个深度学习模型所需要的数据量越来越大,在算力有限的情况下,如何将计算资源分配给更重要的任务,是亟待解决的问题。
信息嘈杂:在神经网络学习中,一般而言模型的参数越多则模型的表达能力越强,模型所存储的信息量也越大,这也代表信息越嘈杂(重要的,不重要的都有)。在众多的输入信息中聚焦于对当前任务更为关键的信息,降低对其他信息的关注度,甚至过滤掉无关信息,能够提高模型的准确性。
问题的解决
信息嘈杂和信息过载都意味着我们需要忽视一些无用信息,专注于重要信息
于是,我们就需要一个算法告诉我们该关注什么,也就是什么重要,我们的注意力该放在哪里
这就是:注意力机制(如何在深度学习的模型上做出问题应该有的注意力)
由此论证了注意力机制在深度学习(尤其是大模型中)的必要性
接下来的问题就是如何让神经网络能够自动地学习并确定注意力应该如何分配
人类注意力机制深度剖析
为了帮助理解,请大家假设一个场景:
我现在在看一份报纸,报纸中有体育板块、科技板块、股票板块、健康板块四大块内容。我平常特别爱好科技板块、其次是体育、健康和股票板块,那么我最重点关注的肯定就是科技板块,最后关注的就是股票板块
下面请大家思考这个选择过程是如何进行的呢?让我来画一张流程图解释:
上面这个流程图就是我们人类大脑看到一个内容时,如何对内容进行注意力分配的机制。我希望大家在这里停一停脚步,好好感受以下这个流程图,这对后面的理解相当重要~~~
注意力机制基本思想
在这一部分,我们将直接来看注意力机制的基本思想
我希望大家可以把这个思想和上面人类注意力机制的流程一一对应起来
先上一张图,这个图显示的就是注意力机制实现的一整个流程,分为三个阶段
定义
1、V:被查询对象(待分配注意力的对象)(上面实例中的”报纸“)
2、Q:查询对象的偏向(爱好)(上面实例中的”我的爱好“)
3、K:V的各个部分(可以假定K=V,也可以让K和V存在某种联系)(上面实例中的”各板块“)
数学基础
假设现在已知K,也已经确定Q,这两者都用一个矩阵(向量)来表示。
现在就来看如何计算K和Q的相似度(相似度高则给予更多注意力,否则更少注意力)
向量相似性
余弦相似性(Cosine Similarity)
余弦相似性(Cosine Similarity)是一种用于度量两个向量之间相似性的方法,通常在多维空间中使用。它衡量了两个向量之间夹角的余弦值,从而提供了一种评估它们之间关系的方式。
cosine_similarity(A, B) =
其中A 和 B 是两个要比较的向量。
表示向量的点积,也称为内积,它是两个向量对应元素的乘积之和。
几何意义是:A 投影在 B 上的模长乘以 B 的模长
当余弦相似性等于1时,表示两个向量在多维空间中的方向完全相同,即它们是完全相似的。
当余弦相似性等于0时,表示两个向量之间不存在线性关系,它们是不相关的。
当余弦相似性等于-1时,表示两个向量在多维空间中的方向正好相反,即它们是完全不同的。
K、Q相似度衡量
到这里,不难想出衡量K、Q相似度也就是衡量其中向量的相似度,所以可以用内积的方式实现
假设:Q,𝐾=𝑘1,𝑘2,⋯,𝑘𝑛
通过点乘的方法计算Q 和 K 里的每一个事物的相似度,就可以拿到 Q 和k1𝑘1的相似值s1𝑠1,Q 和k2𝑘2的相似值s2𝑠2⋯⋯最后Q 和kn𝑘𝑛的相似值 sn
这是我们就有了S1,S2,S3,⋯,Sn,通过前面的分析,我们可以知道S就表示相似度,相似度越高则我们要分配的注意力也就越多。但是此时S的数据仍然是杂乱无章的,所以我们需要对S进行归一化处理,让S从相似度转为概率度,也就是分配注意力的比例
所以,这里我们对S1,S2,S3,⋯,Sn进行一层softmax得到概率a1,a2,⋯,an
到这里,我们已经完成前面两个阶段的任务,下面让我们进入阶段三
注意力分配
阶段三的本质就是注意力的汇总,也就是根据前面算得注意力分配比例a1,a2,⋯,an来计算得出查询目标V上各部分最终得到的注意力值
数学角度来看:
V = (v1,v2,⋯,vn)
(a1,a2,⋯,an)∗+(v1,v2,⋯,vn)=(a1∗v1+a2∗v2+⋯+an∗vn) = V'
此时得到全新的V',这个V不仅包含V本身的信息,也包含查询者对这个信息的倾向爱好
于是,我们就可以用这个 V'来代替原本的V,这个V也就包含了我们的注意力
总结
总的来说,注意力机制的完整流程为:
第一步:根据Query和Key计算二者的相似度。可以用上面所列出的加性模型、点积模型或余弦相似度来计算,得到注意力得分si;
第二步:用softmax函数对注意力得分进行数值转换。一方面可以进行归一化,得到所有权重系数之和为1的概率分布,另一方面可以用softmax函数的特性突出重要元素的权重;
第三步:根据权重系数对Value进行加权求和:
如果文章能帮助到大家,大家可以点点赞、收收藏呀~