目录

前言

非常非常基础的知识

键值对(Key-Value)注意力

Q K V矩阵

\large \sqrt{d_k}​的意义

结语


前言

因工作需要,不得不再次将Transformer从尘封的记忆中取出。

半年前学Transformer的时候只觉得模型好复杂,步骤好复杂,论文读完,想了好几天,感觉还是没有完全搞明白,仅仅是记住了一些专有名词,除了用于吹牛逼其余一无是处,因为内部的机理完全不明白,所以这些名词啊、公式啊转眼就忘。

Self-attention是Transformer最核心的思想,这两天重新阅读了论文,有了一些新的感想,便急忙将其记下,与朋友们共勉。

博主刚开始接触self-attention时,最不理解的地方就是Q K V这三个矩阵以及我们常提起的query查询向量,现在想来,应该是被纷繁复杂的高维矩阵运算难住了,没有真正理解矩阵运算的核心意义。因此,在本文之前,我总结了一点非常非常基础的知识,文中会重新提及这些知识蕴含的思想是如何体现在模型中的。大道至简,我会尽可能将整个Self-attention讲得通俗易懂些。

非常非常基础的知识

  1. 向量的内积是什么,如何计算,最重要的,其几何意义是什么?
  2. 一个矩阵W与其自身的转置相乘,得到的结果有什么意义?

键值对(Key-Value)注意力

这一节我们首先分析Transformer最核心的部分,我们从公式开始,把每一步都绘制成图,方便读者理解。

键值对Attention最核心的公式如下图。其实这一个公司中蕴含了很多个点,我们一个一个来讲,请各位跟随我的思路,从最核心的部分入手,细枝末节的部分就会豁然开朗。

Attention Function

上图是大名鼎鼎的Attention Function,第一眼看过去,哦,两个向量相乘除以一个像是normalization的向量的平方根,然后做一个softmax处理,最后再乘以一个向量。我相信大家第一眼看到这个公式是非常懵逼的,假如你懵逼了,那么下面的这个公式各位是否知道其意义呢?

\large Softmax(XX^T)X

我们先抛开Q K V三个矩阵不谈,self-attention最原始的形态其实长上面这样。那么这个公式到底什么意思呢?

首先,\large XX^T,一个矩阵乘以它的转置,会得到什么结果,有什么意义呢?

我们知道,矩阵可以看作由一些向量组成,一个矩阵乘以它自己转置的运算,其实可以看成这些向量分别与其他向量计算内积。(此时脑海里想起矩阵乘法的口诀,第一行乘以第一列、第一行乘以第二列......嗯哼,矩阵转置以后第一行不就是第一列吗?这是在计算第一个行向量与自己的内积,第一行乘以第二列是计算第一个行向量与第二个行向量的内积第一行乘以第三列是计算第一个行向量与第三个行向量的内积.....)

回想我们文章开头提出的问题,向量的内积,其几何意义是什么?

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

记住这个知识点,我们进入一个超级详细的实例:

我们假设 \large X = [x_1^T; x_2^T; x_3^T],其中\large X为一个二维矩阵,\large x_i^T为一个行向量(很多教材默认是列向量,但为了方便读者理解,我还是写成行向量)。对应下面的图,\large x_1^T对应“早”字embedding之后的结果,以此类推。

下面的运算模拟了一个过程,即\large XX^T。我们来看看其结果究竟有什么意义。

Embedding内积

首先,行向量\large x_i^T分别与自己和其他两个行向量做内积(“早”分别与“上”“好”计算内积),得到了一个新的向量。我们回想前文提到的向量的内积表征两个向量的夹角,表征一个向量在另一个向量上的投影。那么新的向量有什么意义呢?是行向量\large x_i^T在自己和其他两个行向量上的投影。投影值大和小又有什么意义呢?

投影值大,意味两个向量相关度高。

我们考虑,如果两个向量夹角是90°,那么这两个向量线性无关,完全没有相关性。

更进一步,这两个向量是词向量,是词在高维空间的数值映射。词向量之间相关度高表示什么?是不是在一定程度上(不是完全)表示,在关注词A的时候,应给予词B更多的关注?

上图展示了一个行向量运算的结果,那么矩阵\large XX^T的意义是什么呢?

