Transformer :Self-Attention(自注意力机制)

在 Transformer 中,Self-Attention(自注意力机制)是其核心组件之一,用于建模序列中各个 token 之间的关系。它让模型在处理某个词时,可以“关注”同一句中其他所有词,从而捕捉上下文信息。

一、Self-Attention 的作用

传统的语言模型(如 RNN、CNN)只能看到固定窗口或前后邻居的信息。而 Self-Attention 可以实现:

  • 全局建模:每个 token 能看到整个输入序列;

  • 动态权重分配:不同上下文下,同一个词关注的对象可能不同;

  • 并行计算:相比 RNN 的逐个处理,Self-Attention 支持并行训练。

二、Self-Attention 的核心思想

输入是一个序列:
例如一句话被编码成向量矩阵:

输入:x = [x₁, x₂, ..., xₙ]  ∈ ℝ^{n×d_model}

我们将每个 token 映射为 3 个向量:

  • Query(查询)

  • Key(键)

  • Value(值)

这些是通过权重矩阵线性变换得到的:

Q=XWQ,K=XWK,V=XWVQ = XW^Q,\quad K = XW^K,\quad V = XW^V

三、Self-Attention 的公式

Self-Attention 的输出为:

Attention(Q,K,V)= \text{softmax}\left( \frac{QK^\top}{\sqrt{d_k}} \right)V

其中:

  • Q\in \mathbb{R}^{n \times d_k}

  • K \in \mathbb{R}^{n \times d_k}

  • V \in \mathbb{R}^{n \times d_v}

  • \frac{QK^\top}{\sqrt{d_k}}:计算每个 token 对其他 token 的注意力打分(注意缩放)

  • softmax 保证每个 token 对其他 token 的权重之和为 1

为什么要除以 dk\sqrt{d_k}

为了防止点积值过大导致 softmax 输出梯度消失。否则随着维度增加,分数可能变得非常大,导致 softmax 输出变得极端。

四、Self-Attention 的运行示意(图形化描述)

假设输入有 3 个 token:

["I", "love", "you"]

计算过程如下:

  1. 每个词 → 计算 Query、Key、Value 向量;

  2. 对每个词(如 “love”):

    • 用它的 Query 去与所有 Key 计算相似度;

    • 通过 softmax 得到关注权重;

    • 用这些权重加权 Value 向量 → 输出结果。

五、代码实现(PyTorch 简化版)

import torch
import torch.nn as nn
import torch.nn.functional as F

class SelfAttention(nn.Module):
    def __init__(self, embed_dim):
        super().__init__()
        self.q_linear = nn.Linear(embed_dim, embed_dim)
        self.k_linear = nn.Linear(embed_dim, embed_dim)
        self.v_linear = nn.Linear(embed_dim, embed_dim)
        self.scale = embed_dim ** 0.5

    def forward(self, x):
        Q = self.q_linear(x)
        K = self.k_linear(x)
        V = self.v_linear(x)

        scores = torch.matmul(Q, K.transpose(-2, -1)) / self.scale
        weights = F.softmax(scores, dim=-1)
        output = torch.matmul(weights, V)
        return output

使用示例:

x = torch.rand(2, 10, 512)  # batch_size=2, seq_len=10, embed_dim=512
sa = SelfAttention(embed_dim=512)
out = sa(x)  # output: (2, 10, 512)

六、与 Multi-Head Attention 的关系

Self-Attention 是 Multi-Head Attention 的一个“单头版本”。Multi-Head 就是将 Self-Attention 复制多份(通常是 8 或 12),分别使用不同权重做注意力计算,然后拼接起来。

七、优点总结

特性说明
全局上下文每个词都能与所有其他词交互
位置无关不依赖相对/绝对位置,可与位置编码组合使用
并行计算所有 token 同时处理,速度快
灵活建模根据不同输入动态学习注意力分布

八、结语

Self-Attention 是 Transformer 模型的核心灵魂,既实现了强大的表达能力,又兼顾了效率。掌握了它,就为理解整个 Transformer 奠定了基础。

<think>好的,用户需要查找关于self-attention自注意力机制的流程图或图解。首先,我需要回忆相关引用内容。引用[1]、[2]、[3]都提到了自注意力机制的基本概念,其中引用[2]提到有图解,可能包含流程图。引用[4]提到图片输入的处理,但可能不相关。需要确认是否有具体的步骤分解。 根据引用[2],图解自注意力机制详细解释了输入相关性处理,可能包含流程图步骤。另外,用户可能需要从输入到输出的流程,包括查询、键、值的计算,注意力权重生成等步骤。需要将这些步骤用流程形式呈现,并引用相关来源。同时,用户可能需要Python示例,但问题中没有明确提到代码,所以可能不需要。需要确保回答结构清晰,包含流程图的文字描述,并附上引用标识。最后生成相关问题,比如步骤、应用、权重计算等。</think>关于自注意力机制Self-Attention)的流程图和解图,以下是其核心步骤的文字描述与图解说明: --- ### **Self-Attention 流程图解** 1. **输入向量生成** 输入序列的每个词(或位置)通过嵌入层转换为向量,例如输入序列 $X = [x_1, x_2, ..., x_n]$,每个 $x_i$ 是维度为 $d$ 的向量。 2. **计算查询(Query)、键(Key)、值(Value)** 通过权重矩阵 $W^Q, W^K, W^V$ 对输入向量进行线性变换: $$ Q = X \cdot W^Q, \quad K = X \cdot W^K, \quad V = X \cdot W^V $$ 3. **注意力权重计算** 通过查询 $Q$ 和键 $K$ 的点积计算相似度,并缩放后应用 Softmax 归一化: $$ \text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) \cdot V $$ 其中 $d_k$ 是键向量的维度,用于防止梯度消失[^3]。 4. **输出生成** 注意力权重与值向量 $V$ 加权求和,得到每个位置的最终输出向量。 --- ### **图解说明** 下图展示了 Self-Attention 的流程(文字描述): 1. **输入嵌入**:将输入词转换为向量。 2. **线性变换**:生成 $Q, K, V$。 3. **相似度计算**:通过 $QK^T$ 计算词与词之间的关联强度。 4. **权重归一化**:Softmax 将相似度转换为概率分布。 5. **加权输出**:将权重与值向量结合,得到每个位置的上下文感知表示。 具体可视化可参考引用[^2]中的图解,展示了输入序列如何通过自注意力机制建立全局依赖关系。 --- ### **核心特点** - **并行计算**:所有位置的查询、键、值可同时计算,提升效率。 - **长程依赖建模**:直接捕捉序列中任意两个位置的关系[^1]。 - **应用场景**:自然语言处理(如 Transformer)、计算机视觉(需将图像展平为向量)[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

00&00

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

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

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

打赏作者

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

抵扣说明:

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

余额充值