直接回答:Transformer 是一种完全基于注意力机制的序列建模架构(Vaswani et al., 2017),抛弃了循环和卷积。原始论文采用 Encoder-Decoder 结构:Encoder 由 N 层相同模块堆叠,每层含多头自注意力(Multi-Head Self-Attention)和前馈网络(FFN)两个子层;Decoder 在此基础上增加一个对 Encoder 输出的交叉注意力子层,并用因果掩码保证自回归生成、不偷看未来 token。输入侧需要 token embedding 加位置编码(正弦编码或 RoPE),因为注意力本身对词序完全不敏感,必须显式注入位置信息。
展开解析:每个子层都采用"残差连接 + LayerNorm"的结构,保证几十上百层堆叠时梯度仍能稳定回传;FFN 是两层全连接,隐藏维度通常扩展为 4 倍,现代模型多用 SwiGLU 激活并把系数调成 8/3 以保持参数量。参数量大头在 FFN(约占三分之二),而计算量随序列变长逐渐转向注意力的 O(n²) 部分。原始论文用 Post-Norm(子层输出后再归一化),深模型下需要精心设计学习率 warmup 才能收敛;现代 Decoder-only 大模型(GPT、Llama)普遍改用 Pre-Norm 并把 LayerNorm 换成 RMSNorm,训练更稳、开销更小。
# 一个 Decoder 层的计算流程(Pre-Norm 风格)
def block(x):
x = x + causal_self_attention(rms_norm(x))
x = x + ffn(rms_norm(x))
return x
追问方向:Pre-Norm 与 Post-Norm 的训练稳定性差异根源?为什么 FFN 扩展系数常取 4 或 8/3?交叉注意力在多模态模型中如何被复用?(约 500 字)