Transformer 中逐位置前馈网络 FFN 有什么作用?

考查重点:逐 Token 非线性特征转换。基础FFN对每个token独立执行线性升维→非线性→线性投影回原维,位置间共享参数,补充特征变换;token间信息混合主要来自Attention,门控FFN是另需说明的变体

本题目录

参考答案

核心回答

FFN 对每个词元的隐藏向量独立做非线性特征变换。原始 Transformer 中,它由“线性升维→非线性激活→线性投影回原维”组成,同一层中所有位置共享这套参数。它为模型补充特征加工能力,输出回到模型维度后,便于与残差分支相加。

注意力主要负责在不同位置之间交换信息,FFN 主要在单个位置的特征维度上加工。这里的“独立”指该层不直接读取其他位置,不代表输入没有上下文:前面的注意力已经把上下文信息融入了隐藏向量。

逐位置计算的维度是什么

把一个词元写成行向量 x,输入维度为 d,中间维度为 m:

FFN(x) = activation(xW1 + b1)W2 + b2

x:       d
W1:      d × m
中间结果:m
W2:      m × d
输出:    d

原论文采用 ReLU,并以512→2048→512为具体配置;四倍中间维度是这套配置,不是所有模型的固定要求。MindSpore 的编码器层也将输入维度、中间维度和激活函数分别暴露为配置。

“位置共享参数”是说这一层处理第1、第2个词元时使用相同的 W1、W2;不同层通常有各自的前馈参数,不能理解成所有层共享一套权重。多个位置可以并行计算,等价于对每个位置应用同一个函数。

中间的非线性为什么重要

如果去掉激活,两次仿射变换可以合并成一次仿射变换,额外的中间层便失去了这部分非线性表达能力。激活使模型能根据输入组合特征,再投影回原空间。

这不意味着整个注意力模块是线性的,也不意味着模型知识只存放在前馈层。这里讨论的是 FFN 自身增加的变换能力。

现代门控版本有什么不同

SwiGLU 使用两个输入投影,其中一支经过 SiLU,再逐元素相乘,最后投影回输出维度。省略偏置,按行向量写为:

SwiGLU(x) = (SiLU(xW_gate) ⊙ xW_up)W_down

它有三个权重矩阵;相同 d、m 下,权重参数量从基础两层结构的2dm变成3dm。若希望保持近似相同的参数预算,可以相应缩小门控结构的中间维度,而不能只看两者是否都叫“升维”。具体中间维度、激活与偏置,以实际模型为准。

参考资料

相关面经

1 篇

百度

AI Infra
秋招一面
查看原面经 →
Transformer中的FFN模块作用是什么?常见激活函数有哪些?不同激活函数有什么区别?

收录题集

4 个来源,共10 份题集
展开剩余 5 份题集

深度学习精华·网络架构

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

模型架构与工作原理

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

大模型原理追问

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

模型架构与注意力

Firefly · llm_interview_note · 2 条原题

查看题集 →

补充概念与机制问答

Firefly · llm_interview_note · 1 条原题

查看题集 →

相关题目

4 题