首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >LLM 系列(十九):前馈神经网络 FFN

LLM 系列(十九):前馈神经网络 FFN

作者头像
磊叔的技术博客
发布2026-02-04 11:07:30
发布2026-02-04 11:07:30
3220
举报

当我们谈到 Transformer 模型时,往往聚光灯都会打在 自注意力机制(Self-Attention) 上。然而,Transformer 中还有一个 “不显山露水” 的关键组件,那就是 前馈神经网络(Feed Forward Neural Network, FFN) 。每层 Transformer 编码器和解码器中除了注意力模块外,都包含这样一个 FFN 子层,它在序列的每个位置上默默发挥着重要作用。本文将深入解析 FFN 的概念、其在 Transformer 中的结构与工作流程、在模型中的作用,以及与其他模块(如注意力)的关系。

1、FFN 的基本概念

前馈神经网络(FFN) 是最基础的神经网络形式,由 输入层、若干隐藏层和输出层 组成,信息从输入层经由隐藏层逐层 “前馈” 传递到输出层,没有循环或反馈连接。每层通常是全连接层并伴随激活函数,将上一层的输出通过线性变换和非线性变换映射到下一层。由于不存在循环,FFN 输入经过网络后直接得到输出,没有状态保存,因此被称为 “前馈” 网络。

在深度学习中,前馈网络常用于对特征进行非线性变换和表示学习。一个简单的两层前馈网络可以表示为:给定输入向量 ,首先通过仿射变换和激活函数得到隐藏表示

再通过线性变换得到输出

其中 和 为可学习参数, 表示非线性激活函数。非线性激活 指使用如 ReLUSigmoid 等非线性函数,对线性变换结果引入非线性。如果没有激活函数,串联的两层线性变换在数学上等价于单一线性变换,模型的表达能力会受到极大限制。通过引入非线性激活,FFN 能够近似学习任意复杂的函数关系,这也是深度神经网络强大表达能力的来源之一。

总而言之,FFN 是一种 全连接的多层感知机(MLP),其关键特征包括:逐层线性变换、非线性激活,以及信息 单向前传。下面来看看,如此简单的 FFN 是如何嵌入 Transformer 架构中并发挥关键作用的。

Transformer 中的 FFN 结构与流程

图:Transformer 的基本结构示意图,左侧橙色部分为编码器层(Encoder Layer),右侧绿色部分为解码器层(Decoder Layer)。每个编码器层包含 多头自注意力 子层和 前馈神经网络 子层,并在每个子层后应用残差连接和层归一化(Norm);解码器层在结构上比编码器多了一个 交叉注意力 子层(蓝色模块),但同样包含 FFN 子层。

Transformer 采用了编码器-解码器堆叠的架构,编码器层解码器层 各自叠加多个相同结构的子层。以编码器层为例,每一层包含两个核心子模块:第一个是 多头自注意力(Multi-Head Self-Attention) 机制,第二个就是 逐位置的前馈神经网络。需要注意的是,为了保证深层网络的可训练性,Transformer 在每个子层后都使用了 残差连接(Residual Connection)层归一化(Layer Normalization) 。具体来说,输入经过子层(AttentionFFN)得到输出后,会与原始输入相加(这就是残差连接),然后再进行层归一化。这种设计可以缓解梯度消失、加速收敛,并确保即使经过多层变换,原始信息也能部分保留。这也要求每个子层输出维度与输入维度相同(通常记为 ),以便残差相加时维度匹配(关于残差连接,强烈建议阅读 LLM 系列(十七):残差连接 Residual Connection 这篇文章)。

Transformer编码器 中,序列的每个位置首先经过多头自注意力子层,与序列中其他位置的信息进行交互融合;随后,各位置的表示再分别通过 FFN 子层进行非线性变换和增强。解码器 层除了包含与编码器相同的自注意力和 FFN 外,还插入了一 个 编码器-解码器交叉注意力(Cross-Attention) 子层,用于让解码器在生成目标序列时“关注”编码器输出的源序列表示。不论编码器还是解码器,每个位置在通过自注意力整合上下文信息后,都会经过同一个 FFN 网络进行进一步处理。下面,我们重点看看 TransformerFFN 子层自身的结构细节和处理流程。

图:Transformer前馈神经网络FFN)子层结构示意,图中右侧将这两层结构抽象表示为一个 “FFN” 模块。

可以看到,FFN 由两个线性层(Linear)和中间的 非线性激活层Activation)组成。输入和输出的维度均为模型维度 (即 ),中间隐藏层维度为 。通常 远大于 以扩展表示能力,在经典 Transformer 中 。

Transformer 中的 FFN 子层实际上就是一个两层的全连接网络,作用于每个位置的隐藏表示上。以上图所示:假设来自注意力子层的输出表示为 (维度 ),首先经过第一层线性变换,将维度映射到 (通常 被称为 中间层维度隐藏层维度 );然后经过一个非线性激活函数(例如 ReLU);最后通过第二层线性变换,将维度再投射回 。 用公式表示即:

