趋近智
逐位置前馈网络(FFN)是每个编码器和解码器层中的一个重要组成部分。虽然注意力机制旨在处理序列间的关联并整合来自不同位置的信息,但FFN提供额外的计算深度和非线性,对序列中的每个位置独立进行操作。
可以将注意力子层视为通信中心,允许令牌交换信息。然后,FFN则作为每个令牌的独立处理单元,转换通过注意力接收到的信息。
FFN通常是一个简单的全连接前馈网络,包含两个线性变换,中间夹有一个非线性激活函数。原始Transformer论文中,激活函数的标准选择是修正线性单元(ReLU)。
FFN在特定位置 t 的输入是来自前一个子层的输出向量 zt(无论是自注意力还是交叉注意力,且在Add & Norm步骤之后,具体取决于Post-LN或Pre-LN等层配置)。计算过程如下:
综合这些步骤,对于单个位置 t 的完整FFN操作可以表示为:
FFN(zt)=ReLU(ztW1+b1)W2+b2或者,更一般地使用 f 代表激活函数:
FFN(zt)=f(ztW1+b1)W2+b2该网络的一个重要方面是其“逐位置”应用。虽然在序列的所有位置都使用相同的FFN(指完全相同的权重矩阵 W1,W2 和偏置 b1,b2),但它被独立应用于每个位置的向量表示。
如果注意力子层后的输入序列表示是 Z=[z1,z2,...,zn],其中 n 是序列长度,则FFN计算结果为:
FFNoutput=[FFN(z1),FFN(z2),...,FFN(zn)]这与注意力机制形成鲜明对比,后者明确地建模不同位置之间的关联。FFN独立处理每个位置的表示,使得模型能够学习单个令牌表示的复杂变换,这些变换由通过注意力收集的上下文信息来辅助。
该图显示了相同的两个线性层(具有共享权重 W1,b1 和 W2,b2)和ReLU激活函数如何独立应用于每个序列位置的输入向量 (zt)。
在原始Transformer论文《Attention Is All You Need》中,模型维度 dmodel 为512,FFN的内层维度 dff 设置为2048。这种四倍扩展(dff=4×dmodel)是一种常用的启发式方法,尽管也存在变体。这种扩展使得FFN能够将表示投影到更高维空间,在那里可以更容易地学习复杂模式,然后再将其投影回标准模型维度。
从实现角度看,在每个位置独立应用相同的线性变换是计算高效的。它可以使用1x1卷积实现。如果将向量序列 Z(形状:序列长度 × dmodel)视为一个高度为1、宽度等于序列长度的“图像”,那么FFN的线性变换对应于核大小为1x1、输入通道为 dmodel、输出通道为 dff(对于第一层)或 dmodel(对于第二层)的卷积。这种形式使得深度学习框架能够利用高度优化的卷积实现,以进行跨序列长度的并行处理。
FFN子层与注意力子层一起,构成每个编码器和解码器层中的核心计算块。理解其结构和逐位置操作对于掌握Transformer如何在序列交互层面(注意力)和单个令牌层面(FFN)处理信息是必要的。此子层之后是残差连接和层归一化,我们将在接下来讨论。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造