fun-transformer学习笔记-Task2——Attention机制和Transformer模型

发布于:2025-02-18 ⋅ 阅读:(115) ⋅ 点赞:(0)

一、Attention机制

1.1 背景与动机

  • 传统RNN/LSTM的局限

    • 长序列处理能力受限(梯度消失/爆炸)
    • 固定长度上下文向量导致信息损失
    • 无法动态聚焦关键输入
  • Attention的提出

    • Bahdanau et al. (2015) 首次在神经机器翻译中引入Attention
    • 核心思想:为每个输入词分配不同的重要性权重,动态生成上下文向量

1.2 Attention的工作原理

  • 核心步骤

    1. 分解输入:将输入序列(如句子)分解为单个词或数据单元。
    2. 计算重要性:通过Query与Key的相似度计算,为每个输入单元分配权重。
    3. 加权求和:根据权重对Value进行加权求和,生成上下文向量。
  • 数学表达

    • 相似度计算:( \text{Score}(Q, K) = Q \cdot K )
    • 权重分配:( \alpha = \text{Softmax}(\text{Score}) )
    • 上下文向量:( \text{Context} = \sum (\alpha_i \cdot V_i) )

1.3 Attention的变体

  • 全局Attention

    • 计算所有输入单元的权重,适合短序列任务。
    • 复杂度:( O(n^2d) ),其中 ( n ) 为序列长度,( d ) 为向量维度。
  • 局部Attention

    • 仅计算局部窗口内的权重,适合长序列任务。
    • 复杂度:( O(nDd) ),其中 ( D ) 为窗口大小。
  • 多头Attention

    • 并行计算多个Attention头,捕捉不同子空间的语义信息。
    • 输出拼接:( \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h)W^O )

二、Transformer模型

2.1 架构概述

  • 编码器-解码器结构

    • 编码器:将输入序列映射为隐藏表示。
    • 解码器:基于编码器输出生成目标序列。
  • 核心组件

    • 自注意力机制:捕捉序列内部的依赖关系。
    • 前馈网络:对注意力输出进行非线性变换。
    • 位置编码:为模型提供序列位置信息。

2.2 位置编码

  • 目的:弥补Transformer缺乏序列顺序感知的缺陷。
  • 实现方式
    • 正弦/余弦函数编码:
      [
      PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d}}\right), \quad PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d}}\right)
      ]
    • 优点:无需训练参数,支持任意长度序列。

2.3 Transformer的工作流程

  • 输入处理
    1. 词嵌入:将输入词映射为向量。
    2. 位置编码:为词向量添加位置信息。
  • 编码器
    1. 多头自注意力:计算输入序列的上下文表示。
    2. 前馈网络:对注意力输出进行非线性变换。
  • 解码器
    1. 掩码自注意力:防止未来信息泄露。
    2. 编码器-解码器注意力:融合编码器输出。
    3. 前馈网络:生成目标序列。

网站公告

今日签到

点亮在社区的每一天
去签到