(其中 表示激活函数,如 ReLU)。

Transformer 原论文中将这种结构描述为 “两个核大小为 1 的卷积” ,可以理解为对每个位置 逐点 地应用两个全连接层(在图像中 1×1 卷积不影响相邻像素间关系,这里类似地不混合序列不同位置的信息)。

逐位置前馈网络 意味着同一层的 FFN 对序列中每个位置的向量 独立 执行相同的运算,这体现了 位置无关建模 的特性:FFN 的参数在整个序列的各位置共享,并不考虑该向量是句子中的第几词或第几位置。换句话说,无论输入序列长度多少,FFN 对每个时间步的处理方式都一样(当然,不同层的 FFN 参数彼此独立,每一层都会重新学习新的投影)。这种位置无关的设计使得模型对序列的处理高度并行化:所有位置的向量都可以同时通过 FFN 变换,充分利用矩阵运算的并行优势

一般而言,TransformerFFN 子层通常包含大量的参数;因为第一层线性投影扩展了维度(例如从 512 维扩展到 2048 维,再投回 512 维),故两个投影矩阵的参数规模相当庞大。据统计,在标准 Transformer 块中,FFN 部分的参数量约占整个子层参数的 8:3FFN:MHA)的比例。因此可以这样说,FFNTransformer 中的 “参数大户” 和主要的计算工作单元。尽管注意力机制经常作为Transformer 的亮点被讨论,但FFN 对模型性能的贡献同样不容忽视。下面我们详细看看 FFN 在模型中扮演的角色。

2、FFN 在模型中的作用

2.1、提供非线性变换与特征提取

自注意力层主要做的是根据不同位置之间的相关性对信息加权平均,可以视为一种内容相关的 加权求和(线性组合) 操作,本质上偏线性。而 FFN 引入了非线性的逐位置变换,对每个位置的表示进行 非线性激活 和再投影。这种非线性变换能够提取更复杂的特征、建模更高阶的关系,使模型具有更强的表达能力。如果没有 FFN,多个注意力层串联仍然是整体上近似线性的叠加,模型难以拟合复杂函数;加入带激活函数的 FFN 后,模型成为真正的深层非线性网络,具备逼近任意函数的潜力。

2.2、扩张维度提升表示能力

如前面所说,TransformerFFN 通常将向量维度从 扩展到 再压缩回来。这个 “扩张-压缩” 过程让每个位置的表示在高维空间中得到丰富表达,然后再投影回原维度。例如,经典 Transformer 中 ,而 ,扩张 4 倍维度提供了更大的表示空间来捕获输入特征的细微模式。适当加宽 FFN 的隐藏层(增加 )可以提升模型的性能,因为更宽的 FFN 允许模型学习到更丰富的特征组合。不过也需要在参数量和性能之间折中,太宽会增加计算和引发过拟合风险。

2.3、独立处理各位置的信息

FFN 对每个位置各自处理,这种 位置无关建模 使其能够专注于对该位置内容本身的深入处理。在经过注意力层融合上下文后,每个位置的向量已经包含了来自其他位置的信息;FFN 随后扮演 “处理器” 的角色,在不引入额外位置交互的情况下,对该融合后的表示进行复杂变换。“注意力层像一个会议,整合了全局信息;FFN 则像每个人回到自己的办公室,消化 处理 从会议中获得的信息”。这种交替的 “注意力-FFN” 双步机制,让模型既能全局建模序列关系,又能逐点深度处理特征,从而层层提取越来越高层的抽象表示。

2.4、充当模型的记忆单元

Transformer 中的 FFN 子层在某种程度上可以看作模型的 键值记忆 模块,即它存储并转换了每个位置上重要的特征信息。大量的参数和非线性使得 FFN 能为每个 token 学习特定的“模式响应”,当注意力机制选取并聚合了相关的信息后,FFN 能对这些信息进行组合、放大或抑制,类似于在每个位置上执行一套条件的规则或记忆检索。这使得 Transformer 具备强大的建模能力,能够表示复杂的模式,去除 FFN 子层会严重削弱模型对任务的表现。

总的来说,FFN 与注意力机制相辅相成,为 Transformer 提供了 不可或缺的 处理能力。FFN 赋予模型非线性和表达张力,使注意力汇聚的信息得到进一步的加工和升华。在 Transformer 大放异彩的背后,这个不起眼的 “前馈” 模块实际上功不可没。

3、FFN 与其他模块的关系

之前在听 AK 讲解 GPT 原理时,他有过一个比较直观的解释

  • Communication (通信):即 Attention 层,这就像是 Token 之间在“开会”或“交谈”,相互交换信息。
  • Computation (计算):即 FFN 层,这就像是每个 Token 拿到信息后,独自进行“思考”和处理。

