QUESTION

怎样完整介绍Transformer、QKV和Encoder/Decoder?

A

从token形状开始,串起自注意力、多头注意力、FFN、残差连接以及Encoder与Decoder。

DETAILED ANSWER

直接结论

Transformer先把token编号映射成向量并加入位置信息,再通过注意力完成token之间的信息交流,通过前馈网络加工每个token的表示,并使用残差连接和LayerNorm稳定深层训练。原始Transformer由Encoder和Decoder组成。

从输入到输出

文本
→ Tokenizer分词
→ token编号
→ Embedding
→ 加入位置信息
→ 多头注意力
→ 前馈神经网络
→ 输出表示或下一个token预测

如果一句话有T个token,每个token使用D维向量表示,那么输入形状是:

[T, D]

文本变长时增加的是T;隐藏维度D由模型结构决定。token编号只是查询Embedding表的索引,编号大小本身不表示语义远近。

Q、K、V分别做什么

每个token向量经过三个线性变换得到:

  • Q:这个token想查询什么。
  • K:这个token可以用什么特征参与匹配。
  • V:匹配以后真正提供的内容。
Q × K转置
→ 得到token两两之间的相关性分数[T, T]
→ 缩放并经过Softmax
→ 得到总和为1的注意力权重
→ 权重乘V
→ 得到融合上下文后的表示[T, D]

Softmax只负责把相关性分数转换成权重。相关性来自Q和K,而生成Q、K、V的线性层参数通过训练学习。

多头注意力和FFN

多个注意力头在不同表示子空间中并行计算关系,可能分别关注语法、指代或长距离依赖。各头结果拼接后,再经过线性层整合。

FFN通常是:

线性层 → GELU或ReLU → 线性层

注意力负责不同token之间交流信息;FFN则对每个token已经收集到的信息分别加工。

残差连接和LayerNorm

残差连接可以简化为:

输出 = 子层输入 + 子层计算结果

它为原始信息和梯度提供直接路径。LayerNorm对单个token内部的隐藏特征进行归一化,不依赖batch大小,用来稳定数值分布。

补充区分:BatchNorm比较同一特征在batch内不同样本的分布;LayerNorm比较同一个样本或token内部不同隐藏特征的分布。两者都不是“除以所有数字的总和”。

Encoder和Decoder

  • Encoder自注意力:Q、K、V都来自Encoder输入。
  • Decoder掩码自注意力:Q、K、V都来自Decoder,但当前位置不能看到未来token。
  • Encoder-Decoder交叉注意力:Q来自Decoder,K和V来自Encoder输出。

BERT主要使用Encoder结构;GPT属于Decoder-only结构,使用因果掩码,只依据已有token预测下一个token。

面试口述

Transformer先通过Embedding和位置编码表示输入,再通过多头自注意力计算token之间的关系,并使用前馈网络加工每个token的表示。残差连接和LayerNorm用于稳定深层训练。原始结构包含Encoder和Decoder,Encoder负责理解输入,Decoder通过掩码自注意力和交叉注意力生成输出;BERT主要使用Encoder,GPT主要使用Decoder。