Transformer 前向流程与自注意力机制简述
在大语言模型(LLM)和各类基于 Transformer 的架构中,前向传播的数据流与自注意力(Self-Attention)的计算顺序是理解模型行为的基础。本文简要梳理从输入到输出的整体流程,以及自注意力中 Query、Key、Value 的交互方式,便于在阅读源码或做推理优化时建立清晰心智模型。
从输入到输出的整体流程
在推理阶段,文本经过分词、嵌入与多层 Transformer 块,最终得到每个位置的 logits 并解码为下一个 token。整体数据流可以概括为以下流程。
flowchart LR
subgraph Input
A[Raw Text] --> B[Tokenize]
B --> C[Token IDs]
end
subgraph Embed
C --> D[Embedding Layer]
D --> E[+ Positional Encoding]
E --> H[Sequence Hidden States]
end
subgraph Stack
H --> F[Transformer Block x N]
F --> F
F --> G[Hidden States]
end
subgraph Output
G --> I[LM Head / Projection]
I --> J[Logits]
J --> K[Sampling / Argmax]
K --> L[Next Token]
end
其中,Embedding Layer 将 token ID 映射为稠密向量,位置编码(或 RoPE、ALiBi 等)注入位置信息;Transformer Block × N 即多层「自注意力 + 前馈」的堆叠,每层输出与输入同形状;LM Head 通常是一个线性层,将最后一层隐藏状态映射到词表大小的 logits,再经采样或贪心得到下一个 token。理解这一条主线,有助于在调试或做 KV Cache、量化时快速定位数据所在阶段。
自注意力中的 Query、Key、Value 交互
自注意力是 Transformer 的核心。每个 token 的表示会通过线性变换得到 Query(Q)、Key(K)、Value(V),再通过 Q 与所有位置的 K 做点积得到注意力权重,对 V 加权求和得到该位置的上下文表示。多 head 时,Q、K、V 按头拆分,各自做上述运算后再拼接。从「谁在何时用谁」的角度,可以看成下面这样的调用关系。
sequenceDiagram
participant Input as Input Hidden States
participant W as Linear Q/K/V
participant Q as Query
participant K as Key
participant V as Value
participant Attn as Attention Scores
participant Out as Attention Output
Input->>W: Linear projections
W->>Q: Q = X W_q
W->>K: K = X W_k
W->>V: V = X W_v
Q->>Attn: Q K^T / sqrt(d_k)
K->>Attn: (scores)
Attn->>Attn: Softmax
Attn->>Out: weighted sum over V
V->>Out: Attention output
Out->>Out: Concat heads, output projection
解码时,为支持增量解码与 KV Cache,通常会对当前步的 Q 与已缓存的 K、V 做上述运算,因此「新算 Q,复用 K、V」是推理优化中的常见模式。
小结
前向流程可以概括为:Tokenize → Embedding(含位置)→ N 层 Transformer(自注意力 + 前馈)→ LM Head → Logits → 下一个 token。自注意力则是在每一层内,通过 Q、K、V 的线性变换与按头的注意力计算,实现序列内任意位置之间的信息聚合。掌握这两点,再结合具体模型(如 LLaMA、Qwen 等)的 RoPE、SwiGLU 等细节,就能更顺畅地阅读实现或做性能与精度分析。