63.5 注意力提示_by《李沐:动手学深度学习v2》pytorch版

系列文章目录


文章目录

  • 系列文章目录
  • 注意力提示
    • 生物学中的注意力提示
    • 查询、键和值
    • 注意力的可视化
      • 使用 `show_heatmaps` 显示注意力权重
        • 代码示例
      • 代码解析
      • 结果
    • 小结
    • 练习


注意力提示

🏷sec_attention-cues

感谢读者对本书的关注,因为读者的注意力是一种稀缺的资源:此刻读者正在阅读本书(而忽略了其他的书),因此读者的注意力是用机会成本(与金钱类似)来支付的。为了确保读者现在投入的注意力是值得的,作者们尽全力(全部的注意力)创作一本好书。
自经济学研究稀缺资源分配以来,人们正处在“注意力经济”时代,即人类的注意力被视为可以交换的、有限的、有价值的且稀缺的商品。许多商业模式也被开发出来去利用这一点:在音乐或视频流媒体服务上,人们要么消耗注意力在广告上,要么付钱来隐藏广告;为了在网络游戏世界的成长,人们要么消耗注意力在游戏战斗中,从而帮助吸引新的玩家,要么付钱立即变得强大。总之,注意力不是免费的。
注意力是稀缺的,而环境中的干扰注意力的信息却并不少。比如人类的视觉神经系统大约每秒收到 1 0 8 10^8 108位的信息,这远远超过了大脑能够完全处理的水平。幸运的是,人类的祖先已经从经验(也称为数据)中认识到“并非感官的所有输入都是一样的”。在整个人类历史中,这种只将注意力引向感兴趣的一小部分信息的能力,使人类的大脑能够更明智地分配资源来生存、成长和社交,例如发现天敌、找寻食物和伴侣。

生物学中的注意力提示

注意力是如何应用于视觉世界中的呢?这要从当今十分普及的双组件(two-component)的框架开始讲起:这个框架的出现可以追溯到19世纪90年代的威廉·詹姆斯,他被认为是“美国心理学之父” :cite:James.2007。在这个框架中,受试者基于非自主性提示自主性提示有选择地引导注意力的焦点。非自主性提示是基于环境中物体的突出性和易见性。
想象一下,假如我们面前有五个物品:一份报纸、一篇研究论文、一杯咖啡、一本笔记本和一本书,就像 :numref:fig_eye-coffee
所有纸制品都是黑白印刷的,但咖啡杯是红色的。换句话说,这个咖啡杯在这种视觉环境中是突出和显眼的,不由自主地引起人们的注意。所以我们会把视力最敏锐的地方放到咖啡上,如 :numref:fig_eye-coffee所示。

在这里插入图片描述🏷fig_eye-coffee

喝咖啡后,我们会变得兴奋并想读书,所以转过头,重新聚焦眼睛,然后看看书,就像 :numref:fig_eye-book中描述那样。
与 :numref:fig_eye-coffee中由于突出性导致的选择不同,此时选择书是受到了认知和意识的控制,因此注意力在基于自主性提示去辅助选择时将更为谨慎。受试者的主观意愿推动,选择的力量也就更强大。

在这里插入图片描述🏷fig_eye-book

查询、键和值

自主性的与非自主性的注意力提示解释了人类的注意力的方式,下面来看看如何通过这两种注意力提示,用神经网络来设计注意力机制的框架,首先,考虑一个相对简单的状况,即只使用非自主性提示。要想将选择偏向于感官输入,则可以简单地使用参数化的全连接层,甚至是非参数化的最大汇聚层或平均汇聚层。
因此,“是否包含自主性提示”将注意力机制与全连接层或汇聚层区别开来。在注意力机制的背景下,自主性提示被称为查询(query)。给定任何查询,注意力机制通过注意力汇聚(attention pooling)将选择引导至感官输入(sensory inputs,例如中间特征表示)。在注意力机制中,这些感官输入被称为(value)。更通俗的解释,每个值都与一个(key)配对,这可以想象为感官输入的非自主提示。如 :numref:fig_qkv所示,可以通过设计注意力汇聚的方式,便于给定的查询(自主性提示)与键(非自主性提示)进行匹配,这将引导得出最匹配的值(感官输入)。
注意力机制框架如下图所示。
在这里插入图片描述🏷fig_qkv

鉴于上面所提框架在 :numref:fig_qkv中的主导地位,因此这个框架下的模型将成为本章的中心。然而,注意力机制的设计有许多替代方案。例如可以设计一个不可微的注意力模型,该模型可以使用强化学习方法 :cite:Mnih.Heess.Graves.ea.2014进行训练。

注意力的可视化

平均汇聚层可以被视为输入的加权平均值,其中各输入的权重是一样的。
实际上,注意力汇聚得到的是加权平均的总和值,其中权重是在给定的查询和不同的键之间计算得出的。

import torch
from d2l import torch as d2l

为了可视化注意力权重,需要定义一个show_heatmaps函数。其输入matrices的形状是(要显示的行数,要显示的列数,查询的数目,键的数目)。

