零基础认识大语言模型(LLM)工作原理(5.Transformer的FFN模块到底是什么?)

最近正好有空,打算抽时间复盘总结一下这些年零零散散学习的AI知识.

下面是目录

零基础认识大语言模型(LLM)工作原理目录 - GuZhenYin - 博客园

FFN(前馈神经网络) 到底是什么?

在上一章中,我们已经知道,Attention 的作用是:让模型能够在生成每个 Token 时,回看并加权所有历史信息。

这解决了一个关键问题,"上下文相关性"

但如果我们就草率的认为Attention = 智能, 那就错了。

因为仅靠 Attention,其实模型还是做不到,把得到的"信息"变成"推理能力"

所以其实在 Transformer 里有两个核心模块:

  • Attention(负责"找关系")
  • FFN(负责"加工信息")

很多人看到这里会产生一个误解,Attention 是核心,FFN 是辅助?

不对,这完全弄反了.

在真实模型里:

FFN 才是参数量最大、最"像知识"的部分

而 **Attention 更像"信息路由系统"。**所以我们先从Attention的局限性开始讲起


5.1 Attention 的局限性

我们先回到最早这句话:

小明昨天去北京出差,今天他回来了。

Attention 能很好解决:

  • "他"是谁
  • 北京指代什么
  • 时间关系

但是我们换一个任务:

把这句话改写成正式邮件

或者:

总结这段话的核心意思

或者:

推理小明的行程逻辑

Attention 马上就会遇到一个问题,它只能"关联信息",但不能"加工信息"。


以做一个简单的比喻

Attention,它就像一个"资料整理员".

它很擅长:

  • 找相关内容
  • 做信息匹配
  • 拼接上下文

但却它不擅长:"加工、抽象、归纳"


所以 Transformer 需要第二个模块:**FFN(前馈神经网络),**那么FFN到底是什么呢?


5.2 FFN:真正的"加工工厂"

我们直接让Attention和FFN对比一下.


Attention vs FFN

模块 做什么
Attention 找信息
FFN 处理信息

可以用后厨做一个比喻

Attention:后厨采购员

他会:

  • 查看所有食材
  • 决定买什么
  • 决定买多少

FFN:大厨

他会:

  • 将买回的食材(信息)加工
  • 炒至成菜肴(高级特征)

回到模型

Attention 输出的是:"相关信息集合".

但 FFN 做的是:把这些信息归纳总结后重新"加工成新的表达".


我们还是找到小明~

输入:

小明昨天去北京出差,今天他回来了

Attention 可能输出:小明 + 北京 + 出差 + 时间关系
FFN 则会进一步加工成:小明完成了一次北京出差行程


所以关键区别就在于:

Attention 不创造信息

FFN 才负责"生成新的表达能力"

5.3 FFN 的基本结构

在 Transformer 里,它长这样:

复制代码
输入向量
   ↓
线性变换(升维)
   ↓
激活函数(ReLU / GELU)
   ↓
线性变换(降维)
   ↓
输出向量

用一句通俗的话讲解的话,实际上 FFN = 把信息"放大 → 变形 → 压缩"的加工器


这是一个比较关键的点.

Attention 是多个 Token 之间的信息交互

FFN 则是每个 Token 自己内部的"脑内处理"


大概就是这样:

模块 作用范围
Attention Token 之间交流
FFN Token 自己思考

5.4 举个例子理解 FFN

我们继续用小明~,

小明昨天去北京出差

Attention 做的是:

  • 小明 ↔ 他(指代关系)
  • 北京 ↔ 地点关系

但 FFN 做的是:

"这句话整体是什么意思?"


把FFN 的工作方式比喻为人类学习方式的话

我们可以理解为

Attention---你在查资料

FFN---你在理解资料


继续请出我们的老演员,小明~~

同一条信息:

复制代码
小明昨天去北京出差

Attention 看到的是:

  • 小明
  • 北京
  • 出差
  • 时间关系

但 FFN 会则会抽象和重组整个信息:

把这些"碎片信息"组合成一个新的表达

例如:

复制代码
一次商务出行事件 

注意:

这一步不是纯"检索",而是有计算:

压缩 + 抽象 + 重组


5.5 FFN 的本质:逐点"非线性变换"


FFN 做的事情:

对每一个 Token 向量:

单独做一次"非线性加工"


什么叫非线性?

线性 = 机械加减

例如:

  • 小明 + 1 = 小明?
  • 北京 + 2 = 北京?

没有意义


非线性 = 产生新语义

例如:

输入:

"小明 + 出差 + 北京"

输出:

"商务活动"


👉 FFN 的作用就是:

把"简单叠加的信息"变成"新的语义结构"


5.6 FFN 的关键结构:升维 → 压缩

这是 FFN 最核心的设计。


Step 1:升维(Expand)

把一个向量:

复制代码
768维

扩展成:

复制代码
3072维

为什么要升维?

因为升维之后才能存储更多信息.

空间变大 → 可以表达更多"组合关系"

我们可以理解为:

原来只有一块钱,升维之后, 你就有了5块钱, 你可以购买和组合购买更多的东西.


Step 2:非线性变换(ReLU / GELU)

这一层只做一件事:

筛选 + 激活 + 抑制


我们可以简单理解为,通过算法将有用的信息放大,将没用的信息压缩.


Step 3:降维(Project back)

再从:

复制代码
3072维

压回:

复制代码
768维

最终的结果就是已经不是原来的向量了,而是"加工后的语义"


5.7 为什么说 FFN 是"知识存储器"?

这是一个非常关键的现代观点。

研究发现,在大模型里面FFN 参数量远远大于 Attention 参数量

这说明模型大部分"知识"不在 Attention,而在 FFN

我们可以这样理解:

Attention:查询系统(类似搜索引擎)

FFN:数据库本体(真正存知识)


举个例子

你问大模型:

Redis 是什么?


模型不是去"想",而是:

  • FFN 中已经学到:
    • Redis → 缓存
    • Redis → KV store
    • Redis → 高性能

所以反而FFN 更像"隐式的知识库"


5.8 总结一下FFN 的真实作用

写了这么多,其实我们可以总结一下FFN的真实作用.

Attention 负责"连接信息",FFN 负责"理解信息",Transformer则是用多层 FFN 逐步构建抽象能力。

本章总结

① FFN 是什么?

两层线性变换 + 非线性激活的"信息加工器"


② FFN 和 Attention 的区别

模块 功能
Attention 找关系
FFN 做理解

③ FFN 的本质

对每个 Token 做"非线性语义变换"


④ 为什么 FFN 很重要?

因为它才是模型"知识和语义能力"的主要来源

也正是这个看似简单的"升维-激活-降维"三步曲,赋予了Transformer深度思考的能力,使其从简单的信息收集器变成了真正的理解者和创造者。


当然,在现代大模型中,FFN 已经发展出多种不同的实现范式,而不仅仅是传统的两层前馈结构。

SwiGLU FFN:通过门控机制(Gating)替代传统激活函数,使模型能够在特征维度上进行选择性放大与抑制,从而提升表达能力。

MoE(Mixture of Experts)结构:将传统的单一 FFN 扩展为多个"专家网络",并通过路由机制(Router)动态选择部分专家参与计算,使模型在参数规模大幅提升的同时保持计算成本可控。

这些结构本质上并不是简单的"优化",而是 FFN 在不同设计目标下的结构性演化。

这里篇幅有限,就不过多赘述了. 我们下一章在讲.

开始进入深水区了 白话描述逐渐困难了 哈哈哈 - - ..