• 注意力机制 - 注意力提示


    注意力提示

    ⾃经济学研究稀缺资源分配以来,我们正处在“注意⼒经济”时代,即⼈类的注意⼒被视为可以交换的、有限的、有价值的且稀缺的商品。许多商业模式也被开发出来去利⽤这⼀点:在⾳乐或视频流媒体服务上,我们要么消耗注意⼒在⼴告上,要么付钱来隐藏⼴告;为了在⽹络游戏世界的成⻓,我们要么消耗注意⼒在游戏战⽃中,从⽽帮助吸引新的玩家,要么付钱⽴即变得强⼤。总之,注意⼒不是免费的

    注意⼒是稀缺的,⽽环境中的⼲扰注意⼒的信息却并不少。⽐如我们的视觉神经系统⼤约每秒收到108位的信息,这远远超过了⼤脑能够完全处理的⽔平。幸运的是,我们的祖先已经从经验(也称为数据)中认识到“并⾮感官的所有输⼊都是⼀样的”。在整个⼈类历史中,这种只将注意⼒引向感兴趣的⼀⼩部分信息的能⼒,使我们的⼤脑能够更明智地分配资源来⽣存、成⻓和社交,例如发现天敌、找寻⻝物和伴侣

    1 - 生物学中的注意力提示

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

    ⾮⾃主性提⽰是基于环境中物体的突出性和易⻅性。想象⼀下,假如你⾯前有五个物品:⼀份报纸、⼀篇研究论⽂、⼀杯咖啡、⼀本笔记本和⼀本书,就像 图10.1.1。所有纸制品都是⿊⽩印刷的,但咖啡杯是红⾊的。换句话说,这个咖啡杯在这种视觉环境中是突出和显眼的,不由⾃主地引起⼈们的注意。所以你把视⼒最敏锐的地⽅放到咖啡上,如 图10.1.1所⽰


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

    2 - 查询、键和值

    ⾃主性的与⾮⾃主性的注意⼒提⽰解释了⼈类的注意⼒的⽅式,下⾯我们看看如何通过这两种注意⼒提⽰,⽤神经⽹络来设计注意⼒机制的框架

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

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

    如图10.1.3所示,我们可以设计注意力汇聚,以便给定的查询(自主性提示)可以与键(非自主性提示)进行匹配,将引导得出最匹配的值(感官输入)

    3 - 注意力的可视化

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

    import torch
    from d2l import torch as d2l
    
    • 1
    • 2

    为了可视化注意力权重,我们定义了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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

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


    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FGAWDOcQ-1662988348423)(https://yingziimage.oss-cn-beijing.aliyuncs.com/img/202209122107898.svg)]

    在后面的章节中,我们将经常调用show_heatmaps函数来显示注意力权重

    4 - 小结

    • 人类的注意力时有限的、有价值和稀缺的资源
    • 受试者使用非自主性和自主性提示有选择性地引导注意力。前者基于突出性,后者则依赖于意识
    • 注意力机制与全连接层或者汇聚层的区别源于增加的自主提示
    • 由于包含了自主性提示,注意力机制与全连接的层或汇聚层不同
    • 注意力机制通过注意力汇聚使选择偏向于值(感官输入),其中包含查询(自主性提示)和键(非自主性提示)。键和值是成对的
    • 我们可以可视化查询和键之间的注意力权重
  • 相关阅读:
    DNS的服务与部署(2)
    数据库复习——闭包
    精通git,没用过git cherry-pick?
    有关JWT的面试问题总结
    Java实现常见排序算法
    【附源码】Python计算机毕业设计企业物资管理系统
    Python数据攻略-递归方式实现json多层级数据展平
    R语言遍历文件夹求取其中所有栅格文件的平均值
    jenkins+newman+postman持续集成环境搭建
    面试官:深度不够,建议回去深挖
  • 原文地址:https://blog.csdn.net/mynameisgt/article/details/126822962