Self-Attention 自注意力机制(二)——实例过程说明

 声明:本文章是根据网上资料,加上自己整理和理解而成,仅为记录自己学习的点点滴滴。可能有错误,欢迎大家指正。


一、自注意力机制核心过程

自注意力机制(Self-Attention Mechanism),也称为内部注意力机制,是一种在序列模型中用于捕捉序列内部不同位置之间依赖关系的技术。这种机制允许模型在处理序列时,对序列中的每个元素分配不同的权重,这些权重反映了元素之间的相互关系。自注意力机制的关键在于它不需要像循环神经网络(RNN)那样逐步处理序列,因此可以并行化计算,并且可以捕捉长距离依赖。

  • 自注意力机制的核心原理可以概括为以下几个步骤:
  1. 表示(Representation):对序列中的每个元素(例如单词、时间点等)进行表示,通常通过嵌入(Embedding)层将元素转换为固定维度的向量。

  2. 查询(Query)、键(Key)、值(Value):将每个元素的表示向量分解为三个向量:查询(Q)、键(K)、值(V)。这些向量可以是同一个表示的不同线性变换,也可以通过不同的网络层来学习。

  3. 注意力分数(Attention Scores):计算每个元素的查询向量与序列中所有键向量之间的相似度得分。这通常通过点积(Dot Product)来实现,然后通常会应用一个缩放因子(例如除以键向量的维度的平方根),以避免梯度消失或爆炸问题。

  4. 权重分配(Weighting):使用softmax函数对注意力分数进行归一化处理,得到每个元素对于序列中其他元素的权重。归一化确保了所有权重的和为1。

  5. 加权求和(Weighted Sum):将归一化的注意力权重与对应的值向量相乘,然后对所有元素的加权值向量求和,得到最终的输出向量。

  6. 输出(Output):得到的加权求和向量可以作为序列中每个元素的输出表示,它包含了序列内部的全局信息。

自注意力机制的一个关键优势是其能够捕捉序列中任意两个元素之间的依赖关系,无论它们在序列中的距离有多远。这种能力使得自注意力机制在处理长序列和复杂依赖关系时特别有效,例如在自然语言处理(NLP)中的翻译、文本摘要、问答系统等任务中。

在深度学习框架中,自注意力机制可以通过多头注意力(Multi-Head Attention)进一步扩展,其中模型并行地执行多个自注意力层,每个层学习到序列的不同表示子空间,最终将这些表示合并,以捕获更丰富的信息。这种机制在Transformer模型中得到了广泛应用。

  • 数学上,嵌入层过程可以表示为: Embedding(𝑤)=𝐸×OneHot(𝑤) 其中:

  • 𝐸 是嵌入权重矩阵。
  • 𝑤是词汇表中的单词或标记。
  • OneHot(𝑤) 是单词 𝑤 的独热编码向量。
  • Embedding(𝑤) 是单词 𝑤的嵌入向量。

详细过程通过下述例子说明。如机器翻译,有一个英文句子 "I love natural language " 需要翻译成另一种语言。在使用自注意力机制的模型中,首先会将每个单词转换为一个向量形式,这些向量是通过嵌入层得到的。

二、表示或嵌入过程:

嵌入层(Embedding Layer)是一种在深度学习和机器学习中常用的技术,特别是在处理自然语言处理(NLP)任务时。嵌入层的主要作用是将离散的输入数据(如单词、字符或其他类型的标记)转换为连续的向量表示。这些向量捕捉了输入数据的语义和语法特征。

嵌入层的数学表达通常如下: Embedding(w)=E×w 其中,𝑤 是离散的输入单词或标记,𝐸是嵌入权重矩阵,Embedding(𝑤)是单词 𝑤的连续向量表示。在实际应用中,嵌入层通常作为模型的第一层,为后续的神经网络层(如卷积层、循环层或Transformer层)提供输入。

嵌入层将离散的单词或标记转换为实数向量的过程通常涉及以下几个步骤:

  • 词汇表构建:首先,需要构建一个词汇表,其中包含所有在训练数据中出现的唯一的单词或标记。每个单词或标记在词汇表中被分配一个唯一的索引。

如:"I love natural language "只包含4个单词:["I", "love", "natural", "language"]。我们想要将这些单词嵌入到一个2维的空间中(即嵌入维度为2)。词汇表索引分配可能是这样的:

I      -> 索引 0
love   -> 索引 1
natural-> 索引 2
language-> 索引 3

  • 权重矩阵初始化:嵌入层由一个权重矩阵定义,其行数等于词汇表的大小,列数是嵌入的维度。权重矩阵最初是随机初始化的。

如:初始化一个4x2的权重矩阵 𝐸,随机分配小的实数值:

E =\begin{bmatrix} 0.2& 0.5&-0.1 &0.3 \\ 0.1 & 0.3& 0.4 & 0.7 \end{bmatrix}

### Cross-AttentionSelf-Attention 的区别及应用 #### 定义与机制 Self-Attention 是一种注意力机制,它允许序列中的每个位置关注整个序列的信息。通过计算输入序列中各个部分的相关性权重,Self-Attention 能够捕捉到全局依赖关系并生成上下文感知的表示[^1]。 Cross-Attention 则用于两个不同的序列之间建立关联。具体来说,给定一个查询(Query)序列和键值对(Key-Value Pair)序列,Cross-Attention 可以让查询序列基于另一个序列的内容来调整其表示[^2]。 #### 计算过程对比 在 Self-Attention 中,查询 (Q)、键 (K) 和值 (V) 都来源于同一个输入序列。这意味着模型会学习如何将同一序列的不同部分联系起来,从而增强局部或远程的关系建模能力。 而在 Cross-Attention 设置下,查询通常来自于源序列或者目标序列之一,而键和值则来自另一方。这种设计使得模型能够有效地跨域或多模态数据间传递信息,比如文本与图像间的交互分析。 #### 应用场景比较 - **自然语言处理领域** - 自回归解码器架构常采用 Self-Attention 来捕获句子内部单词之间的长期依存关系,在机器翻译任务中有广泛应用。 - 对于涉及多模态的任务如视觉问答(VQA),Cross-Attention 将被用来融合图片特征和问题描述,以便更好地理解两者之间的语义关联。 - **计算机视觉方面** - 卷积神经网络(CNNs)虽然擅长提取空间上的局部模式,但当面对较大范围内的对象识别时可能表现不佳;引入 Transformer 结构及其核心组件——Self-Attention 后可以改善这一情况。 - 当需要结合其他类型的传感器数据(例如雷达信号)来进行环境感知时,则可利用 Cross-Attention 实现异质数据的有效集成。 - **时间序列预测** - 在某些情况下,历史观测值本身就可以提供足够的线索完成未来趋势估计工作,此时仅需依靠 Self-Attention 即可实现良好效果。 - 如果还存在外部辅助变量影响最终结果的话,则应该考虑加入 Cross-Attention 层次进一步提升准确性。 ```python import torch from transformers import BertModel, BertTokenizer tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertModel.from_pretrained('bert-base-uncased') text = "Replace me by any text you'd like." encoded_input = tokenizer(text, return_tensors='pt') output = model(**encoded_input) print(output.last_hidden_state[:,0]) # Output contains embeddings enriched via self-attention. ``` 上述代码片段展示了 BERT 模型的应用实例,其中包含了典型的 Self-Attention 运作方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值