• 【Dive into Deep Learning / 动手学深度学习】第十章 - 第一节:注意力提示


    前言

    Hello!
    非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
     
    自我介绍 ଘ(੭ˊᵕˋ)੭
    昵称:海轰
    标签:程序猿|C++选手|学生
    简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖…已保研。
    学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!
     
    唯有努力💪
     

    知其然 知其所以然!

     
    本文仅记录自己感兴趣的内容

    10.1. 注意力提示

    10.1.1. 生物学中的注意力提示

    在这里插入图片描述

    在这里插入图片描述

    10.1.2. 查询、键和值

    在这里插入图片描述

    在这里插入图片描述

    note:

    • 下图比较重要
    • 主要讲的是query、key、value的一个关系
    • 之前不太懂这三者的关系
    • 看完沐神的讲解,懂了一点点
    • 大概意思是:查询就是,人的大脑喝完咖啡后,想看书(那么就需要去找书,就是查询)
    • 然后就去寻找有没有书,书的外表、大小等(标志它是书的因素,就是key)
    • 通过这个key找到书,然后进行看书
    • 看书里的内容,则就是我们需要的内容(也就是输入value:书里的内容)

    在这里插入图片描述

    10.1.3. 注意力的可视化

    平均汇聚层可以被视为输入的加权平均值, 其中各输入的权重是一样的

    实际上,注意力汇聚得到的是加权平均的总和值, 其中权重是在给定的查询和不同的键之间计算得出的

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

    为了可视化注意力权重,我们定义了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,
                                     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
    • 16
    • 17
    • 18

    note:

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    axes:可以理解为,一个图代表有一个axe


    fig, axes = d2l.plt.subplots(1, 1, figsize=(2.5, 2.5),
                                     sharex=True, sharey=True, squeeze=False)
    
    • 1
    • 2

    在这里插入图片描述

    matrices就是多个图的数据总和,每个图的大小规格是一样的,比如都为(10,10)


    下面我们使用一个简单的例子进行演示

    在本例子中,仅当查询和键相同时,注意力权重为1,否则为0。

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

    在这里插入图片描述

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

    10.1.4. 小结

    在这里插入图片描述

    结语

    学习资料:http://zh.d2l.ai/

    文章仅作为个人学习笔记记录,记录从0到1的一个过程

    希望对您有一点点帮助,如有错误欢迎小伙伴指正

    在这里插入图片描述

  • 相关阅读:
    HTML使用
    MySQL——数据库基础
    内网穿透实现Windows远程桌面访问Ubuntu,简单高效的远程桌面解决方案
    大地水准面 地球椭球体 大地基准面 地图投影理解
    Git手记
    .360勒索病毒和.halo勒索病毒数据恢复|金蝶、用友、ERP等数据恢复
    MySQL的Explain总结
    Mac中隐私安全性设置-打开任何来源
    JAVA IDEA 项目打包为 jar 包详解
    docker启动rabbitmq无法访问15672端口
  • 原文地址:https://blog.csdn.net/weixin_44225182/article/details/126452059