Loading [MathJax]/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【现代深度学习技术】注意力机制06:自注意力和位置编码

【现代深度学习技术】注意力机制06:自注意力和位置编码

作者头像
Francek Chen
发布于 2025-05-13 00:12:27
发布于 2025-05-13 00:12:27
11400
代码可运行
举报
运行总次数:0
代码可运行

深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/PyTorch_deep_learning

  在深度学习中,经常使用卷积神经网络(CNN)或循环神经网络(RNN)对序列进行编码。想象一下,有了注意力机制之后,我们将词元序列输入注意力池化中,以便同一组词元同时充当查询、键和值。具体来说,每个查询都会关注所有的键-值对并生成一个注意力输出。由于查询、键和值来自同一组输入,因此被称为自注意力(self-attention),也被称为内部注意力(intra-attention)。本节将使用自注意力进行序列编码,以及如何使用序列的顺序作为补充信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import math
import torch
from torch import nn
from d2l import torch as d2l

一、自注意力

  给定一个由词元组成的输入序列

x1,,xn

,其中任意

)。该序列的自注意力输出为一个长度相同的序列

,其中:

根据

中定义的注意力汇聚函数

。下面的代码片段是基于多头注意力对一个张量完成自注意力的计算,张量的形状为(批量大小,时间步的数目或词元序列的长度,

)。输出与输入的张量形状相同。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
num_hiddens, num_heads = 100, 5
attention = d2l.MultiHeadAttention(num_hiddens, num_hiddens, num_hiddens, num_hiddens, num_heads, 0.5)
attention.eval()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
batch_size, num_queries, valid_lens = 2, 4, torch.tensor([3, 2])
X = torch.ones((batch_size, num_queries, num_hiddens))
attention(X, X, X, valid_lens).shape
在这里插入图片描述
在这里插入图片描述

二、比较卷积神经网络、循环神经网络和自注意力

  接下来比较下面几个架构,目标都是将由

个词元组成的序列映射到另一个长度相等的序列,其中的每个输入词元或输出词元都由

维向量表示。具体来说,将比较的是卷积神经网络、循环神经网络和自注意力这几个架构的计算复杂性、顺序操作和最大路径长度。请注意,顺序操作会妨碍并行计算,而任意的序列位置组合之间的路径越短,则能更轻松地学习序列中的远距离依赖关系。

图1 比较卷积神经网络(填充词元被忽略)、循环神经网络和自注意力三种架构

  考虑一个卷积核大小为

的卷积层。在后面的章节将提供关于使用卷积神经网络处理序列的更多详细信息。目前只需要知道的是,由于序列长度是

,输入和输出的通道数量都是

,所以卷积层的计算复杂度为

。如图1所示,卷积神经网络是分层的,因此为有

个顺序操作,最大路径长度为

。例如,

处于图1中卷积核大小为3的双层卷积神经网络的感受野内。

  当更新循环神经网络的隐状态时,

权重矩阵和

维隐状态的乘法计算复杂度为

。由于序列长度为

,因此循环神经网络层的计算复杂度为

。根据图1,有

个顺序操作无法并行化,最大路径长度也是

  在自注意力中,查询、键和值都是

矩阵。考虑

中缩放的“点-积”注意力,其中

矩阵乘以

矩阵。之后输出的

矩阵乘以

矩阵。因此,自注意力具有

计算复杂性。正如在图1中所讲,每个词元都通过自注意力直接连接到任何其他词元。因此,有

个顺序操作可以并行计算,最大路径长度也是

  总而言之,卷积神经网络和自注意力都拥有并行计算的优势,而且自注意力的最大路径长度最短。但是因为其计算复杂度是关于序列长度的二次方,所以在很长的序列中计算会非常慢。

三、位置编码

  在处理词元序列时,循环神经网络是逐个的重复地处理词元的,而自注意力则因为并行计算而放弃了顺序操作。为了使用序列的顺序信息,通过在输入表示中添加位置编码(positional encoding)来注入绝对的或相对的位置信息。位置编码可以通过学习得到也可以直接固定得到。接下来描述的是基于正弦函数和余弦函数的固定位置编码。

  假设输入表示

包含一个序列中

个词元的

维嵌入表示。位置编码使用相同形状的位置嵌入矩阵

