注意力机制+注意力汇聚

article/2025/9/15 13:25:13

学习《动手学习深度学习》注意力机制 之后,简单做个总结。

注意力提示

假设坐在一个物品很多的房间里,我们容易受到比较显眼的物品的吸引,进而将注意力倾注在那个物品上,这样我们就忽略了周围物品;换一种情形,如果你想读一本书,那么你进入房间将注意力放在书上,如果情况很急,甚至不论物品有多显眼,也无法博得你的注意力。

前者是一种非自主性注意力,后者是自主性注意力。在注意力的背景下,将自主性提示称为查询(query),给定任何查询,注意力机制通过注意力汇聚(attention pooling),将选择引导至感官输入(sensory inputs, 例如中间特征表示)。在注意力机制中,感官输入称为(value)。每个值都和一个(key)配对,可以想象为感官输入的非自主提示。如下图所示(图来自原文),我们通过设计注意力汇聚,将查询(自主性提示)和(非自主性输入)结合在一起,实现对(感官输入)的选择倾向。
在这里插入图片描述

注意力汇聚

非参数注意力汇聚

Nadaraya-Watson核回归:
f ( x ) = ∑ i = 1 n K ( x − x i ) ∑ j = 1 n K ( x − x i ) y i f(x)=\sum_{i=1}^n{\frac{K(x-x_i)}{\sum_{j=1}^n{K(x-x_i)}}y_i} f(x)=i=1nj=1nK(xxi)K(xxi)yi
其中,K是核。受到Nadaraya-Watson的启发,我们可以归纳出来一个更加通用的注意力汇聚公式
f ( x ) = ∑ α ( x , x i ) y i f(x)=\sum{\alpha(x, x_i)y_i} f(x)=α(x,xi)yi
其中x查询(自主性提示), ( x i , y i ) (x_i,y_i) (xi,yi)​​​是键值对(非意志线索感觉输入)。注意力汇聚是 y i y_i yi​的加权平均,将查询 x x i x_i xi之间的关系建模为注意力权重(attention weight) α ( x , x i ) \alpha(x,x_i) α(x,xi),这个权重将被分配给每一个对应值 y i y_i yi​​。对于任何查询,模型在所有键值对注意力权重都是一个有效的概率分布: 它们是非负的,并且总和为1。

如果我们将Nadaraya-Watson核回归中的核换成一个高斯核,其定义如下:
K ( u ) = 1 2 π exp ⁡ ( − u 2 2 ) K(u)=\frac{1}{\sqrt{2 \pi}} \exp \left(-\frac{u^{2}}{2}\right) K(u)=2π 1exp(2u2)
将高斯核代入就可以得到如下公式:
f ( x ) = ∑ i = 1 n α ( x , x i ) y i = ∑ i = 1 n exp ⁡ ( − 1 2 ( x − x i ) 2 ) ∑ j = 1 n exp ⁡ ( − 1 2 ( x − x j ) 2 ) y i = ∑ i = 1 n softmax ⁡ ( − 1 2 ( x − x i ) 2 ) y i \begin{aligned} f(x) &=\sum_{i=1}^{n} \alpha\left(x, x_{i}\right) y_{i} \\ &=\sum_{i=1}^{n} \frac{\exp \left(-\frac{1}{2}\left(x-x_{i}\right)^{2}\right)}{\sum_{j=1}^{n} \exp \left(-\frac{1}{2}\left(x-x_{j}\right)^{2}\right)} y_{i} \\ &=\sum_{i=1}^{n} \operatorname{softmax}\left(-\frac{1}{2}\left(x-x_{i}\right)^{2}\right) y_{i} \end{aligned} f(x)=i=1nα(x,xi)yi=i=1nj=1nexp(21(xxj)2)exp(21(xxi)2)yi=i=1nsoftmax(21(xxi)2)yi
在上式的结果中,我们会发现如果一个键 x i x_i xi的值越接近与给定的查询x,那么分配给这个键对应值 y i y_i yi​​的注意力权重就越大,也就获得越多的注意力。下面用一个示例来将上述概念串联起来:

# 目标函数
def f(x):return 2 * torch.sin(x) + x ** 0.8"""生成训练集"""
n_train = 50
# 使用随机数来生成x而不是直接0-5的数,可以得到随机度更高的样本
# 
# 通过乘以5来控制样本区间的范围
x_train, _ = torch.sort(torch.rand(n_train) * 5)
# 噪声服从均值为0和标准差为0.5的正态分布。
y_train = f(x_train) + torch.normal(0.0, 0.5, (n_train,))"""生成测试集"""
x_test = torch.arange(0, 5, 0.1)
y_truth = f(x_test)
n_test = len(x_test)

上面代码生成了长度为n_train的训练集、长度为n_test的测试集,接下来,我们将x_test构造为查询(意志线索),将x_train作为为(非意志线索),y_train作为(感官输入),并将查询 x x i x_i xi​​之间的关系建模为注意力权重:

# 每一行都包含相同的测试输入(相同的查询)
x_repeat = x_test.repeat_interleave(n_train).reshape((-1, n_train))  # (n_test, n_train)
# x_train 包含键,attention.shape=(n_test, n_train)
# 
# 每一行都包含要在给定的每一个查询的值(y_train)之间的分配的注意力权重。
attension_weights = nn.functional.softmax(-(x_repeat - x_train)**2 / 2, dim=1)# y_hat的每个元素都是值的加权平均值,其中的权重是注意力权重
y_hat = torch.matmul(attention_weights, y_train)
plot_kernel_reg(y_hat)

为什么选择x_test作为查询(意志线索)呢?因为我们想要得到的是y_hat,输入是x_test,假设我们时刻都保持着有意识的状态,那么我们就根据自己的意志(x_test)结合环境的特征(x_train),处理接收到的感觉输入(y_train)最终找到自己想到的物品(y_hat)。可能会疑惑为什么y_truth不作为感觉输入?因为y_truth是用来衡量我们的输入x_test所得到的结果如何,也就是将其和y_hat进行比对的过程。

将上述矩阵操作过程使用图来表示如下:
在这里插入图片描述

那么在表达式中, s o f t m a x ( − 1 2 ( x − x i ) 2 ) softmax(-\frac{1}{2}(x-x_i)^2) softmax(21(xxi)2)​​体现在哪里呢? 我们在得到上图的两个矩阵之后,将两个矩阵相减,对于x_repeat矩阵,每一行中的元素都相等,不同行的元素不等,对应的是不同的 查询,而右边经过广播机制得到的矩阵中,每一列的元素相等的,不同行的元素表示不同的 ,两个矩阵相减之后就实现:给定一个查询 x x x,计算所有的键 x i x_i xi和查询之间的差距。
在这里插入图片描述
看上去有点像x_trainx_test进行加权得到attention_weights,但是实际上这也仅仅是矩阵运算,单从矩阵运算来看,将谁看作谁的加权都行,但是结合我们的实际问题背景来看,将x_test看作x_train的加权更加合理,因为我们将x_test作为意志线索,而x_train作为非意志线索非意志线索-感官输入 对于我们的感官来讲都是时刻存在的,如果加上我们的意识的话可以帮助我们更好的从外界注意到我们想要获得的东西,所以理解为x_testx_train进行加权更合理。当然这个加权操作之后得到的是attention_weights,这个矩阵又可以作为y_train的加权,最终可以得到y_hat

那么这种非参数注意力汇聚的操作预测效果如何呢?上述代码的运行结果如下:
在这里插入图片描述

上面说到,如果一个键 x i x_i xi的值越接近于给定的查询x,那么分配给这个键对应值 y i y_i yi​​的注意力权重就越大,即注意力汇聚的注意力权重越大,也就获得越多的注意力,将attention_weights可视化得到如下结果,从结果上来看,矩阵的对角线权值更高,即键和查询相等的部分权值更高,表明所使用的方法达到了一定的效果:
在这里插入图片描述
**这个注意力权重满足每一行的所有值之和为1,**其实是代码内部将每一行的所有元素一起执行softmax函数运算的结果。

但是效果不是很好,是否和数据量有关呢?将数据量改成500和1000分别测试,得到的结果如下:

数据量为500:
在这里插入图片描述
数据量为1000:在这里插入图片描述

发现拟合效果并没有很大的变化,说明与数据量无关。其实也好理解,如果仅仅增加数据量的话,变化的仅仅是权重矩阵的规模,而权重矩阵仅仅是由训练数据和测试数据的差值经过一层线性变换得到,其表达能力不够(欠拟合)。