矩阵\large XX^T是一个方阵,我们以行向量的角度理解,里面保存了每个向量和自己与其他向量进行内积运算的结果。

至此,我们理解了公式\large Softmax(XX^T)X中,\large XX^T的意义。我们进一步,Softmax的意义何在呢?请看下图:

大家都知道softmax的意义就是归一化。

我们结合上图的理解,softmax之后,这些数字的和为1了,那么attention的核心机制是什么?那不就是加权求和么?那么权重怎么来的呢?就是这些归一化之后的数字。当我们关注“早”这个字的时候,我们应该分配0.4的注意力(attention)给它本身,剩下0.4的注意力给“上”,最后的0.2的注意力给“好”。当然具体到我们的Transformer,就是对应向量的运算了,这是后话。

行文至此,我们对这个东西是不是有点熟悉?Python中的热力图Heatmap,其中的矩阵是不是也保存了相似度的结果?

热力图

但,对于\large Softmax(XX^T)X,我们仅仅理解了一半,最后一个\large X有什么意义呢?完整的公式究竟表示什么呢?我们继续之前的计算。请看下图。

我们取\large Softmax(XX^T)X的一个行向量举例。这个行向量与\large X的一个列向量相乘,表示什么?

观察上图,行向量与\large X的第一个列向量相乘,得到一个新的行向量,且这个行向量与\large X的维度相同。

在新的向量中,每一个维度的数值都是由三个词向量在这一维度的数值加权求和得来的,这个新的行向量就是"早"字词向量经过注意力机制加权求和之后的表示。

一张更形象的图是这样的,图中右半部分的颜色深浅,其实就是我们上图中黄色向量中数值的大小,意义就是单词之间的相关度(回想之前的内容,相关度其本质是由向量的内积度量的)!

如果你坚持阅读到了这儿,相信你对公式\large Softmax(XX^T)X有了更深刻的理解。

接下来就讲一下self-attention公式中的一些细枝末节的问题

Q K V矩阵

在我们之前的例子中并没有出现Q K V的字眼,因为其并不是公式中最本质的内容。

其实,许多文章里所谓的Q K V矩阵、查询向量之类的字眼,其来源都是\large X与矩阵的乘积,本质上都是\large X的线性变换。那么为什么不直接使用\large X而要对其进行线性变换呢?

当然是为了提升模型的拟合能力,矩阵\large W都是可以训练的,起到一个缓冲的效果。

如果你真正读懂了前文的内容,读懂了\large Softmax(XX^T)X这个矩阵的意义,那么你也就理解了所谓查询向量这一类的字眼的含义。

\large \sqrt{d_k}的意义

假设 \large Q, K 都服从均值为0,方差为1的标准高斯分布,那么\large A^T = Q^TK中元素的均值为0,方差为d。当d变得很大时,\large A中的元素的方差也会变得很大,如果\large A中的元素方差很大,那么\large Softmax(A)的分布会趋于陡峭(分布方差大,分布集中在绝对值大的区域)。总结一下就是\large Softmax(A)的分布会和d有关。因此\large A中每个元素除以\large \sqrt{d_k}后,方差又变为了1。这使得\large Softmax(A)的分布的陡峭程度和d成功解耦,从而使得Transformer在训练过程中的梯度值保持稳定。

怎么样,各位看官听懂没?没听懂的也请不懂装懂。

结语

最后再补充一点,对self-attention来说,它跟每一个input vector都做attention,所以没有考虑到input sequence的顺序。更通俗来讲,大家可以发现我们前文的计算每一个词向量都与其他词向量计算内积,得到的结果丢失了我们原来文本的顺序信息。对比来说,LSTM是对于文本顺序信息的解释是输出词向量的先后顺序,而我们上文的计算对sequence的顺序这一部分则完全没有提及,你打乱词向量的顺序,得到的结果仍然是相同的。

这就牵扯到Transformer的位置编码了,我们按住不表。

后续我将再写一篇关于Transformer的原理讲解,这次坚决不鸽。

