Module 1 · Transformer Lesson 11 Block 零件 3/3

FFN(前馈网络)

Block 的最后一个零件。注意力让词之间"横向交流";FFN 让每个词"自己纵向深加工"。学完它,一个 Transformer Block 的部件就齐了。

TopicFeed-Forward Network(FFN / MLP)
Objectives理解 FFN 做什么、为什么需要非线性、"交流 vs 计算"的分工
Prerequisites矩阵=变换 ✅、注意力 ✅、残差/LayerNorm ✅
Outcome能说清 FFN 的两层结构、非线性的必要性、逐词独立
WarningFFN 对每个词单独处理,不看别的词(交流是注意力干的)

① Why — 注意力缺了点什么

注意力做的事本质是加权平均(把别的词的 value 按权重混进来)——这基本是线性操作:混合、搬运信息。它擅长"让词之间交流",但不擅长对单个词做复杂的非线性加工

一个关键事实:纯线性变换叠再多层,等价于一层(多个矩阵相乘还是一个矩阵)。要让模型能表达复杂函数,必须引入非线性

FFN 就是补这个:给每个词的向量做一次带非线性的深加工,增强表达能力。

② What — 两层 + 中间一个非线性

一个词向量做三步(先放大、非线性、再缩回):

FFN(x) = W₂ · 激活( W₁ · x + b₁ ) + b₂
x 512 W₁ 放大 2048 激活(非线性) ReLU / GELU W₂ 缩回 512 输出 512
512 → 放大到 2048(宽草稿纸)→ 非线性激活 → 缩回 512。每个词向量各自独立走一遍这条路。

③ 关键点

🧠 一句话分工:注意力 = 交流(词之间交换信息);FFN = 计算(每个词自己深加工)。一个 Block = 先交流、再计算。这就是 Transformer 反复做的两件事。

④ 🎯 Block 部件到齐了

一个 Transformer Block 的两个子层,现在你都学完了:

x = LayerNorm( x + 多头注意力(x) ) ← 交流
x = LayerNorm( x + FFN(x) )    ← 计算

下一课(收尾综合,不是新概念):把这个 Block 叠 N 层(你多次问到的"多层"),再接输出层,就是完整的 Transformer——终于能回答"如何预测下一个 token"。

💬 深入问答(来自讨论)

Q:激活函数可以理解为 0/1 二元化吗?

❌ 不是二元化,而是门控。以 ReLU = max(0, x) 为例:

输入 -3 -1 0 2 5 → 输出 0 0 0 2 5

所以它像一道门/闸:负的堵死、正的原样放行。真正作用是引入非线性(折线拐点)——很多折线拼起来能逼近任意复杂曲线,这才是激活的意义,不是"二值化"。

粗糙但准的理解:激活 = 门控(放行 or 压制),不是 0/1 二元化。GELU 是更柔和的门(负数压得很小而非一刀切 0),现代大模型多用。

Q:注意力=交流,那 FFN 理解为"淘汰"合适吗?

"淘汰"太窄——它只抓住了 ReLU 砍负值那半,漏了 FFN 的主要动作。FFN 是"展开→筛选→重组"的完整加工:先 W₁ 放大到 2048(造出很多新特征)、激活门控、再 W₂ 缩回 512,输出一个更精炼的新向量,不是"删掉一些东西"。

更贴的词:提炼 / 深加工 / 消化,不是"淘汰"。ReLU 的筛选只是手段(造非线性),FFN 的目的是把这个词提炼成更有用的表示。

Q:注意力是"调整自身的权重"吗?

措辞要小心:"权重"易混。注意力算出注意力权重(该关注每个词多少),用它把别的词的信息加权混进来 → 更新的是自身的表示(hidden state)不是自身的权重参数(W 是固定的)。

注意力交流:从别的词收集信息、更新自己的表示 —— 像开会(听取别人、更新看法)
FFN提炼:自己消化加工收来的信息 —— 像会后独自复盘(整理成新结论)
一个 Block = 交流 → 提炼(不是"交流 → 淘汰")。

Q:FFN 为什么占约 2/3 参数?(参数账)

矩阵的"大小" = 参数个数 = 行×列。W₁、W₂ 有一维是 d_ff=2048(=4×512),所以特别"胖"。一层里对比(d_model=512, d_ff=2048):

注意力 4 个矩阵W_Q/K/V/O 各 512×512 → 合计 ~105 万
FFN W₁ + W₂512×2048 + 2048×512 → 合计 ~210 万

FFN 两个矩阵 ≈ 注意力全部四个的两倍 → 约占 210/(210+105) ≈ 2/3。根源就是那个 ×4 放大

补:因为 FFN 参数最多、又逐词深加工,研究普遍认为模型的很多事实性知识就编码在 FFN 权重里(🅿️ 进阶,以后再深挖)。

✅ 快速检查(用自己的话答)

  1. FFN 的三步是什么?(放大 → ? → 缩回)中间那步为什么不能省?
  2. 用"交流 / 计算"概括:注意力和 FFN 各负责哪个?
  3. FFN 处理一个词时,会参考句子里别的词吗?(对比注意力)

答完这 3 题,Block 的零件就全通关了 🎉 下一课把它们拼装 + 多层堆叠 → 完整 Transformer。