游乐游手机版
首页/AI教程/文章详情

Attention Decoder部分核心机制与实现原理

时间:2026-06-03 12:22
Transformer解码器究竟是如何一步步逐个生成单词的?许多学习者在接触这一部分时,总感觉隔着一层窗户纸——虽然知道它的核心是“自回归生成”,但具体到每一步输入是什么、矩阵如何计算、最终结果如何选取,往往容易困惑。其实并没有那么复杂。今天我们就以一个最简化的实际案例,将解码器的完整推理过程从头到

Transformer解码器究竟是如何一步步逐个生成单词的?许多学习者在接触这一部分时,总感觉隔着一层窗户纸——虽然知道它的核心是“自回归生成”,但具体到每一步输入是什么、矩阵如何计算、最终结果如何选取,往往容易困惑。其实并没有那么复杂。今天我们就以一个最简化的实际案例,将解码器的完整推理过程从头到尾详细演示一遍。

先设定一个具体场景:英译德任务。“The cat sat”翻译为“Die Katze saß”。原文只有三个词,恰到好处,每一步的维度变化都能清楚计算。

Attention-04-decoder部分

编码器已经执行完毕,Z已经计算完成。Z的形状是(3, 512)——3个源语言单词,每个词由一个512维的向量表示。这个Z在整个推理过程中保持固定不变,编码器只需运行一次。

目标语言(德语)是“Die Katze saß”,模型并不已知这个答案,它需要自主猜测出来。

解码器推理:逐步详解

第0步:开始准备

解码器当前仅有一个输入:句子起始符,即。这个符号告诉解码器:“开始工作,请生成第一个有意义的词汇。”

输入序列:[]。

第1步:生成第一个词“Die”

解码器带着[]依次经过三个子层:

Masked Self-attention:由于只有一个词,它只能关注自身。
Cross-attention:查询向量Q来自,键K和值V来自编码器输出的Z。这一步的解码器是在询问:“为了生成下一个词,源句中的哪个词最为关键?”
FFN:对注意力结果进行非线性变换加工。

最后进入Linear + Softmax,得到词汇表上每个词的概率分布。例如:

  • Die: 0.41(概率最高)
  • Der: 0.28
  • Das: 0.18
  • ...

选择概率最高的词:Die。

第2步:生成第二个词“Katze”

将刚生成的“Die”加入输入,序列变为[, Die]。

再次依次通过三个子层:

Masked Self-attention:只能看到自身;Die可以关注和自己。
Cross-attention:查询向量Q来自代表“Die”的位置,K/V仍然来自Z。此时解码器思考的是:“我已经生成了‘Die’,下一个词应该是什么?”

Linear + Softmax:

  • Katze: 0.52(最高)
  • Hund: 0.21
  • Maus: 0.09
  • ...

选取最高的:Katze。

第3步:生成第三个词“saß”

输入序列:[, Die, Katze]。

在Cross-attention中,Q来自“Katze”对应的位置,K/V依然是Z。解码器继续询问:“已经有了‘Die Katze’,下一个词应该是什么?”

Linear + Softmax:

  • saß: 0.61(最高)
  • sitzt: 0.18
  • lag: 0.08
  • ...

选择最高的:saß。

第4步:生成结束符

输入序列:[, Die, Katze, saß]。

Linear + Softmax:

  • : 0.74(最高)
  • auf: 0.12
  • ...

检测到,停止生成。

最终输出结果

整个推理过程生成的结果是:Die Katze saß。

规律清晰可见

步骤 1: 输入 [] → 输出 Die
步骤 2: 输入 [, Die] → 输出 Katze
步骤 3: 输入 [, Die, Katze] → 输出 saß
步骤 4: 输入 [, Die, Katze, saß] → 输出 → 停止

每一步的输入都比上一步多一个已经生成的词,这就是自回归机制的核心:利用自身已生成的输出作为下一步的输入。

三个关键要点

1. 编码器只运行一次。Z在推理开始前就已计算完毕,并在整个过程中保持不变。解码器每一步都在查询同一个Z。

2. 解码器每一步都会重新完整地执行三个子层。它并非只处理新添加的那个词,而是将整个输入序列重新计算一遍。但由于Masked Self-attention机制的约束,每个位置只能看到它之前的词,因此计算结果与上一步保持一致,不会出现重复计算错误。

3. 选取最高概率并非唯一的策略。上面演示的是贪心搜索——每一步都选取概率最高的词。在实际应用中,还可以使用束搜索,每一步保留概率最高的k个候选序列,最终选择整体概率最高的序列。这种方法通常效果更好,但计算速度更慢。

维度拆解:完整梳理每一步的矩阵运算

仅仅讲解概念还不够,下面我们把第1步的维度变化完整演算一遍,确保每个环节都清晰明确。

起点

解码器输入:[]。经过词嵌入与位置编码后,转化为形状为(1, 512)的张量。

子层1:Masked Self-attention

当前只有一个词,因此掩码实际上不起作用——它只能关注自身。

  • Q = X_dec · W_Q: (1, 512) · (512, 64) = (1, 64)
  • K = X_dec · W_K: (1, 512) · (512, 64) = (1, 64)
  • V = X_dec · W_V: (1, 512) · (512, 64) = (1, 64)
  • 点积打分:Q · Kᵀ = (1, 64) · (64, 1) = (1, 1) ← 单个数值,即自身对自身的分数
  • ÷ √64,softmax:权重形状为(1, 1),值为1.0(注意力完全集中于自身)
  • 加权求和:权重 · V = (1, 1) · (1, 64) = (1, 64) ← 单头输出
  • 8个头拼接:(1, 64) × 8 → (1, 512)
  • · W_O: (1, 512) · (512, 512) = (1, 512)
  • 残差连接 + LayerNorm: 输出形状(1, 512)