def show_heatmaps(matrices, xlabel, ylabel, titles=None, figsize=(2.5, 2.5),cmap='Reds'):"""显示矩阵热图"""d2l.use_svg_display()num_rows, num_cols = matrices.shape[0], matrices.shape[1]fig, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize,sharex=True, sharey=True, squeeze=False)for i, (row_axes, row_matrices) in enumerate(zip(axes, matrices)):for j, (ax, matrix) in enumerate(zip(row_axes, row_matrices)):pcm = ax.imshow(matrix.detach().numpy(), cmap=cmap)if i == num_rows - 1:ax.set_xlabel(xlabel)if j == 0:ax.set_ylabel(ylabel)if titles:ax.set_title(titles[j])fig.colorbar(pcm, ax=axes, shrink=0.6);

下面使用一个简单的例子进行演示。在本例子中,仅当查询和键相同时,注意力权重为1,否则为0。

attention_weights = torch.eye(10).reshape((1, 1, 10, 10))#
show_heatmaps(attention_weights, xlabel='Keys', ylabel='Queries')

使用 show_heatmaps 显示注意力权重

上方代码中,attention_weights 是一个 (10 X10) 的单位矩阵,用于表示注意力权重。以下是如何使用 show_heatmaps 函数来可视化这些权重的详细步骤。

代码示例
import torch
import numpy as np
import d2l  # 假设d2l库已安装并可用# 创建注意力权重
attention_weights = torch.eye(10).reshape((1, 1, 10, 10))# 使用 show_heatmaps 函数显示热图
show_heatmaps(attention_weights, xlabel='Keys', ylabel='Queries', titles=['Attention Weights'])

代码解析

  1. 创建注意力权重:

    attention_weights = torch.eye(10).reshape((1, 1, 10, 10))
    

    这里使用 torch.eye(10) 创建一个 (10 X 10) 的单位矩阵,然后通过 reshape 改变其形状为 (1, 1, 10, 10),以符合 show_heatmaps 函数的输入要求。

  2. 调用 show_heatmaps:

    show_heatmaps(attention_weights, xlabel='Keys', ylabel='Queries', titles=['Attention Weights'])
    

    通过传入 attention_weights、x轴和y轴标签,以及标题,调用 show_heatmaps 函数来绘制热图。

结果

  • 热图: 生成的热图将显示单位矩阵的结构,其中对角线上的值为1,其他位置的值为0。这表示每个查询(Query)与其对应的键(Key)之间的注意力权重关系。

在这里插入图片描述
后面的章节内容将经常调用show_heatmaps函数来显示注意力权重。

小结

  • 人类的注意力是有限的、有价值和稀缺的资源。
  • 受试者使用非自主性和自主性提示有选择性地引导注意力。前者基于突出性,后者则依赖于意识。
  • 注意力机制与全连接层或者汇聚层的区别源于增加的自主提示。
  • 由于包含了自主性提示,注意力机制与全连接的层或汇聚层不同。
  • 注意力机制通过注意力汇聚使选择偏向于值(感官输入),其中包含查询(自主性提示)和键(非自主性提示)。键和值是成对的。
  • 可视化查询和键之间的注意力权重是可行的。

练习

  1. 在机器翻译中通过解码序列词元时,其自主性提示可能是什么?非自主性提示和感官输入又是什么?
  2. 随机生成一个 10 × 10 10 \times 10 10×10矩阵并使用softmax运算来确保每行都是有效的概率分布,然后可视化输出注意力权重。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/55540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动手学深度学习(李沐)PyTorch 第 7 章 现代卷积神经网络

7.1 深度卷积神经网络(AlexNet) 在计算机视觉中,直接将神经网络与其他机器学习方法进行比较也许不公平。这是因为,卷积神经网络的输入是由原始像素值或是经过简单预处理(例如居中、缩放)的像素值组成的。但…

深圳楼市国庆“狂欢”:从“冷清”到“火爆”,谁导演了这场大戏

你知道吗?深圳那楼市,前面冷清得跟个大森林似的,楼里的灯都像是寂寞的眼睛,眨巴眨巴的,没人搭理。比如八月份那会儿,售楼中心冷清得能听见针掉地上的声音,工作人员闲得跟啥似的,大眼…

【VUE】案例:商场会员管理系统

编写vuedfr实现对会员进行基本增删改查 1. drf项目初始化 请求: POST http://127/0.0.0.1:8000/api/auth/ {"username":"cqn", "password":"123"}返回: {"username":"cqn", "token&q…

Ubuntu2404安装

Ubuntu是一款非常优秀的发行版本,起初她的优势主要在于桌面版,但是随着Centos 从服务版的支持的退出,Ubuntu server也在迅猛的成长,并且不断收获了用户,拥有了一大批忠实的粉丝。好了,废话不多说&#xff0…

鸿蒙harmonyos next flutter通信之BasicMessageChannel获取app版本号

本文将通过BasicMessageChannel获取app版本号,以此来演练BasicMessageChannel用法。 建立channel flutter代码: //建立通道 BasicMessageChannel basicMessageChannel BasicMessageChannel("com.xmg.basicMessageChannel",StringCodec());…

