python系列&deep_study系列:【李沐-动手学深度学习】一文读懂注意力机制




【李沐-动手学深度学习】一文读懂注意力机制

一文读懂注意力机制

本文依据李沐老师的书和课程进行更为具象化的讲解。
电子书《动手学深度学习》地址:https://zh-v2.d2l.ai/index.html
视频课程:【完结】动手学深度学习PyTorch版

1. 注意力机制的生物学原理

生物实验认为,人的行为活动受到视觉世界中“非自主性提示”和“自主性提示”的影响。

“非自主性提示” 指环境中物体的突出性和易见性。如在灰色的空间中,有一套红色咖啡杯具,我们会不由自主地把视力聚焦在突出和显眼的物品上:

在这里插入图片描述

图1 由于突出性的非自主性提示(红杯子),注意力不自主地指向了咖啡杯

“自主性提示” 一般指主观认识和意识控制。当我们想要看书时,自然会把注意力转移到书上:

在这里插入图片描述

图2 依赖于主观意志提示(想读一本书),注意力被自主引导到书上

此处延申出两个问题:

  1. 环境中的所有物体都会对注意力产生影响。

  2. 不同物品对于注意力的“吸引力“不同,导致注意力会关注某个物品。

下面我们将使用注意力模型解释,计算机如何理解“注意力”。

2. 注意力机制

2.1 非自主性提示

非自主性提示的建模,只需要对视觉下的不同“物体”赋予不同权重,那么在接收这些“物体”就会产生不同的偏向。
利用上面的例子,如果我们给红色的杯子赋予一个较大的权重(weight = 0.6),而其他物品赋予一个较小的权重(weight = 0.1),显然在获取信息时红杯子对我们造成的影响更大。
在这里插入图片描述
图3 非自主性提示

这一点通过简单的参数化全连接层就可以实现,而我们的重点在于自主性提示

2.1 自主性提示
查询、键和值

在注意力机制的背景下,自主性提示 (想要关注什么) 被称为查询(query),非自主性提示 (环境中的物体) 被称为键(key),感官输入 (在我的认知中,该物体的定义) 被称之为值(value)。

Key与Value容易混淆,这里举例说明:

  • Key是环境中的客观物体,通常它带有一些客观属性,如红色+红色杯垫+咖啡杯是这个物体的属性。

  • Value是我们的主观意识,如该咖啡杯在我们的意识里是一个独特的精致的红杯子,那么“独特的精致的精致的”就是主观意识。(每个人对于客观物体的主观意识不同,因此Key的Value可以相同也可以不同

注意力计算

在带有主观目的(query)进行观察时,首先将查询(query)与环境中的物体(key)做匹配,最终会输入匹配度最高的物体的属性(value)作为最终输出:

在这里插入图片描述

下一章,我们将从代码着手,逐行解释注意力机制是如何实现的。







https://blog.youkuaiyun.com/qq_51600482?type=blog添加链接描述

【李沐-动手学深度学习】一文读懂注意力机制

### 李沐深度学习教程中的注意力机制 #### 注意力机制概述 在李沐的《动手学深度学习》课程中,注意力机制被描述为一种模仿人类选择性注意能力的技术[^2]。这种技术的核心在于从大量信息中筛选出对当前任务至关重要的部分。具体来说,在处理序列数据时,注意力机制允许模型根据不同位置的重要性赋予不同的权重。 #### 注意力机制的应用场景 对于机器翻译这类任务而言,当解码器生成目标语言单词的过程中,自主性提示可以理解为目标端上下文信息;而非自主性提示则是源端词语及其对应的语义特征[^1]。感官输入指的是原始输入句子本身。因此,在构建此类系统时,可以通过定义合适的查询(Query)、键(Key)以及值(Value)三者间的关系来实现有效的注意力计算过程。 #### 多头注意力机制详解 为了进一步提升性能,引入了多头注意力的概念。相比于单一头部的设计,这种方法采用了多个平行工作的注意力模块,并最终汇总它们的结果作为整体输出的一部分[^3]。每个“头”负责捕捉不同类型的相关性模式,从而使得整个架构具备更强的表现力和灵活性。 #### 实践案例分析 考虑到实际应用需求,书中还提供了具体的实践指导。例如,针对一个 \(10 \times 10\) 的矩阵,经过 softmax 函数作用后形成合法的概率分布形式,进而可用于展示注意力权重图谱。这样的练习有助于直观感受不同元素之间相互关联的程度。 ```python import numpy as np import matplotlib.pyplot as plt def show_heatmaps(matrix, figsize=(6, 4)): """Display heatmap of the given matrix.""" fig, ax = plt.subplots(figsize=figsize) cax = ax.matshow(matrix, cmap='viridis') fig.colorbar(cax) # Generate random data and apply softmax to ensure valid probability distribution per row. data = np.random.rand(10, 10) softmax_data = np.exp(data) / np.sum(np.exp(data), axis=1, keepdims=True) # Visualize attention weights using heatmaps function defined above. show_heatmaps(softmax_data) plt.show() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坦笑&&life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值