全网最通俗易懂的 Self-Attention自注意力机制 讲解相关推荐

  1. Attention使用注意力机制的seq2seq 动手学深度学习v2

    1. Attention使用注意力机制的seq2seq 2. Attention使用注意力机制的seq2seq 代码实现 3. Q&A attention在搜索的时候,是在当前句子搜索. 一般 ...

  2. Attention 和 Self-Attention [一万字拆解 Attention,全网最详细的注意力机制讲解]

    上一篇文章 从 RNN 到 Attention 我们在RNN的Encoder-Decoder框架下引入了Attention 机制,用来解决 RNN 模型中梯度下降以及性能瓶颈问题,如下图所示: 上图就 ...

  3. Attention!注意力机制可解释吗?

    来源:哈工大SCIR 本文约9300字,建议阅读10+分钟. 本文将与您探讨注意力机制的可解释性问题. 序言 自2014年Bahdanau将Attention作为软对齐引入神经机器翻译以来,大量的自然 ...

  4. Attention!注意力机制模型最新综述(附下载)

    来源:专知 本文多资源,建议阅读5分钟. 本文详细描述了Attention模型的概念.定义.影响以及如何着手进行实践工作. [导 读]Attention模型目前已经成为神经网络中的一个重要概念,本文为 ...

  5. Coord.Attention 协调注意力机制

    此为我对于协调注意力机制的一些理解,paper来源于2021年CVPR import torch import torch.nn as nn #---------------------------- ...

  6. self attention(自注意力机制)

    self attention是注意力机制中的一种,也是transformer中的重要组成部分,本文先重新回归一下注意力机制,再做进一步介绍. 正如之前说的,注意力机制的目的是根据我们的目标,去关注部分 ...

  7. 2021CVPR-Coordinate Attention for Efficient Mobile Network Design 坐标注意力机制

    前言 了解了SE和CBAM之后,Coordinate Attention(坐标注意)指出了前两者的一些缺点,并做出了一些改进,该篇论文发表于2021年CVPR Abstract 最近关于mobile ...

  8. 各类注意力机制的介绍 (Intra Inter Soft Hard Global Local Attention)

    前言 注意力机制最早出现于论文<Neural Machine Translation by Jointly Learning to Align and Translate> 中. 传统神经 ...

  9. 基于注意力机制的seq2seq网络

    六月 北京 | 高性能计算之GPU CUDA培训 6月22-24日三天密集式学习  快速带你入门阅读全文> 正文共1680个字,26张图,预计阅读时间10分钟. seq2seq的用途有很多,比如 ...

最新文章

  1. 好程序员分享做HTML5页面你要懂得这些
  2. openstack 同一网络 多个subnet
  3. 使用DataSet对象添加记录
  4. 将用int型存储的时间转换成time时间格式笔记
  5. oracle体系三大文件,oracle 体系_第三章控制文件
  6. HTML 表格中的行合并与列合并
  7. php开发客服系统(持久连接+轮询+反向ajax)
  8. 这届年轻人,不为情人节烧钱了
  9. 【Flink】Metrics运作机制
  10. Windows 10 移动版正式结束支持
  11. 玩转SpringBoot2.x之缓存对象
  12. C++ 可变索引模板 和 template template
  13. Android Gradle配置资源前缀
  14. apple 关闭双重认证_这次Apple可以关闭工作吗?
  15. winscp开启ftp_WinSCP连接FTP上传下载文件教程
  16. 局域网下连接其他电脑的HDFS集群
  17. Android NCNN识别文字(OCR)
  18. Java web----多表查询
  19. 从头搭建rpc框架_#LearnByDIY-如何从头开始创建JavaScript单元测试框架
  20. 使用canvas画网格

热门文章

  1. 做眼镜识别的人脸检测
  2. 2022-11-09:给定怪兽的血量为hp 第i回合如果用刀砍,怪兽在这回合会直接掉血,没有后续效果 第i回合如果用毒,怪兽在这回合不会掉血, 但是之后每回合都会掉血,并且所有中毒的后续效果会叠加 给
  3. MySQL的下载与安装详细教程
  4. ORACLE安全加固篇
  5. 【美团·北京沙龙报名】AI在外卖场景中的最佳实践
  6. 知乎:月薪2~3万,码农怎样度过一天
  7. android 后台实时定位,实现后台定位,持续无限制定位
  8. 刚才先入为主到了令人发指的地步
  9. 每日一题#10-22 Ransomware
  10. linux下Ftp客户端程序与Makefile