微智启yolo数据集划分工具免费分享下载

微智启yolo数据集划分工具,是由微智启软件工作室开发,版权所有,用于划分yolo数据集的工具,免费分享不收费,禁止用于一切商业用途,如有发现欢迎举报投诉并退款! 使用指南: 打开软件&…

Linux忘记root用户密码怎么重设密码

直接说步骤: 1.重启客户机 2.在选择内核页面快速按e键,进入编辑模式 进入后应该是这个样子 在这里只能按上下键切换行 找到Linux16这里 3.按右方向键切换到行尾,也就是UTF-8处,在后面添加一个空格,然后加上这段话 …

Pikachu-暴力破解-验证码绕过(on client)

访问页面, 从burpsuite 上看到返回的源代码; 验证码生成时通过 createCode 方法生成,在前端页面生成; 同时也是在前端做的校验; 直接验证;F12 -- 网络,随便输入个账号、密码、验证码&#xff0…

【Web】portswigger 服务端原型污染 labs 全解

目录 服务端原型污染 为什么服务器端原型污染更难检测? 通过受污染的属性反射检测服务器端原型污染 lab1:通过服务器端原型污染进行权限提升 无需污染属性反射即可检测服务器端原型污染 状态代码覆盖 JSON 空格覆盖 字符集覆盖 lab2:检测没有污染属性反射的…

初识Linux · 进程替换

目录 前言: 1 直接看代码和现象 2 解释原理 3 将代码改成多进程版本 4 认识所有函数并使用 前言: 由前面的章节学习,我们已经了解了进程状态,进程终止以及进程等待,今天,我们学习进程替换。进程替换我…

汽车追尾为什么是后车的责任?

简单点说:因为人后面没有长眼睛。 结论 在汽车追尾事故中,通常情况下后车被认为是责任方的原因在于交通法规对驾驶安全标准的约定和实践中的责任识别原则。虽然追尾事故常见地被归责于后车,但具体判断并不是绝对的,仍需综合多种…

ubuntu图形界面右上角网络图标找回解决办法

问题现象: ubuntu图形界面右上角网络图标消失了,不方便联网: 正常应该是下图: 网络寻找解决方案,问题未解决,对于某些场景可能有用,引用过来: 参考方案 Ubuntu虚拟机没有网络图标或…

(C语言贪吃蛇)13.实现贪吃蛇四方向的移动

目录 前言 原代码预览 解决方法⚠️ 运行效果 总结 前言 我们上节通过Linux线程实现了两个while(1)同时运行,这样就可以一边控制方向一遍刷新出贪吃蛇的身体节点了。本节我们就来实现贪吃蛇四方向的移动。 (此图片为最终效果) 原代码预览 我们之前的代码是通过…

Unity实战案例全解析:RTS游戏的框选和阵型功能(1) 基础要素

本案例来源于unity唐老狮,有兴趣的小伙伴可以去泰克在线观看该课程 【唐老狮】Unity实现 即时战略游戏 阵型功能 - 泰课在线 -- 志存高远,稳如泰山 - 国内专业的在线学习平台|Unity3d培训|Unity教程|Unity教程 Unreal 虚幻 AR|移动开发|美术CG - Powered…

植物种类识别系统源码分享

植物种类识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

网络编程(12)——完善粘包处理操作(id字段)

十二、day12 之前的粘包处理是基于消息头包含的消息体长度进行对应的切包操作,但并不完整。一般来说,消息头仅包含数据域的长度,但是如果要进行逻辑处理,就需要传递一个id字段表示要处理的消息id,当然可以不在包头传i…

已解决:ImportError: cannot import name ‘get_column_letter‘

已解决:ImportError: cannot import name ‘get_column_letter’ 文章目录 写在前面问题描述报错原因分析 解决思路解决办法1. 检查 Openpyxl 版本2. 升级 Openpyxl3. 重新安装 Openpyxl4. 检查导入路径和函数拼写5. 检查虚拟环境6. 降级 Openpyxl 版本(…

手机使用指南:如何在没有备份的情况下从 Android 设备恢复已删除的联系人

在本指南中,您将了解如何从 Android 手机内存中恢复已删除的联系人。Android 诞生、见证并征服了 80% 的智能手机行业。有些人可能将此称为“非常大胆的宣言”,但最近的统计数据完全支持我们的说法。灵活性、高度改进的可用性和快速性是 Android 操作系统…

[20241003] 狂飙500天,国产大模型如何突破商业化之困?

大模型加速狂飙,AI商业化却面临巨大鸿沟。 一方面,传统企业不知道怎么将AI融入原始业务,另一方面,AI企业难以找到合适的变现方式。AI企业究竟该如何突破商业化之困?B端和C端,呈现出两种不同的路径。 纵…

QGIS中怎么裁剪与掩膜提取

最近,我接到了一个关于QGIS中矢量与栅格与栅格数据怎么裁剪与掩膜提取到自己想要区域的咨询。 其实这个操作,与arcgis中的操作其实是类似的 下面是我对这个问题的解决思路: 首先得把栅格与矢量数据加载进去,如下图:…