大模型中的FFN和Self-Attention
FFN 层(前馈网络)是 Transformer 架构中一个至关重要的组成部分,它为模型提供了强大的非线性建模能力。它实际上是一个非常简单的多层感知机(MLP),但对模型的整体性能至关重要。
我们来详细分析一下 FFN 层的结构:两个线性投影层和一个中间的激活函数。
FFN 层的结构解析
FFN 层位于每个 Transformer 块的自注意力机制之后。其核心功能是独立地对序列中每个位置的向量进行复杂的变换。它的经典结构可以表示为:
其中:
-
x 是自注意力层的输出向量。
-
W1 是第一个线性层(向上投影)。
-
Activation 是非线性激活函数。
-
W2 是第二个线性层(向下投影)
1. 第一个线性层:向上投影(Up Projection/W1)
这个层是 FFN 过程中的扩张阶段,其主要目标是增加维度,以捕获更复杂和多样的特征组合。
-
功能: 将输入的向量维度
(模型的隐藏层维度)扩展到一个更大的维度
。
-
在许多经典 Transformer 模型中,
通常是 Dmodel 的 4 倍(例如
=768,
=3072)。
-
在最新的 LLM 中(如 Qwen、LLaMA),由于使用了 SwiGLU 激活函数,扩张比例通常是 ≈2.7 倍到 ≈3.5 倍。
-
-
物理意义: 你可以将这个过程想象成将一个简单的概念(
)分解成数个更细粒度的、潜在的特征(
),为接下来的非线性变换做准备。这个层是学习新的、高维特征表示的关键。
2. 中间的非线性激活函数(Activation)
非线性激活函数是 FFN 层的灵魂。如果没有这个函数,无论 FFN 层有多少个线性层,它们最终都只会等价于一个单一的线性变换,失去了深度学习的意义。
-
经典激活函数: ReLU(整流线性单元)或 GELU(高斯误差线性单元)。
-
现代 LLM 中的激活函数: SwiGLU(或简称 GLU 门控单元)。
-
SwiGLU 是 门控(Gated)机制的变体。它将输入 x 分成两路,一路经过线性变换后乘以另一路经过 Swish 激活函数处理后的结果。
-
优点: 引入门控机制能让信息流更有选择性地通过网络,从而提高模型的表示能力和训练稳定性。这也是为什么现代 LLM 倾向于使用 SwiGLU 来替换传统的 ReLU/GELU。
-
3. 第二个线性层:向下投影(Down Projection/W2)
这个层是 FFN 过程中的收缩阶段,其主要目标是将高维特征压缩回模型的主维度。
-
功能: 将激活函数输出的 D_intermediate 维向量收缩回模型的原始维度 D_model。
-
物理意义: 它将扩张和非线性变换后产生的复杂特征表示提炼和整合,只保留对下一个 Transformer 块最有价值的信息,然后将其输出,作为下一个自注意力层的输入(或者如果是最后一个 FFN,则作为最终的输出)。
FFN 的重要性:模型的“知识库”
FFN 层的重要性经常被低估,但它在 LLM 中扮演着两个关键角色:
-
非线性能力: FFN 通过引入激活函数,使得模型能够学习和模拟输入与输出之间的非线性关系,这是处理复杂任务所必需的。
-
知识存储: 经验研究表明,Transformer 模型所学到的大部分事实性知识和世界模型都存储在 FFN 层的权重中(特别是 W1 矩阵)。当模型在自注意力层中确定了关注的焦点后,FFN 层负责对这些焦点信息进行深入的“思考”和知识应用。
因此,在进行 LoRA/QLoRA 微调时,对 FFN 层的 Up/Down 投影层进行适配器的插入(如 target_modules='all-linear'),是确保模型能够学习并存储新领域或新任务知识的关键操作。
注意力层的结构解析
自注意力机制(Self-Attention Mechanism)的目的是计算序列中每个 token 与其他所有 token 的关联强度,并基于这些强度来加权求和,提取上下文信息。它的核心步骤可以概括为以下三个部分:
1. 线性投影(Q/K/V 投影层)
这是您前面提到的步骤,它们是线性变换。
-
X 是输入序列的表示(一个矩阵)。
-
,
,
是可学习的权重矩阵(即 Q/K/V 投影层),它们执行线性变换,将输入 X 映射到各自的向量空间。
2. 注意力得分计算(
引入非线性)
这是核心的注意力计算阶段,它通过 函数引入了关键的非线性。
-
Softmax 函数:
是一个非线性函数,它将原始的注意力得分 S 转换为概率分布,确保所有权重之和为 1。这是注意力机制中唯一也是最重要的非线性环节。
-
作用:
允许模型做出选择性的关注。例如,它可以将一个很高的得分放大,同时将其他较低的得分压缩到接近零,从而让模型“聚焦”于序列中最相关的部分。
3. 输出聚合与最终投影(V 和 O 投影层)
最后一步是使用 得到的权重 A 来加权求和 Value 矩阵 V,然后通过 Output 投影层(
)进行最终的线性变换。
-
W_O 投影层: 这又是一个线性变换(O 投影层),用于整合多头注意力(Multi-Head Attention)的结果,并将其转换回模型的主维度。
结论:注意力层的非线性在哪?
总结来说,注意力层中没有像 FFN 层那样直接插入 ReLU 或 GELU 这样的独立非线性激活层。但是,它通过以下方式实现了至关重要的非线性能力:
|
机制 |
类型 |
作用 |
|
Q/K/V/O 投影层 |
线性变换 |
学习将输入映射到最佳的 Q,K,V 空间。 |
|
Softmax 函数 |
非线性变换 |
这是注意力机制的唯一非线性来源。它将原始相似性分数转化为选择性的、概率性的关注权重,使模型能够进行有意义的上下文提取。 |
因此,注意力层是一个线性投影 → 非线性() → 线性投影的结构。正是
的存在,使得注意力机制能够从输入中“选择”并“聚合”信息,而不是简单地进行线性叠加。
更多推荐




所有评论(0)