Transformer模型中的编码器-解码器注意力机制详解
字数 2019 2025-12-13 23:45:31

Transformer模型中的编码器-解码器注意力机制详解

描述
在Transformer模型中,除了编码器的自注意力和解码器的掩码自注意力,还有一个关键的注意力机制:编码器-解码器注意力(也称为交叉注意力)。它是连接编码器和解码器的桥梁,使解码器在生成每个输出时能够聚焦于输入序列的相关部分。这个机制是机器翻译、文本摘要等序列到序列任务的核心。

循序渐进讲解

步骤1:理解编码器-解码器注意力的作用场景

  • 在序列生成任务(如英语→法语翻译)中,编码器将源序列(英语句子)编码为一系列隐藏表示,解码器逐个生成目标序列(法语句子)的词。
  • 生成目标序列的第t个词时,解码器需要参考:1)已生成的部分目标序列(通过解码器自注意力实现);2)整个源序列的信息(通过编码器-解码器注意力实现)。
  • 编码器-解码器注意力让解码器"询问"编码器:"基于我当前生成的状态,源序列的哪些部分最相关?"

步骤2:注意力机制的三元素来源
回忆自注意力机制使用查询(Q)、键(K)、值(V)计算注意力权重。在编码器-解码器注意力中:

  • 查询(Q) 来自解码器。具体说,是解码器上一层的输出(对于第一层解码器,是经过掩码自注意力和前馈网络处理后的表示)。Q的形状为[batch_size, target_len, d_model],target_len是当前已生成的目标序列长度。
  • 键(K)和值(V) 都来自编码器的最终输出。形状为[batch_size, source_len, d_model],source_len是源序列长度。
  • 注意:这里的K和V是相同的张量(即编码器输出),但在计算中扮演不同角色。

步骤3:计算过程分解
以单个注意力头为例,假设batch_size=1,忽略批维度:

  1. 线性变换:对解码器提供的Q、编码器提供的K和V分别应用可学习的权重矩阵W_Q, W_K, W_V,投影到维度d_k(K)和d_v(V),通常d_k=d_v。得到Q_dec, K_enc, V_enc。
  2. 计算注意力分数分数 = (Q_dec * K_enc^T) / sqrt(d_k)。这里Q_dec形状为[target_len, d_k],K_enc^T形状为[d_k, source_len],结果分数矩阵形状为[target_len, source_len]。分数的每个元素score_{t,s}表示在生成第t个目标词时,对源序列第s个词的关注程度。
  3. 可选:应用注意力掩码。在编码器-解码器注意力中,通常不需要因果掩码,因为可以关注源序列的所有位置。但有时可加入填充掩码(忽略源序列的填充符)。
  4. Softmax归一化:对分数矩阵的每一行(每个目标位置)做softmax,得到注意力权重矩阵A,形状[target_len, source_len],每行和为1。
  5. 加权求和输出 = A * V_enc,形状为[target_len, d_v]。这个输出就是编码器-解码器注意力的结果,它融合了源序列的信息。

步骤4:多头扩展与残差连接

  • 与自注意力类似,编码器-解码器注意力也采用多头机制。使用h组不同的W_Q, W_K, W_V,得到h个注意力输出,拼接后经过线性变换,得到最终的多头注意力输出。
  • 这个输出会与解码器该子层的输入(即Q的来源)做残差连接和层归一化,然后馈入解码器的前馈网络。

步骤5:在解码器中的位置
回顾解码器的每一层(如Transformer的6层解码器)包含三个子层:

  1. 掩码自注意力子层:处理已生成的目标序列,确保自回归属性。
  2. 编码器-解码器注意力子层:即本节所讲,接收第1子层输出作为Q,编码器输出作为K和V。
  3. 前馈网络子层:进一步变换特征。
    每个子层都有残差连接和层归一化。

步骤6:直观例子(机器翻译)

  • 源序列:"The cat sat on the mat."
  • 目标序列生成到:"Le chat s'est assis"(对应"The cat sat")。
  • 当生成下一个词"sur"(对应"on")时:
    • 解码器自注意力:聚焦于"Le chat s'est assis"内部关系,确定当前需要介词。
    • 编码器-解码器注意力:Q来自解码器当前状态,计算与源序列每个词的关联,理想情况会高权重关注"on",从而帮助生成"sur"。

关键要点总结

  • 编码器-解码器注意力实现了解码器对编码器输出的动态查询,是序列到序列任务的信息传递核心。
  • 它不同于自注意力:Q来自解码器,K、V来自编码器,实现了跨序列的注意力。
  • 计算复杂度:O(target_len * source_len),与两序列长度乘积相关。
  • 在推断时,由于目标序列是逐个生成的,编码器-解码器注意力每次只计算新生成位置的Q与整个K、V的注意力,但编码器的K、V可缓存以提升效率。