输出

,矩阵第

行、第

列和

列上的元素为:

  乍一看,这种基于三角函数的设计看起来很奇怪。在解释这个设计之前,让我们先在下面的PositionalEncoding类中实现它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#@save
class PositionalEncoding(nn.Module):
    """位置编码"""
    def __init__(self, num_hiddens, dropout, max_len=1000):
        super(PositionalEncoding, self).__init__()
        self.dropout = nn.Dropout(dropout)
        # 创建一个足够长的P
        self.P = torch.zeros((1, max_len, num_hiddens))
        X = torch.arange(max_len, dtype=torch.float32).reshape(-1, 1) / torch.pow(10000, torch.arange(
            0, num_hiddens, 2, dtype=torch.float32) / num_hiddens)
        self.P[:, :, 0::2] = torch.sin(X)
        self.P[:, :, 1::2] = torch.cos(X)

    def forward(self, X):
        X = X + self.P[:, :X.shape[1], :].to(X.device)
        return self.dropout(X)

  在位置嵌入矩阵

中,行代表词元在序列中的位置,列代表位置编码的不同维度。从下面的例子中可以看到位置嵌入矩阵的第

列和第

列的频率高于第

列和第

列。第

列和第

列之间的偏移量(第

列和第

列相同)是由于正弦函数和余弦函数的交替。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
encoding_dim, num_steps = 32, 60
pos_encoding = PositionalEncoding(encoding_dim, 0)
pos_encoding.eval()
X = pos_encoding(torch.zeros((1, num_steps, encoding_dim)))
P = pos_encoding.P[:, :X.shape[1], :]
d2l.plot(torch.arange(num_steps), P[0, :, 6:10].T, xlabel='Row (position)',
         figsize=(6, 2.5), legend=["Col %d" % d for d in torch.arange(6, 10)])
(一)绝对位置信息

  为了明白沿着编码维度单调降低的频率与绝对位置信息的关系,让我们打印出

的二进制表示形式。正如所看到的,每个数字、每两个数字和每四个数字上的比特值在第一个最低位、第二个最低位和第三个最低位上分别交替。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for i in range(8):
    print(f'{i}的二进制是:{i:>03b}')

  在二进制表示中,较高比特位的交替频率低于较低比特位,与下面的热图所示相似,只是位置编码通过使用三角函数在编码维度上降低频率。由于输出是浮点数,因此此类连续表示比二进制表示法更节省空间。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
P = P[0, :, :].unsqueeze(0).unsqueeze(0)
d2l.show_heatmaps(P, xlabel='Column (encoding dimension)', ylabel='Row (position)', figsize=(3.5, 4), cmap='Blues')
(二)相对位置信息

  除了捕获绝对位置信息之外,上述的位置编码还允许模型学习得到输入序列中相对位置信息。这是因为对于任何确定的位置偏移

,位置

处的位置编码可以线性投影位置

处的位置编码来表示。

  这种投影的数学解释是,令

,对于任何确定的位置偏移

,式(2)中的任何一对

都可以线性投影到

投影矩阵不依赖于任何位置的索引

小结

  • 在自注意力中,查询、键和值都来自同一组输入。
  • 卷积神经网络和自注意力都拥有并行计算的优势,而且自注意力的最大路径长度最短。但是因为其计算复杂度是关于序列长度的二次方,所以在很长的序列中计算会非常慢。
  • 为了使用序列的顺序信息,可以通过在输入表示中添加位置编码,来注入绝对的或相对的位置信息。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【现代深度学习技术】注意力机制05:多头注意力
