Transformer 中的前馈网络、残差连接与层归一化(Add & Norm)

Q1: Transformer 论文中架构的 add&norm 是什么,有什么用?
A1: “Add & Norm” 指在每个子层(注意力层、前馈层)后先进行残差连接(Add),再进行层归一化(LayerNorm),用于保持信息流通、稳定训练并加速收敛。

Q2: softmax 的作用算是归一化吗?
A2: 是的,softmax 将向量映射为概率分布(所有元素和为 1),属于指数归一化,主要用于注意力权重或分类输出。

Q3: docs/code‑dasm.md 中的代码没有 LayerNorm 吧?
A3: 虽然单独的类(PositionalEncoding、MultiHeadAttention、FeedForward)没有 LayerNorm,但在 EncoderLayer、DecoderLayer 中实现了残差后紧跟的 LayerNorm,满足 “Add & Norm”。

Q4: MultiHeadAttention 中的 self.W_q = nn.Linear(d_model, d_model, bias=False) 是什么作用?
A4: 它是查询(Query)的线性投影层,将输入特征映射到查询空间,为注意力计算提供可学习的表示。

Q5: 这行代码的作用:Q = self.W_q(Q).view(batch_size, -1, self.n_heads, self.d_k)
A5: 先对 Q 做线性投影,再 reshape 成 (batch, seq_len, n_heads, d_k),为多头注意力准备每个头的查询向量。

Q6: forward 中的 attn_output = attn_output.transpose(1, 2).contiguous().view(batch_size, -1, self.d_model) 的作用?
A6: 将多头注意力的输出从 (batch, n_heads, seq_len, d_k) 重新排列并合并头维度,恢复为 (batch, seq_len, d_model) 以便后续线性层使用。

Q7: output = self.W_o(attn_output) 的作用?
A7: 对拼接后的多头注意力结果进行线性投影(output projection),实现不同头之间的特征融合并保持维度 d_model。

Q8: FFN 前馈网络的作用是什么?
A8: 对每个位置的向量进行非线性变换,扩大特征维度后再压缩回原维度,提升模型的表达能力。

Q9: FFN 中的参数 d_ff 代表什么,一般值是多少?
A9: d_ff 是前馈网络内部隐藏层的维度,通常取 d_model 的 4 倍(如 d_model=512 → d_ff=2048)。

Q10: 使用 d_model=512、d_ff=4× 时,模型参数量能估算吗?需要哪些信息?
A10: 仅有 d_model 与 d_ff 不能完整估算,需要层数、头数、词表大小等信息才能计算总参数量。

Q11: FeedForward 前馈网络的描述是否正确?
A11: 基本正确,但正则化指的是 Dropout(对激活值随机置零),而不是对权重置零。流程为:Linear → ReLU → Dropout → Linear。

Q12: EncoderLayer 中的计算顺序是先残差再归一化吗?
A12: 正确,顺序为 Dropout → Add (残差) → LayerNorm,即 “Add & Norm”。

Q13: x = self.norm2(x + self.dropout2(ffn_output)) 的计算顺序?
A13: 先对 ffn_output 做 Dropout,再与 x 相加(残差),最后进行 LayerNorm。

Q14: Transformer 架构图中 “Add & Norm” 的先后顺序?
A14: 每个子层(注意力、前馈)都执行 Dropout → Add → LayerNorm,两次分别对应注意力层和前馈层。

Q15: 正确的顺序是 Dropout → 残差 → LayerNorm,而不是残差 → Dropout → LayerNorm。
A15: 正确,官方实现和论文均采用 Dropout → Add → LayerNorm。

简要总结
Transformer 中的每个子层都遵循 “Dropout → Add (残差) → LayerNorm” 的顺序,前馈网络通过扩展维度并加入非线性激活提升表达能力,
注意力层使用线性投影生成 Q、K、V 并在多头上并行计算,最终通过线性层融合头信息。

附录
Paper: https://arxiv.org/abs/1706.03762
Transformer‑from‑Scratch: https://github.com/Breeze648/Transformer-from-Scratch

--END--

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容