参数注意力汇聚

和非参数注意力汇聚不同的是,我们在查询 x x x和键 x i x_i xi之间的距离乘以可学习参数 w w w就可以得到如下的公式:
f ( x ) = ∑ i = 1 n α ( x , x i ) y i = ∑ i = 1 n exp ⁡ ( − 1 2 ( ( x − x i ) w ) 2 ) ∑ j = 1 n exp ⁡ ( − 1 2 ( ( x − x j ) w ) 2 ) y i = ∑ i = 1 n softmax ⁡ ( − 1 2 ( ( x − x i ) w ) 2 ) y i \begin{aligned} f(x) &=\sum_{i=1}^{n} \alpha\left(x, x_{i}\right) y_{i} \\ &=\sum_{i=1}^{n} \frac{\exp \left(-\frac{1}{2}(\left(x-x_{i})w\right)^{2}\right)}{\sum_{j=1}^{n} \exp \left(-\frac{1}{2}(\left(x-x_{j})w\right)^{2}\right)} y_{i} \\ &=\sum_{i=1}^{n} \operatorname{softmax}\left(-\frac{1}{2}(\left(x-x_{i})w\right)^{2}\right) y_{i} \end{aligned} f(x)=i=1nα(x,xi)yi=i=1nj=1nexp(21((xxj)w)2)exp(21((xxi)w)2)yi=i=1nsoftmax(21((xxi)w)2)yi
有了可学习参数,我们接下来的目标就是学习注意力汇聚的参数。

剩余的内容请移步原文查看~


http://chatgpt.dhexx.cn/article/FKcqRkdc.shtml

相关文章

LSTM(RNN)中的注意力机制

一、示例代码 目的是让网络“注意”到 index2 的特征 """ 参考: https://blog.csdn.net/weixin_44791964/article/details/104000722?spm1001.2014.3001.5501 """import matplotlib.pyplot as plt import numpy as np import pand…

Tensorflow (6) Attention 注意力机制

参考: 细讲 | Attention Is All You Need 关于注意力机制(《Attention is all you need》) 一步步解析Attention is All You Need! - 简书(代码) The Illustrated Transformer – Jay Alammar – Visualizing machine learnin…

注意力机制attention图解

来自对https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/的笔记 注意力机制核心观点就是让RNN每一步都监视一个更大的信息集合并从中挑选信息。例如:如果你使用RNN去为一个图像生成注释,…

注意力机制Attention详解

注意力机制Attention详解 一、前言 2018年谷歌提出的NLP语言模型Bert一提出,便在NLP领域引起热议,之所以Bert模型能够火出圈,是由于Bert模型在NLP的多项任务中取得了之前所有模型都不能达到的出色效果。那么Bert模型它是如何提出的呢&#x…

注意力机制(Attention Mechanism)

注意力机制起源于应用于NLP的RNN模型,但也在其他的领域有所应用。对注意力机制的理解也是算法面试经常提及的一道基础面试题,在这篇博文里我们汇总吴恩达深度学习视频序列模型3.7和3.8以及台大李宏毅教授对Attenion Mechanism以及相关参考文献对注意力机…

注意力机制总结

导读 注意力机制,其本质是一种通过网络自主学习出的一组权重系数,并以“动态加权”的方式来强调我们所感兴趣的区域同时抑制不相关背景区域的机制。在计算机视觉领域中,注意力机制可以大致分为两大类:强注意力和软注意力。由于强…

深度学习之注意力机制(Attention Mechanism)和Seq2Seq

这篇文章整理有关注意力机制(Attention Mechanism )的知识,主要涉及以下几点内容: 1、注意力机制是为了解决什么问题而提出来的? 2、软性注意力机制的数学原理; 3、软性注意力机制、Encoder-Decoder框架与Seq2Seq 4、自注意力模型的原理。 一、注意力机制可以解决什么问…

神经网络学习小记录73——Pytorch CA(Coordinate attention)注意力机制的解析与代码详解

神经网络学习小记录73——Pytorch CA(Coordinate attention)注意力机制的解析与代码详解 学习前言代码下载CA注意力机制的概念与实现注意力机制的应用 学习前言 CA注意力机制是最近提出的一种注意力机制,全面关注特征层的空间信息和通道信息…