深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉、自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/PyTorch_deep_learning。
Francek Chen
2025/05/13
640
【现代深度学习技术】注意力机制05:多头注意力
【现代深度学习技术】注意力机制03:注意力评分函数
深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉、自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/PyTorch_deep_learning。
Francek Chen
2025/05/10
640
【现代深度学习技术】注意力机制03:注意力评分函数
注意力机制及其理解
注意力机制就是对输入权重分配的关注,最开始使用到注意力机制是在编码器-解码器(encoder-decoder)中, 注意力机制通过对编码器所有时间步的隐藏状态做加权平均来得到下一层的输入变量:
机械视角
2019/10/23
2.1K0
注意力机制及其理解
【现代深度学习技术】注意力机制07:Transformer
深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉、自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/PyTorch_deep_learning。
Francek Chen
2025/05/21
2630
【现代深度学习技术】注意力机制07:Transformer
【现代深度学习技术】现代循环神经网络04:双向循环神经网络
深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉、自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/PyTorch_deep_learning。
Francek Chen
2025/05/04
1430
【现代深度学习技术】现代循环神经网络04:双向循环神经网络
【现代深度学习技术】循环神经网络04:循环神经网络
是隐状态(hidden state),也称为隐藏变量(hidden variable),它存储了到时间步
Francek Chen
2025/04/20
2050
【现代深度学习技术】循环神经网络04:循环神经网络
CAP:多重注意力机制,有趣的细粒度分类方案 | AAAI 2021
论文: Context-aware Attentional Pooling (CAP) for Fine-grained Visual Classification
VincentLee
2022/06/24
1.1K0
CAP:多重注意力机制,有趣的细粒度分类方案 | AAAI 2021
【深度学习优化算法】06:动量法
深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉、自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/PyTorch_deep_learning
Francek Chen
2025/07/19
740
【深度学习优化算法】06:动量法
【现代深度学习技术】现代循环神经网络07:序列到序列学习(seq2seq)
  正如我们在机器翻译与数据集中看到的,机器翻译中的输入序列和输出序列都是长度可变的。为了解决这类问题,我们在编码器-解码器架构中设计了一个通用的”编码器-解码器“架构。本节,我们将使用两个循环神经网络的编码器和解码器,并将其应用于序列到序列(sequence to sequence,seq2seq)类的学习任务。
Francek Chen
2025/05/06
2350
【现代深度学习技术】现代循环神经网络07:序列到序列学习(seq2seq)
【现代深度学习技术】现代循环神经网络01:门控循环单元(GRU)
  在通过时间反向传播中,我们讨论了如何在循环神经网络中计算梯度,以及矩阵连续乘积可以导致梯度消失或梯度爆炸的问题。下面我们简单思考一下这种梯度异常在实践中的意义:
Francek Chen
2025/05/02
2230
【现代深度学习技术】现代循环神经网络01:门控循环单元(GRU)
【深度学习实验】注意力机制(一):注意力权重矩阵可视化(矩阵热图heatmap)
注意力机制作为一种模拟人脑信息处理的关键工具,在深度学习领域中得到了广泛应用。本系列实验旨在通过理论分析和代码演示,深入了解注意力机制的原理、类型及其在模型中的实际应用。
Qomolangma
2024/07/30
2.4K0
【深度学习实验】注意力机制(一):注意力权重矩阵可视化(矩阵热图heatmap)
【现代深度学习技术】现代循环神经网络03:深度循环神经网络
深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉、自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。
Francek Chen
2025/05/03
1440
【现代深度学习技术】现代循环神经网络03:深度循环神经网络
【现代深度学习技术】现代卷积神经网络06:残差网络(ResNet)
深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉、自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/PyTorch_deep_learning。
Francek Chen
2025/04/01
2900
【现代深度学习技术】现代卷积神经网络06:残差网络(ResNet)
ASF-YOLO开源 | YOLOv5范式永不言败,SSFF融合+TPE编码+CPAM注意力,再战精度巅峰!
随着样本制备技术和显微成像技术的快速发展,细胞图像的定量处理和分析在医学和细胞生物学等领域中发挥着重要作用。基于卷积神经网络(CNN),通过神经网络训练可以学习不同细胞图像的特征信息,具有较强的泛化性能。两阶段R-CNN系列及其一阶段变体是经典的基于CNN的实例分割任务框架。
集智书童公众号
2023/12/13
2.3K0
ASF-YOLO开源 | YOLOv5范式永不言败,SSFF融合+TPE编码+CPAM注意力,再战精度巅峰!
【现代深度学习技术】循环神经网络05:循环神经网络的从零开始实现
  本节将根据循环神经网络中的描述, 从头开始基于循环神经网络实现字符级语言模型。 这样的模型将在H.G.Wells的时光机器数据集上训练。 和前面语言模型和数据集中介绍过的一样, 我们先读取数据集。
