怎样完整介绍Transformer、QKV和Encoder/Decoder?
从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。
