零基础认识大语言模型(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 可能输出:小明 + 北京 + 出差 + 时间关系
小明完成了一次北京出差行程所以关键区别就在于:
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 在不同设计目标下的结构性演化。
这里篇幅有限,就不过多赘述了. 我们下一章在讲.
开始进入深水区了 白话描述逐渐困难了 哈哈哈 - - ..
浙公网安备 33010602011771号