Press "Enter" to skip to content

【深入理解】再看Attention

 

文章目录

​​Attention 的本质是什幺​​
​​AI 领域的 Attention 机制​​
​​Attention 的3大优点​​

Attention 的本质是什幺

 

Attention(注意力)机制如果浅层的理解,跟他的名字非常匹配。他的核心逻辑就是「 从关注全部到关注重点 」。

 

 

Attention 机制很像人类看图片的逻辑,当我们看一张图片的时候,我们并没有看清图片的全部内容,而是将注意力集中在了图片的焦点上。大家看一下下面这张图:

 

 

我们一定会看清「锦江饭店」4个字,如下图:

 

 

但是我相信没人会意识到「锦江饭店」上面还有一串「电话号码」,也不会意识到「喜运来大酒家」,如下图:

 

 

所以,当我们看一张图片的时候,其实是这样的:

 

 

上面所说的,我们的视觉系统就是一种 Attention机制, 将有限的注意力集中在重点信息上,从而节省资源,快速获得最有效的信息。

 

AI 领域的 Attention 机制

 

 

从这可以看出,Attention机制乃是核心。

 

Attention 的3大优点

 

 

    1. 参数少:模型复杂度跟 CNN、RNN 相比,复杂度更小,参数也更少。所以对算力的要求也就更小

 

    1. 速度快:Attention 解决了 RNN 不能并行计算的问题。Attention机制每一步计算不依赖于上一步的计算结果,因此可以和CNN一样并行处理。

 

    1. 效果好:在 Attention 机制引入之前,有一个问题大家一直很苦恼:长距离的信息会被弱化,就好像记忆能力弱的人,记不住过去的事情是一样的。而Attention 是挑重点,就算文本比较长,也能从中间抓住重点,不丢失重要的信息。下图红色的预期就是被挑出来的重点

 

我的这篇博文​​(2021李宏毅)机器学习-Self-attention​​讲解了Self-Attention的详细计算过程

 

下面开始深刻理解每一步的意义

 

深入理解

 

键值对注意力

 

键值对Attention最核心的公式如下。其实这一个公式中蕴含了很多个点,让我们逐个击破,从最核心的部分入手,细枝末节的部分会豁然开朗。

 

 

先抛开​​ ​Q​ ​​ ​ ​K​ ​​ ​ ​V​ ​​三个矩阵,从Self-Attention最原始的形态看

 

 

矩阵可以看作由一些向量组成,一个矩阵乘以它自己转置的运算,其实可以看成这些向量分别与其他向量计算内积,也即计算 第一个行向量与自己的内积 ,计算 第一个行向量与第二个行向量的内积 ,计算 第一个行向量与第三个行向量的内积 …

 

向量的内积,其几何意义是什幺?

 

表征两个向量的夹角,表征一个向量在另一个向量上的投影

 

 

接下来进入一个实例:

 

假设 , 其中 为一个二维矩阵, 为一个行向量。对应下面的图, 对 应”早”字embedding之后的结果,以此类推。

 

 

上面的运算模拟了一个过程,即 。其结果究竟有什幺意义?

 

首先,行向量 分别与自己和其他两个行向量做内积(“早”分别与”上””好”计算内积),得到了一个新的向量。回想内积的几何意义,可知,这个新的向量是行向量 在自己和其他两个行向量上的投影。而投影的大小又说明了两个向量的 相关性 (如果两个向量夹角是九十度,那幺这两个向量线性无关,完全没有相关性;投影的值大,说明两个向量相关性高。)继续,再进入到语义层面来看,这个向量是词向量,是词在高维空间的数值映射,词向量之间相关度表示(在一定程度上(不是完全)) 在关注词A的时候,应当给予词B更多的关注 ,由此可以理解,矩阵 是一个方阵, 以行向量的角度理解, 里面保存了每个向量与自己和其他向量进行内积运算的结果。实际上,这个过程,也是在查找词向量相关度的过程,这也是查找矩阵Q(query)和K(key)的名称由来。

 

至此,理解了公式 中, 的意义。进一步, Softmax的意义何在呢? 请看下图

 

 

Softmax的公式:

 

softmax是为了归一化。而Attention机制的核心乃是加权求和,权重就是归一化之后的数字,当关注”早”这个字的时候,应当分配0.4的注意力给它本身,剩下0.4关注”上”,0.2关注”好”。

 

至此,公式 已经理解了其中的一半,最后一个 X 有什幺意义?完整的公式究竟表示什幺?请看下图

 

 

取 的一个行向量举例。这一行向量与 的一个列向量相乘,行向量与 的第一个列向量相乘, 得到了一个新的行向量, 且这个行向量与 的维度相同。在新的向量中,每一个维度的数值都是由三个词向量在这一维度的数值加权求和得来的,这个新的 行向量就是”早”字词向量经过注意力机制加权求和之后的表示。 ,这个最终表示,通俗的解释,也就是本来的高维空间词向量表示,不是最合理的,而根据本问题,本语境,经过注意力机制的一番操作,使其输出为更能合理表达这个词向量的数值映射,而且这样更符合人的直觉。

 

Q K V矩阵

 

​Q​ ​​ ​ ​K​ ​​ ​ ​V​ ​究竟是什幺?看下面的图

 

 

其来源是 与矩阵的乘积,本 质上都是 的线性变换。

 

为什幺不直接使用 而要对其进行线性变换?

 

是为了提升模型的拟合能力,矩阵

 

d k \sqrt{d_{k}} dk​​

 

假设 里的元素的均值为 0 , 方差为 1 , 那幺 中元素的均值为 0 , 方差为 . 当d变得很大时, 中的元素的方差也会变得很大,如果 中的元素方差很大,那幺 的分布会趋于陡峭(分布的方差大,分布集中在绝对值大的区域)。总结一下就是 的分布会和d有关。因此 中每一个元素除以 后,方差又变为 1 。这使得 的分布 “陡峭” 程度与d解耦,从而使得训练过程中梯度值保持稳定。如果不除以 会造成点乘结果过大,使得经过 softmax 之后的梯度很小,不利于反向传播

 

 

代码实现

参考

​https://zhuanlan.zhihu.com/p/410776234?utm_source=wechat_session&utm_medium=social&utm_oi=1101397910679302144&utm_campaign=shareopn​
​https://zhuanlan.zhihu.com/p/157331749?utm_source=wechat_session&utm_medium=social&utm_oi=1101397910679302144&utm_campaign=shareopn​

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注