【Transformer 相关理论深入理解】注意力机制、自注意力机制、多头注意力机制、位置编码

目录 前言一、注意力机制:Attention二、自注意力机制:Self-Attention三、多头注意力机制:Multi-Head Self-Attention四、位置编码:Positional EncodingReference 前言 最近在学DETR,看源码的时候,发现自己…

注意力机制详解系列(一):注意力机制概述

👨‍💻作者简介: 大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享。公众号: GoAI的学习小屋,免费分享书籍、简历、导图等资料,更有交流群分享AI和大数据,加群方式公众号回复“加群”或➡️点击链接。 🎉专栏推荐: 目…

注意力机制详解

注意力机制详解 Attention机制由来Attention定义Encoder-Decoder框架Attenion机制的引入Attention机制的类别Hard AttentionSoft AttentionGlobal AttentionLocal AttentionSelf AttentionMulti-head Attention Attention机制的应用自然语言处理领域计算机视觉领域语音识别领域…

【深度学习】(1) CNN中的注意力机制(SE、ECA、CBAM),附Pytorch完整代码

大家好,今天和各位分享一下如何使用 Pytorch 构建卷积神经网络中的各种注意力机制,如:SENet,ECANet,CBAM。 注意力机制的原理 和 TensorFlow2 的实现方式可以看我下面两篇博文: SENet、ECANet&#xff1a…

注意力机制详述

学习本部分默认大家对RNN神经网络已经深入理解了,这是基础,同时理解什么是时间序列,尤其RNN的常用展开形式进行画图,这个必须理解了。 这篇文章整理有关注意力机制(Attention Mechanism )的知识&#xff0c…

手把手带你YOLOv5/v7 添加注意力机制(并附上30多种顶会Attention原理图)2023/6/15更新

🌟想了解YOLO系列算法更多教程欢迎订阅我的专栏🌟 对于基础薄弱的同学来说,推荐阅读《目标检测蓝皮书》📘,里面涵盖了丰富的目标检测实用知识,是你迅速掌握目标检测的理想选择! 如果想了解 YO…

量化交易python入门书籍_张杨飞《Python量化交易入门》PDF下载

张杨飞《Python量化交易入门》PDF下载 首页 > 计算机类 字号:小 中 大 评论:0 条 评论:0 条 Python量化交易入门 【作 者】张杨飞 【形态项】 402 【出版项】 北京:电子工业出版社 , 2019.04 【ISBN号】978-7-121-36140-1 【中图法分类号】F830.91 【原书…

Python猫荐书系列之七:Python入门书籍有哪些?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/ArN-6mLPzPT8Zoq0Na_tsg 最近,猫哥的 Python 技术学习群里进来了几位比较特殊的同学:一位初三的以编程为兴趣的女生、…

2019年Python入门书籍推荐

大概是一时改变不了之前的学习习惯,所以很多Python小白都来问我有什么适合的Python入门书籍推荐。接下来我就为大家推荐几本经典的:(请大家根据自己以下六种情况对号入座,挑选适合自己的 Python 入门书籍)一&#xff0…

Python入门书籍,百万读者都选择!

从0到100万 Python入门神书 如果你是程序员,或者是 Python 爱好者,那你一定听说过一本书:《Python编程 从入门到实践》。作为国内首批 Python 图书之一,蟒蛇书首版自2016年问世以来就狂销70余万册;2020年10月第2版出版…

斯坦福大学教授,极力推荐5本python入门书籍,入门最快基础最好

为什么要选择python Python是一门更注重可读性和效率的语言,尤其是相较于 Java,PHP 以及 C++ 这样的语言,它的这两个优势让其在开发者中大受欢迎。 如果你正处于想学习python或者正在python入门阶段,推荐5套python电子学习书籍,对于没有接触过编程,或者基础薄弱者来说…

0基础学Python入门书籍应该看什么?

0基础学Python入门书籍应该看什么?Python 对不少人来说是谜一样的东西不知道如何下手、从何处下手,找了很多资源几个月过去了学习陷入换乱,没没能入门Python开发。出现这种情况大多是因为没有充分做好学习前的准备。 0基础学习Python建议读一…