子层2:Cross-attention

这一步最为关键。Q来自解码器,K和V则来自编码器的Z。

  • Q = d · W_Q: (1, 512) · (512, 64) = (1, 64) ← 解码器生成的查询
  • K = Z · W_K: (3, 512) · (512, 64) = (3, 64) ← 源句的3个键
  • V = Z · W_V: (3, 512) · (512, 64) = (3, 64) ← 源句的3个值
  • 点积打分:Q · Kᵀ = (1, 64) · (64, 3) = (1, 3) ← 解码器当前位置对源句3个词各打一个分数
  • ÷ √64,softmax:权重形状(1, 3),三个数值之和为1,例如[0.15, 0.65, 0.20]——这意味着在生成当前词时,模型认为源句第二个词“cat”最为重要。
  • 加权求和:权重 · V = (1, 3) · (3, 64) = (1, 64)
  • 8个头拼接 → (1, 512),· W_O → (1, 512),残差连接+LayerNorm保持维度不变

子层3:FFN

  • 输入形状(1, 512)
  • · W₁: (1, 512) · (512, 2048) = (1, 2048) ← 升维
  • ReLU激活,负值设为0
  • · W₂: (1, 2048) · (2048, 512) = (1, 512) ← 降维恢复
  • 残差连接 + LayerNorm: 输出形状(1, 512)

第1层解码器结束,输出传入第2层,依次重复共6层。

第6层结束后进入输出层:(1, 512) · Linear(512, 37000) = (1, 37000),Softmax得到词汇表上每个词的概率,取最大值→“Die”。

整体维度变化一览

嵌入向量 → (1, 512)
↓ Masked Self-attn: Q、K、V各为(1, 64)×8头,打分矩阵(1,1),单头输出(1,64),拼接+W_O → (1,512),残差+LN → (1,512)
↓ Cross-attention: Q(1,64)来自解码器,K、V(3,64)来自编码器Z,打分矩阵(1,3)←这是核心:1行代表解码器当前位置,3列代表源句3个词,softmax后的三个数值即为“生成这个词时应参考源句哪些位置”的权重。单头输出(1,64),拼接+W_O → (1,512),残差+LN → (1,512)
↓ FFN: 升维至(1,2048),降维回(1,512),残差+LN → (1,512)
↓ × 6层
↓ Linear: (1,37000)
↓ Softmax: (1,37000)
↓ 取最大值 → “Die”

这个形状为(1, 3)的打分矩阵,正是Cross-attention的核心精髓所在。它决定了解码器在生成每个目标词时,究竟将注意力分配给了源句的哪个词。理解了这一层,Transformer解码器的推理机制就能真正彻底打通。

来源:https://juejin.cn/post/7644596628976599090
上一篇Superpowers超能力:AI编程助手实战指南 下一篇CheckCle开源全栈监控与事件管理平台
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
2026实测解析GPT-5.5模型能力详解与国内合规使用规范
AI教程 · 2026-06-03

2026实测解析GPT-5.5模型能力详解与国内合规使用规范

2026年,AI大模型迎来了又一次迭代升级。GPT-5 5凭借在多模态精细化处理能力上的跨越式突破,正逐步成为职场办公、内容创作、代码开发以及数据优化等领域的核心生产力工具。然而,对国内多数用户而言,当前仍面临不少现实难题:渠道杂乱、合规边界模糊、账号频繁被封、数据泄露风险——各类非正规镜像站、共享

分时操作系统和实时操作系统的主要区别
AI教程 · 2026-06-03

分时操作系统和实时操作系统的主要区别

分时操作系统和实时操作系统区别 ?️ 操作系统家族里,有两类系统经常被放在一起比较:分时操作系统和实时操作系统。它们虽然都叫“操作系统”,但设计哲学、工作机制和应用场景可以说是天差地别。一个追求“公平共享”,一个追求“确定性响应”。这篇文章打算从定义、核心机制、调度策略、实际应用等维度,把这两者的本

企业AI智能体从零搭建实战踩坑经验全记录
AI教程 · 2026-06-03

企业AI智能体从零搭建实战踩坑经验全记录

去年开始用腾讯云智能体开发平台(ADP)跑了几个企业项目,从最基础的客服Bot一路干到多Agent协同系统,中间踩的坑不少,但积累下来的经验价值也相当可观。这篇文章就聊聊实际落地过程里的那些关键节点和教训,给同样在腾讯云上折腾AI Agent的朋友做个参考。为什么选腾讯云ADP而不是从零搭建做第一个

Selenium自动化测试入门:从环境搭建到首个可维护用例
AI教程 · 2026-06-03

Selenium自动化测试入门:从环境搭建到首个可维护用例

Selenium 入门的核心不在于记住多少 API,而在于把三件事想清楚:环境别装错版本、等待机制别用 sleep、用例结构别写成流水账。下面按照“装环境 → 跑通第一个脚本 → 理解等待 → 选对定位器 → 拆成 Page Object”的顺序走一遍,每一步都附上代码,踩过的坑直接标出来。 Sel

专业表格魔法师 QoderWork CN 让脏数据秒变仪表盘神器
AI教程 · 2026-06-03

专业表格魔法师 QoderWork CN 让脏数据秒变仪表盘神器

使用案例 今天聊聊怎么用阿里巴巴的 QoderWork CN 桌面应用智能体,把 Excel 里那堆乱糟糟的原始数据清洗干净,再做成可视化的看板。整个过程基本不需要写代码,全靠自然语言对话就能搞定。下面就用一个实际案例,把操作步骤拆开来讲。 步骤一:安装并注册 QoderWork CN 账号 先到