Transformer模型中的编码器-解码器注意力机制详解 描述 在Transformer模型中,除了编码器的自注意力和解码器的掩码自注意力,还有一个关键的注意力机制:编码器-解码器注意力(也称为交叉注意力)。它是连接编码器和解码器的桥梁,使解码器在生成每个输出时能够聚焦于输入序列的相关部分。这个机制是机器翻译、文本摘要等序列到序列任务的核心。 循序渐进讲解 步骤1:理解编码器-解码器注意力的作用场景 在序列生成任务(如英语→法语翻译)中,编码器将源序列(英语句子)编码为一系列隐藏表示,解码器逐个生成目标序列(法语句子)的词。 生成目标序列的第t个词时,解码器需要参考:1)已生成的部分目标序列(通过解码器自注意力实现);2)整个源序列的信息(通过编码器-解码器注意力实现)。 编码器-解码器注意力让解码器"询问"编码器:"基于我当前生成的状态,源序列的哪些部分最相关?" 步骤2:注意力机制的三元素来源 回忆自注意力机制使用查询(Q)、键(K)、值(V)计算注意力权重。在编码器-解码器注意力中: 查询(Q) 来自解码器。具体说,是解码器上一层的输出(对于第一层解码器,是经过掩码自注意力和前馈网络处理后的表示)。Q的形状为 [batch_size, target_len, d_model] ,target_ len是当前已生成的目标序列长度。 键(K)和值(V) 都来自编码器的最终输出。形状为 [batch_size, source_len, d_model] ,source_ len是源序列长度。 注意:这里的K和V是相同的张量(即编码器输出),但在计算中扮演不同角色。 步骤3:计算过程分解 以单个注意力头为例,假设batch_ size=1,忽略批维度: 线性变换 :对解码器提供的Q、编码器提供的K和V分别应用可学习的权重矩阵W_ Q, W_ K, W_ V,投影到维度d_ k(K)和d_ v(V),通常d_ k=d_ v。得到Q_ dec, K_ enc, V_ enc。 计算注意力分数 : 分数 = (Q_dec * K_enc^T) / sqrt(d_k) 。这里Q_ dec形状为 [target_len, d_k] ,K_ enc^T形状为 [d_k, source_len] ,结果分数矩阵形状为 [target_len, source_len] 。分数的每个元素score_ {t,s}表示在生成第t个目标词时,对源序列第s个词的关注程度。 可选:应用注意力掩码 。在编码器-解码器注意力中,通常不需要因果掩码,因为可以关注源序列的所有位置。但有时可加入填充掩码(忽略源序列的填充符)。 Softmax归一化 :对分数矩阵的每一行(每个目标位置)做softmax,得到注意力权重矩阵A,形状 [target_len, source_len] ,每行和为1。 加权求和 : 输出 = A * V_enc ,形状为 [target_len, d_v] 。这个输出就是编码器-解码器注意力的结果,它融合了源序列的信息。 步骤4:多头扩展与残差连接 与自注意力类似,编码器-解码器注意力也采用多头机制。使用h组不同的W_ Q, W_ K, W_ V,得到h个注意力输出,拼接后经过线性变换,得到最终的多头注意力输出。 这个输出会与解码器该子层的输入(即Q的来源)做残差连接和层归一化,然后馈入解码器的前馈网络。 步骤5:在解码器中的位置 回顾解码器的每一层(如Transformer的6层解码器)包含三个子层: 掩码自注意力子层 :处理已生成的目标序列,确保自回归属性。 编码器-解码器注意力子层 :即本节所讲,接收第1子层输出作为Q,编码器输出作为K和V。 前馈网络子层 :进一步变换特征。 每个子层都有残差连接和层归一化。 步骤6:直观例子(机器翻译) 源序列:"The cat sat on the mat." 目标序列生成到:"Le chat s'est assis"(对应"The cat sat")。 当生成下一个词"sur"(对应"on")时: 解码器自注意力:聚焦于"Le chat s'est assis"内部关系,确定当前需要介词。 编码器-解码器注意力:Q来自解码器当前状态,计算与源序列每个词的关联,理想情况会高权重关注"on",从而帮助生成"sur"。 关键要点总结 编码器-解码器注意力实现了解码器对编码器输出的动态查询,是序列到序列任务的信息传递核心。 它不同于自注意力:Q来自解码器,K、V来自编码器,实现了跨序列的注意力。 计算复杂度:O(target_ len * source_ len),与两序列长度乘积相关。 在推断时,由于目标序列是逐个生成的,编码器-解码器注意力每次只计算新生成位置的Q与整个K、V的注意力,但编码器的K、V可缓存以提升效率。