自注意力机制Self-Attention核心概念对于每个 token计算它和所有 token 的相关性用相关性加权所有 token 的特征得到当前 token 的新特征。本质将离散的token序列映射为一个全连接的图结构任意两个token之间都有一条边边的权重就是注意力得分。步骤 1生成 Q/K/V三个线性层独立把输入映射到三个不同的语义空间 - Q当前token我想找什么 - K其他token我有什么 - V其他token我是什么 注意力得分 Q和K的相似度最终输出 相似度加权V步骤 2点积计算相关性[n,d]×[d,n][n,n]Scores [i][j] 表示第 i 个 token 和第 j 个 token 的相关性步骤 3缩放Scaling维度 d_k越大点积算出来的数值就越 “爆炸”导致 Softmax 输出非 0 即 1梯度消失。除以根号 d_k就是把点积的波动强行拉回 ±1保证梯度能正常更新。步骤 4掩码Mask两种掩码最终会合并Padding Mask屏蔽输入中的 padding token无意义的填充形状[batch_size, 1, seq_len]广播后变成[batch_size, n_heads, seq_len, seq_len]Sequence MaskCausal Mask因果掩码解码器专用屏蔽未来的 token形状[1, seq_len, seq_len]广播后变成[batch_size, n_heads, seq_len, seq_len]掩码操作scores scores.masked_fill(mask0, -1e9)这样 Softmax 后权重为 0 -∞在某些GPU上会导致数值不稳定-1e9足够让Softmax后权重趋近于0步骤 5Softmax 归一化Attention WeightsSoftmax(Scores)效果权重和为 1每个 token 的注意力权重表示对其他 token 的关注程度步骤 6加权求和OutputAttention Weights⋅V维度变化([n,n] × [n,d] [n,d])和输入维度完全一致最终公式多头注意力Multi-Head Attention核心思想把 Q/K/V 拆成 h 个独立的头每个头单独做自注意力最后拼接结果让模型同时捕捉不同类型的语义依赖。数学公式前馈神经网络FFN结构两个线性层中间加 ReLU 激活FFN(x)max(0,xW1b1)W2b2残差连接 层归一化残差连接Residual ConnectionxxSublayer(x)层归一化LayerNorm两种顺序1.Post-LN原始 Transformer先做子层再加残差再做 LNxLayerNorm(xSublayer(x))2.Pre-LN现代大模型先做 LN再做子层再加残差xxSublayer(LayerNorm(x))位置编码Positional Encoding核心自注意力是排列不变的必须加位置信息告诉模型 token 的顺序正弦余弦位置编码原始 Transformerpostoken 的位置0,1,2...i特征维度的索引直接加到 token 嵌入上x Embedding(x) PE完整 Transformer 架构输入序列 → Embedding PE → 编码器×6 → 编码器输出 ↓ 输出序列 → Embedding PE → 解码器×6 → 线性层 → Softmax → 输出概率编码器层Encoder Layer输入 ↓ 多头自注意力Q/K/V都来自输入 ↓ 残差连接 LayerNorm ↓ 前馈神经网络 ↓ 残差连接 LayerNorm ↓ 输出解码器层Decoder Layer输入 ↓ 掩码多头自注意力只能看到当前和之前的token ↓ 残差连接 LayerNorm ↓ 交叉注意力Q来自解码器K/V来自编码器输出 ↓ 残差连接 LayerNorm ↓ 前馈神经网络 ↓ 残差连接 LayerNorm ↓ 输出