Francek Chen
2025/04/22
1290
【现代深度学习技术】循环神经网络05:循环神经网络的从零开始实现
【深度学习实验】注意力机制(三):打分函数——加性注意力模型
注意力机制作为一种模拟人脑信息处理的关键工具,在深度学习领域中得到了广泛应用。本系列实验旨在通过理论分析和代码演示,深入了解注意力机制的原理、类型及其在模型中的实际应用。
Qomolangma
2024/07/30
5630
【深度学习实验】注意力机制(三):打分函数——加性注意力模型
小目标检测新方法SCTransNet | 空间通道交叉Transformer & 互补前馈达成完美语义信息传递
SCTransNet有效地编码了目标与背景之间的语义差异,从而提升了其内部表征,以准确检测小红外目标。 在三个公开数据集NUDT-SIRST、NUAA-SIRST和IRSTD-1k上的大量实验表明,所提出的SCTransNet优于现有的IRSTD方法。 代码:https://github.com/xdFai
集智书童公众号
2024/02/21
2.3K0
小目标检测新方法SCTransNet | 空间通道交叉Transformer & 互补前馈达成完美语义信息传递
【现代深度学习技术】现代循环神经网络02:长短期记忆网络(LSTM)
深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉、自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/PyTorch_deep_learning。
Francek Chen
2025/05/02
3330
【现代深度学习技术】现代循环神经网络02:长短期记忆网络(LSTM)
深度学习应用篇-元学习[15]:基于度量的元学习:SNAIL、RN、PN、MN
元学习可以被定义为一种序列到序列的问题, 在现存的方法中,元学习器的瓶颈是如何去吸收同化利用过去的经验。 注意力机制可以允许在历史中精准摘取某段具体的信息。
汀丶人工智能
2023/10/11
8980
深度学习应用篇-元学习[15]:基于度量的元学习:SNAIL、RN、PN、MN
机器学习|从0开发大模型之注意力机制
无论是在机器学习,深度学习还是人工智能中,我们都在寻找一种模拟人脑的机制,注意力机制源于人脑,比如当我们欣赏一本书的时候,当我们对某个知识点感兴趣的时候,会映像深刻,可能会反复读某一段文字,但是对于其他不敢兴趣的内容会忽略,说明人脑在处理信号的时候是一定会划权重,而注意力机制正是模仿大脑这种核心的功能。
用户1904552
2025/02/27
1650
机器学习|从0开发大模型之注意力机制
推荐阅读
【现代深度学习技术】注意力机制05:多头注意力
640
【现代深度学习技术】注意力机制03:注意力评分函数
640
注意力机制及其理解
2.1K0
【现代深度学习技术】注意力机制07:Transformer
2630
【现代深度学习技术】现代循环神经网络04:双向循环神经网络
1430
【现代深度学习技术】循环神经网络04:循环神经网络
2050
CAP:多重注意力机制,有趣的细粒度分类方案 | AAAI 2021
1.1K0
【深度学习优化算法】06:动量法
740
【现代深度学习技术】现代循环神经网络07:序列到序列学习(seq2seq)
2350
【现代深度学习技术】现代循环神经网络01:门控循环单元(GRU)
2230
【深度学习实验】注意力机制(一):注意力权重矩阵可视化(矩阵热图heatmap)
2.4K0
【现代深度学习技术】现代循环神经网络03:深度循环神经网络
1440
【现代深度学习技术】现代卷积神经网络06:残差网络(ResNet)
2900
ASF-YOLO开源 | YOLOv5范式永不言败,SSFF融合+TPE编码+CPAM注意力,再战精度巅峰!
2.3K0
【现代深度学习技术】循环神经网络05:循环神经网络的从零开始实现
1290
【深度学习实验】注意力机制(三):打分函数——加性注意力模型
5630
小目标检测新方法SCTransNet | 空间通道交叉Transformer & 互补前馈达成完美语义信息传递
2.3K0
【现代深度学习技术】现代循环神经网络02:长短期记忆网络(LSTM)
3330
深度学习应用篇-元学习[15]:基于度量的元学习:SNAIL、RN、PN、MN
8980
机器学习|从0开发大模型之注意力机制
1650
相关推荐
【现代深度学习技术】注意力机制05:多头注意力
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档