从 FFN 到 Transformer:一篇带你看懂大模型的「地基」是怎么搭起来的 从 FFN 到 Transformer一篇带你看懂大模型的「地基」是怎么搭起来的从最朴素的 FFN 讲起走过 RNN、CNN 和 Encoder-Decoder再到多头自注意力与 Transformer 完整拆解——本文旨在通过一篇通俗长文理清大模型底层架构的技术演进脉络。摘要为什么 ChatGPT、DeepSeek 这些 AI 能听懂人话背后都站着一个共同的架构——Transformer。本文将带你走完一条完整的技术演进路线FFN所有网络的地基简单但无处不在RNN让网络学会「顺序」但串行太慢CNN从图像跨到文本并行高效但远距离够不着️Encoder-Decoder翻译的脚手架定下编码→解码的骨架多头自注意力论文的灵魂Q/K/V 机制一步到位捕捉上下文Transformer 完整拆解Positional Encoding、Encoder、Decoder 一层层剖开适合想真正理解大模型底层逻辑的读者。前言近两年 AI 不用笔者多说用小阿冰多说大家应该都有感受。DeepSeek、豆包、Claude、ChatGPT……这些名字从陌生到日常也就一两年的事。它们帮我们写邮件、查资料、 debug确实方便了不少。但用得越多我越忍不住想一个问题这些东西难道是突然冒出来的吗后来花时间翻了翻资料发现当然不是。AI 有一条很长的技术脉络只是过去几十年它一直藏在论文和实验室里普通人接触不到。而在这条脉络上2017 年是一个绕不开的节点——Google 的几位研究员发了一篇叫《Attention Is All You Need》的论文提出了Transformer说 Transformer 是现代大模型的“地基”一点都不夸张。点都不夸张。今天的 ChatGPT、Claude、DeepSeek拆到骨架全是 Transformer 的变体。但要真正搞懂 Transformer有几样东西得先过一遍——FFN、CNN、RNN还有 Encoder-De它们并非可选的背景知识而是构成 Transformer 演进脉络中不可或缺的“垫脚石”。本文旨在梳理从 FFN、CNN、RNN 到 Encoder-Decoder 的技术演进逻辑最终阐明 Transformer 如何集其大成让这条技术脉络清晰呈现。真正通下来。一、FFN——最朴素的砖头在所有这些花哨的网络结构底下最基础的东西叫前馈神经网络Feedforward Neural NetworkFFN。它的逻辑简单到只有一行输入乘个矩阵加个偏置过一个激活函数重复几层得到输出。yWxby Wx byWxb→ ReLU →yWxby Wx byWxb→ ReLU → ……没有记忆不管顺序你给什么它就算什么。听起来也太简单了是吧但重点是——后面要讲的所有架构CNN、RNN、Transformer每一层里面跑的都是 FFN。它就像混凝土虽然不起眼但你看到的所有高楼都在用它。所以先记住一个关系FFN 是 CNN/RNN/Transformer 共同的基础单元。后面会反复提到。二、RNN——让网络学会前文提到的FFN有个很致命的问题它分不清“我打你”和“你打我”。“你打我”。一样的词不一样的顺序在 FFN 眼里输入全混在一起没区别。这显然不符合语言的特点——语序本身就为了解决这个问题研究者们提出了RNN循环神经网络。其核心思想是在计算每一步的输出时不仅考虑当前的输入还将上一步的隐藏状态也作为输入。一起算进去。httanh⁡(Wh⋅ht−1Wx⋅xt)h_t \tanh(W_h \cdot h_{t-1} W_x \cdot x_t)ht​tanh(Wh​⋅ht−1​Wx​⋅xt​)这样网络就具备了“记忆”能力——它能记住前面处理过的信息当前的理解是建立在历史信息之上的。这类似于人阅读书籍读到第10页时你的理解已经包含了前9页的内容。 页为了缓解基础RNN在长序列上的梯度消失问题研究者们发展出了更实用的版本LSTM和GRU。它们通过引入门控机制如遗忘门、输入门、输出门能更精细地控制信息的流动决定哪些信息需要保留、哪些可以遗忘。例如Google 2016年推出的神经机器翻译系统 GNMT其核心就是堆叠的LSTM层。 LSTM。但 RNN 有个怎么都绕不过去的毛病慢。算第 3 步必须等第 2 步的结果算第 2 步又得等第 1 步。一个长句子下来并行加速根本用不上。而且句子一长开始的信息传到末尾基本就衰减没了——梯度一路上越传越弱。Transformer 后来要解决的第一个问题就是这个一步步读的串行限制。三、CNN——从图像CNN 大家应该最熟是图像识别领域的老大哥。里的老大哥。一个卷积核在图片上滑动每次看一小块区域低层抓边缘纹理高层拼那么CNN 是如何应用到文本任务上的呢扯上关系的2017 年前后 Facebook 发了 Co其思路很直接将一维卷积应用于词序列每次处理相邻的几个词这与卷积核在图像上滑动窗口的原理完全一致。路一CNN 相比 RNN 最大的优势在于其并行能力。每个卷积窗口的计算相互独立无需像 RNN 那样依赖前一个时间步的结果从而在速度上实现了数量级的提升。了一然而CNN 也存在明显的局限。由于其每次只能捕捉局部上下文若要让序列中相距较远的词例如第 1 个词与第 100 个词建立联系就必须通过堆叠多层卷积来逐步扩大感受野。这不仅增加了模型深度和训练难度对于长距离依赖的建模也依然不够直接和高效。是不够直接。到这里三种结构各自的处境基本清楚了架构擅长什么卡在哪里FFN所有网络的地基没记忆、没顺序概念RNN序列建模有时间感串行太慢长距离记不住CNN并行高效远处的词够不着得堆深度三种方案各自解决了上一代的一些问题又各自留下了新的问题。2017 年那篇论文的标题其实就是在喊别搞那么复杂了用 Attention 就行。四、Encoder-Decoder——翻译的“骨架”在深入探讨 Attention 机制之前我们先来审视一下 Transformer 的整体骨架——Encoder-Decoder编码器-解码器。这一架构并非 Transformer 首创。早在 2014 年Sutskever 等人便将其应用于 Seq2Seq 翻译模型随后 Bahdanau 等人为其引入了 Attention 机制。然而Transformer 是首个完全摒弃 RNN、纯粹基于 Attention 构建的 Encoder-Decoder 模型。如何理解这一架构我们可以将其类比为翻译过程Encoder 阅读源语言如中文理解其语义。它并非将整个句子压缩为一个固定向量而是为每个输入词元生成一个蕴含了上下文信息的向量表示——每个词元的表征都融合了整句话的语义。Decoder 生成目标语言如英文以自回归的方式逐个词元输出。在生成每一个新词元时它都需要参考 Encoder 对源句子的理解以确保翻译的准确性。那中间看一眼这件事具体怎么做这就到了全篇最关键的部分。五、多头自注意力——这篇论文的魂这是《Attention Is All You Need》最笔者东西小阿冰放慢一点讲。5.1 先搞懂普通的 Attention翻译长句的时候每生成一个词真的需要前面所有的信息吗其实不需要那么多。往往三四个关键词就够定Attention 做的就是让模型学会“挑着看”在生成每个输出词时自动去输入序列里找出与当前位置最相关的那些词并给它们分配更高的权重。这一思想在 Bahdanau 等人 2015 年的工作中首次被系统性地引入并应用于机器翻译。具体而言在解码器生成每个词时它会基于当前状态去计算与编码器所有输出状态的“相似度”即注意力分数从而动态地为不同的输入词分配不同的权重。这使得模型能够聚焦于与当前生成最相关的源语言信息显著提升了长句翻译的准确性。子提了不少。5.2 那自注意力多了什么普通 Attention 是 Decoder 看 Encoder。自注意力Self-Attention让句子看自己。拿我吃了一个红红的苹果来说“苹果应该死死盯住红红的”而不是我吃“吃最在乎的是苹果”宾语一个句子内部词和词之间天然有强弱不等的关联。自注意力把这种关联算出来——每个词都跟整句话里的所有词包括自己做一次 Attention。结果就是每个词的新表示里已经搅拌进了整句话的上下文。RNN 要 100 步才能把第 1 个词的信息传到第 100 个词——自注意力一步到位。5.3 数学上长什么样不慌拆成三步。第一步搞出 Q、K、V。每个输入的词向量过三个不同的矩阵变出三个东西QQuery查询“我正在找什么”KKey键“我身上带什么标签”VValue值我实际装了这个设定借鉴了数据库检索的思想——查询匹配键命中就取值。只不过在 Self-Attention 中Q、K、V 全是从输入自身线性变换得到的。己造出来的。第二步算分数 Softmax。每个词的 Q 跟所有词的 K 做点积越高说明越相关。然后过 Softmax 把分数变成概率全部加起来等于 1。Attention(Q,K,V)softmax(QKTdk)×V\text{Attention}(Q, K, V) \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) \times VAttention(Q,K,V)softmax(dk​​QKT​)×V那个dk\sqrt{d_k}dk​​是干嘛的向量维度一大点积的数就很容易很大Softmax 到了极值区域梯度几乎为 0训练不下去。除一下dk\sqrt{d_k}dk​​就是在控数值范围让训练稳一点。第三步加权取 V。拿 Softmax 出来的权重对所有 V 做加权求和。关系近的权重高声音大关系远的权重接近于 0基本静音。5.4 为什么要单头注意力机制存在一个局限一个词的语义往往是多层次的。例如“苹果”一词在“我吃苹果”中指的是水果而在“苹果发了新机”中则指代公司。同一个词在不同的上下文里模型需要关注其完全不同的语义侧面。全不多头注意力Multi-Head Attention的设计就是为了解决这个问题。它并行地运行多组独立的查询Q、键K、值V投影每一组称为一个“头”。每个头可以学习到不同类型的依赖关系关系不一样有的头学会了抓主谓关系有的头学会了抓修饰关系有的头学会了指代消解它指的是谁……最后所有头的输出拼起来过一个线性层收束MultiHead(Q,K,V)Concat(head1,...,headh)×WO\text{MultiHead}(Q, K, V) \text{Concat}(head_1, ..., head_h) \times W^OMultiHead(Q,K,V)Concat(head1​,...,headh​)×WOW在原始 Transformer 论文中通常设置h8h8h8个头。由于将模型维度dmodeld_{\text{model}}dmodel​拆分给了各个头例如dkdmodel/h64d_k d_{\text{model}}/h 64dk​dmodel​/h64其计算复杂度与使用单头但维度较大的注意力大致相当但模型的表征能力却得到了显著提升。了一个档次。六、Transformer —— 一经过前面的铺垫我们已经建立了从FFN到注意力机制的技术演进脉络。现在可以深入剖析Transformer的核心架构了。6.1 Positional Encoding——位置从哪来Embedding 把词映射成向量这一步和所有 NLP 模型一样。但 RNN 自带位置感——它是按顺序读的。Transformer 把所有词一起喂进去并行处理对它来说“狗咬人”和“人咬狗”词袋一模一样。必须手动把位置信息塞进去。论文的办法是用 sin 和 cos 生成一组位置编码直接加到 Embedding 上PE(pos,2i)sin⁡(pos100002i/dmodel)PE_{(pos, 2i)} \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right)PE(pos,2i)​sin(100002i/dmodel​pos​)PE(pos,2i1)cos⁡(pos100002i/dmodel)PE_{(pos, 2i1)} \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right)PE(pos,2i1)​cos(100002i/dmodel​pos​)为什么选择三角函数因为它有一个重要的性质任意两个位置的编码之差可以通过一个线性变换来表示。这使得模型不仅能知道“这是第 5 个位置”还能学习到“这个位置比第 3 个位置靠后 2 位”这类相后来的 BERT、GPT 等模型则让模型自己学习位置编码但核心思路不变——位置信息需要显式地提供给模型。手动喂进去。6.2 Encoder 里面有什么Encoder 叠了 6 层每层完全一样里面就两块第一块Multi-Head Self-Attention。就是把句子里的每个词都和其他所有词交互一遍。这一层的输出每个位置都呼吸过了整句话的信息。前面第五节已经详细拆过了。第二块FFN。就是第一节讲的那个 FFN。两层的全连接中间维度从 512 膨胀到 2048 再压回 512。Attention 做完交流之后FFN 负责在每个位置上独立消化每块后面都跟一个残差连接Add 层归一化LayerNorm。残差连接借鉴自 ResNet——通过添加一条短路路径确保即使该层学习效果不佳信息也能顺畅地绕过它向前传递。正是这种机制使得模型能够稳定地堆叠 6 层甚至更深而不至于崩溃。6 层不崩。6.3 Decoder 比 Encoder 多了两个关键机制Decoder 同样由 6 层堆叠而成其基本结构与 Encoder 层相似但增加了两个关键机制第一个Masked Self-Attention。由于 Decoder 在推理时是自回归地逐个生成词元因此在生成第 3 个词时它不应看到未来的第 4、5 个词。为此在 Self-Attention 计算完注意力分数之后、Softmax 归一化之前将所有未来位置的分数设置为−∞-\infty−∞经过 Softmax 后其权重变为 0。这就是Masked的含义——通过一个三角形的掩码矩阵确保每个位置只能关注到自身及之前的位置。第二个Cross-Attention。这是连接 Encoder 与 Decoder 的核心桥梁可以理解为 Decoder 和 Encoder 之间的电话线。注意它的输入Q 来自 Decoder 上一层的结果“我这个位置在问什么”K 和 V 来自 Encoder 最后的输出“源语言那边说了什么”Decoder 每生成一个词Cross-Attention 就把当前解码状态和整句源语言做一遍匹配。其实就跟第四节讲的普通 Attention 一样——只不过这次两边都跑在 Attention 框架里不再依赖 RNN。ng)6.4 最后一Decoder 的最后一层输出经过一个线性层Linear映射到词表大小的维度再通过 Softmax 函数转换为概率分布。训练时使用交叉熵损失进行反向传播以优化模型参数推理时则采用逐词生成策略如贪心搜索或束搜索直至生成结束符。到出结束符。6.5 全部串起来从头走一遍完整流程顺便标记每个组件前面在哪节讲过输入→ Embedding Positional Encoding6.1 节位置信息手动加Encoder × 66.2 节Multi-Head Attention → 第五节8 头各自抓关系FFN → 第一节的砖瓦Add Norm → ResNet 的残差保证梯度Decoder × 66.3 节Masked Self-Attention → 不准偷看未来Cross-Attention → Decoder 和 Encoder 的电话线FFN → 同上Linear Softmax→ 出词6.这六个模块没有一个是论文凭空发明的。FFN 是基础的全连接网络Self-Attention 替代了 RNN 的序列建模能力并实现了并行计算Cross-Attention 继承了 Bahdanau 等人提出的注意力机制思想残差连接借鉴自 ResNetPositional Encoding 则是对序列顺序的显式编码。Transformer 的创新之处在于将这些已有的技术组件以一种前所未有的、高效且可扩展的架构整合到了一起。拼到了一起。七、从一篇论文到说回前言里提到的那个问题——AI 不是突然出现的。突然出现的。2017 年《Attention Is All You Need》只有 8 个作者发在 NeurIPS 上。那时候没几个人想到这十来页纸会在五年后把整个行业点着。然后就是一条很清晰的线了2018OpenAI 拿 Decoder 做出 GPT-1Google 拿 Encoder 做出 BERT2019-2020GPT-2 到 GPT-3参数量从 1.5 亿冲到 1750 亿大模型开始涌现2022 年底ChatGPT 横空出世两个月一亿用户再到现在DeepSeek、Claude、豆包……你手机里的 AI 应用已经数不过来了而这条爆炸式曲线的原点其实就只是一句话“Attention Is All You Need.”CNN 给了并行和局部特征提取的思路RNN 验证了序列建模这件事本身是对的FFN 从头到尾是每层网络里的那个齿轮。Transformer 没有淘汰它们只是让它们站到了自己最合适的位子上。知道这些之后再看今天的 AI就不会觉得它是凭空冒出来的全知存在了——它是一代代人一块块砖垒上来的。