3.1 与 Attention 的互补作用

Transformer 每一层由 多头注意力前馈网络 两个子层串联而成,这实际上形成了一种互补关系,注意力 负责在序列不同位置之间建立联系:它根据 Q-K 的相似度从其他位置提取信息,完成 跨位置的信息交互。换言之,注意力机制让模型知道 “该关注哪些别的位置的内容”。但注意力本身主要做加权平均,没有添加新的非线性变换。而 FFN 在注意力之后,对 每个位置融合了上下文的表示 进行 逐点非线性变换,完成 局部的信息加工 。可以说,注意力像是在全局范围“通讯”,FFN 则是在每个节点“计算”。两者结合,使模型既能捕获远距离依赖,又能对每个符号位的特征做复杂变换。

具体来说,在 Transformer 中注意力输出的每个向量其实是输入向量的线性组合(通过加权和得到)。如果没有后续的非线性处理,多层注意力的堆叠仍属于加权求和的叠加,表示能力受限。FFN 子层通过 非线性激活 打破了这一线性,两个 线性层+激活 的组合可以近似任意函数。因此 Attention 提供 相关性建模FFN 提供 特征变换和非线性,两者交替叠加形成功能完备的网络结构;正是这种 “注意力+前馈”双轮驱动,让 Transformer 即使完全舍弃循环神经网络和卷积,也能高效建模序列复杂关系。

3.2 残差连接与 Layer Norm 的支持

FFN 与注意力等子层一样,外面包裹着残差连接和层归一化。这些模块本身并不改变向量的内容表达,但对于稳定训练和整合信息至关重要。残差连接 意味着 FFN 子层的输入 会和输出相加,使 本身的信息能直接短路传到更深层。这有效缓解了深层网络的退化问题,并保留了输入的一部分特征,方便梯度传播。层归一化 则对残差相加后的输出做缩放和平移,使其均值为 0、方差为 1。这在自然语言处理中比 批归一化 更适用,有助于加速收敛和提升模型稳定性。残差和归一化确保了 AttentionFFN 这两个子层能够顺畅地结合在一起工作:前者平稳地融合它们的输出与输入,后者保证数值尺度一致,避免某一子层输出分布不佳而影响整体训练。

3.3 与位置编码的配合

前面提到,FFN 自身是 “位置无关” 的,针对序列中各位置执行相同运算,不感知序列顺序信息。这一点通过 位置编码 机制得到弥补。在 Transformer 中,进入注意力和 FFN 处理之前,输入向量会加上 位置编码向量( 或通过相对位置编码融入位置关系)。这样,自注意力可以利用位置编码来区分不同位置,而 FFN 则对包含位置信息的表示做进一步非线性变换。本质上,位置相关性由 注意力+位置编码 处理,而 FFN 负责在每个位置上 消化 这些结合了位置信息的特征。当没有循环结构时,位置编码+注意力Transformer 提供了位置信息处理能力,而 FFN 则确保这种能力在每个位置上被充分利用和发挥。

总之,Transformer 各模块各司其职又相互成就:多头注意力赋予模型全局依赖建模能力,前馈网络赋予模型局部特征提取和非线性表达能力,残差连接和归一化则粘合并稳定了整个结构

4、总结

作为 Transformer 架构的 基本单元 之一,FFN 虽不像自注意力那样引人注目,却在模型中扮演着不可或缺的角色。本文我介绍了 FFN 的概念,并阐明了它在 Transformer 中的具体结构与流程:每层 Transformer 通过 多头注意力前馈网络 的串联,实现了全局信息交互与局部非线性处理的结合。FFN 独立作用于序列中每个位置,利用双线性层和非线性激活对表示进行 位置无关 的深入变换,并借助残差连接和层归一化,与注意力机制一起构建起稳定而强大的表示能力。

FFN 在模型中的作用可以概括为:增强表达(通过非线性激活和维度扩展丰富了特征表示)、处理信息(对注意力汇聚的结果做进一步的特征提取和变换),以及 提供大部分参数容量(赋予模型更大的函数拟合能力)。没有 FFNTransformer 将无法完成复杂的函数近似和模式提取;正因有了 AttentionFFN 一文一武的配合,Transformer 才能在各种任务上取得卓越表现。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 磊叔的技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、FFN 的基本概念
  • Transformer 中的 FFN 结构与流程
  • 2、FFN 在模型中的作用
    • 2.1、提供非线性变换与特征提取
    • 2.2、扩张维度提升表示能力
    • 2.3、独立处理各位置的信息
    • 2.4、充当模型的记忆单元
  • 3、FFN 与其他模块的关系
    • 3.1 与 Attention 的互补作用
    • 3.2 残差连接与 Layer Norm 的支持
    • 3.3 与位置编码的配合
  • 4、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档