理解注意力机制与Transformer在NLP中的应用

注意力机制的核心思想是让模型在处理输入序列时,能够动态地为不同位置分配不同的重要性权重。在自然语言处理中,这使模型能够聚焦于与当前任务最相关的词语。Transformer架构通过自注意力(Self-Attention)机制实现了这一思想。

数学原理

给定输入序列$X = [x_1, x_2, ..., x_n]$($x_i \in \mathbb{R}^d$),自注意力计算分为三步:

  1. 线性变换
    $$Q = XW^Q, \quad K = XW^K, \quad V = XW^V$$
    其中$W^Q, W^K, W^V \in \mathbb{R}^{d \times d_k}$为可学习参数矩阵
  2. 注意力权重
    $$A = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)$$
  3. 加权输出
    $$Z = AV$$

缩放因子$\frac{1}{\sqrt{d_k}}$用于防止点积过大导致梯度消失。


Python简化版自注意力实现

以下代码展示自注意力机制的核心计算过程:

import numpy as np

def scaled_dot_product_attention(Q, K, V):
    """简化版自注意力计算"""
    d_k = Q.shape[-1]
    # 计算注意力分数
    scores = np.matmul(Q, K.transpose(0,2,1)) / np.sqrt(d_k)
    # Softmax归一化
    attention_weights = np.exp(scores - np.max(scores, axis=-1, keepdims=True))
    attention_weights = attention_weights / np.sum(attention_weights, axis=-1, keepdims=True)
    # 加权输出
    output = np.matmul(attention_weights, V)
    return output, attention_weights

# 示例输入 (批大小=2, 序列长度=3, 嵌入维度=4)
X = np.array([
    [[0.1, 0.2, 0.3, 0.4], [0.5, 0.6, 0.7, 0.8], [0.9, 1.0, 1.1, 1.2]],
    [[1.1, 1.2, 1.3, 1.4], [1.5, 1.6, 1.7, 1.8], [1.9, 2.0, 2.1, 2.2]]
])

# 随机初始化权重矩阵 (嵌入维度4→注意力维度3)
WQ = np.random.randn(4, 3)
WK = np.random.randn(4, 3)
WV = np.random.randn(4, 3)

# 计算Q,K,V
Q = np.matmul(X, WQ)
K = np.matmul(X, WK)
V = np.matmul(X, WV)

# 执行注意力计算
output, attention_weights = scaled_dot_product_attention(Q, K, V)
print("输出形状:", output.shape)  # (2,3,3)
print("注意力权重形状:", attention_weights.shape)  # (2,3,3)


Transformer在NLP中的应用解析

  1. 编码器-解码器架构
    Transformer通过堆叠的多头注意力层(Multi-Head Attention)同时捕捉不同层次的语义关系:

    • 编码器:处理输入序列生成上下文表示
    • 解码器:使用编码器输出和已生成内容预测下一个词
  2. 位置编码
    使用正弦函数注入位置信息:
    $$PE_{(pos,2i)} = \sin\left(\frac{pos}{10000^{2i/d}}\right)$$
    $$PE_{(pos,2i+1)} = \cos\left(\frac{pos}{10000^{2i/d}}\right)$$

  3. 实际应用场景

    • 机器翻译(如"I love NLP" → "我热爱自然语言处理")
    • 文本摘要(生成关键信息浓缩版)
    • 问答系统(根据问题定位文本答案)

该简化实现省略了层归一化、残差连接等细节,但完整保留了注意力机制的核心计算逻辑。实际Transformer模型通过堆叠多个这样的注意力层,实现了对长距离依赖的高效建模。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