Attention Prompt - 注意力提示

注意力提示

感谢你对本书的关注,因为你的注意力是一种稀缺的资源: 此刻你正在阅读本书(而忽略了其他的书), 因此你的注意力是用机会成本(与金钱类似)来支付的。 为了确保你现在投入的注意力是值得的, 我们尽全力(全部的注意力)创作一本好书。

自经济学研究稀缺资源分配以来,我们正处在“注意力经济”时代, 即人类的注意力被视为可以交换的、有限的、有价值的且稀缺的商品。 许多商业模式也被开发出来去利用这一点: 在音乐或视频流媒体服务上,我们要么消耗注意力在广告上,要么付钱来隐藏广告; 为了在网络游戏世界的成长,我们要么消耗注意力在游戏战斗中, 从而帮助吸引新的玩家,要么付钱立即变得强大。 总之,注意力不是免费的。

注意力是稀缺的,而环境中的干扰注意力的信息却并不少。 比如我们的视觉神经系统大约每秒收到 1 0 8 10^{8} 108 位的信息, 这远远超过了大脑能够完全处理的水平。 幸运的是,我们的祖先已经从经验(也称为数据)中认识到 “并非感官的所有输入都是一样的”。 在整个人类历史中,这种只将注意力引向感兴趣的一小部分信息的能力, 使我们的大脑能够更明智地分配资源来生存、成长和社交, 例如发现天敌、找寻食物和伴侣。

生物学中的注意力提示

注意力是如何应用于视觉世界中的呢? 我们从当今十分普及的双组件(two-component)的框架开始讲起: 这个框架的出现可以追溯到19世纪90年代的威廉·詹姆斯, 他被认为是“美国心理学之父” 。 在这个框架中,受试者基于非自主性提示和自主性提示 有选择地引导注意力的焦点。

非自主性提示是基于环境中物体的突出性和易见性。 想象一下,假如你面前有五个物品: 一份报纸、一篇研究论文、一杯咖啡、一本笔记本和一本书, 就像下图。 所有纸制品都是黑白印刷的,但咖啡杯是红色的。 换句话说,这个咖啡杯在这种视觉环境中是突出和显眼的, 不由自主地引起人们的注意。 所以你把视力最敏锐的地方放到咖啡上, 如下图所示。

在这里插入图片描述

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

在这里插入图片描述

查询、键和值

自主性的与非自主性的注意力提示解释了人类的注意力的方式, 下面我们看看如何通过这两种注意力提示, 用神经网络来设计注意力机制的框架,

首先,考虑一个相对简单的状况, 即只使用非自主性提示。 要想将选择偏向于感官输入, 我们可以简单地使用参数化的全连接层, 甚至是非参数化的最大汇聚层或平均汇聚层。

因此,“是否包含自主性提示” 将注意力机制与全连接层或汇聚层区别开来。 在注意力机制的背景下,我们将自主性提示称为查询(query)。 给定任何查询,注意力机制通过注意力汇聚(attention pooling) 将选择引导至感官输入(sensory inputs,例如中间特征表示)。 在注意力机制中,这些感官输入被称为值(value)。 更通俗的解释,每个值都与一个 键(key) 配对, 这可以想象为感官输入的非自主提示。 如 下图所示,我们可以设计注意力汇聚, 以便给定的查询(自主性提示)可以与键(非自主性提示)进行匹配, 这将引导得出最匹配的值(感官输入)。

在这里插入图片描述

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

注意力的可视化

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

import torch
from d2l import torch as d2l

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

#save
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,                        #绘制子图 num_row行,num_col列
                                 sharex=True, sharey=True, squeeze=False)
    
    for i, (row_axes, row_matrices) in enumerate(zip(axes, matrices)):       #i代表下标,row_axes代表行数,row_matrices代表每一行
        for j, (ax, matrix) in enumerate(zip(row_axes, row_matrices)):       #j代表下标,ax代表行的每一列, matrix代表每行的每个元素
            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))                     #torch.eye()生成对角线为1, 其余全为0的矩阵
show_heatmaps(attention_weights, xlabel='Keys', ylabel='Queries')

在这里插入图片描述

torch.eye(20).reshape(2, 2, 10, 10)
tensor([[[[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
          [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
          [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
          [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],
          [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
          [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],
          [0., 0., 0., 0., 0., 0., 1., 0., 0., 0.],
          [0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],
          [0., 0., 0., 0., 0., 0., 0., 0., 1., 0.],
          [0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]]]])

在后续中,我们将经常调用 show_heatmaps 函数来显示注意力权重。

小结

1、人类的注意力是有限的、有价值和稀缺的资源。

2、受试者使用非自主性和自主性提示有选择性地引导注意力。前者基于突出性,后者则依赖于意识。

3、注意力机制与全连接层或者汇聚层的区别源于增加的自主提示

4、由于包含了自主性提示,注意力机制与全连接的层或汇聚层不同。

5、注意力机制通过注意力汇聚使选择偏向于值(感官输入),其中包含查询(自主性提示)和键(非自主性提示)。键和值是成对的。

6、我们可以可视化查询和键之间的注意力权重。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Gaolw1102

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

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

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

打赏作者

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

抵扣说明:

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

余额充值