1. 从零理解Transformer的核心设计
Transformer架构最早由Google团队在2017年提出,最初应用于机器翻译任务。但真正让它大放异彩的,是后来在大型语言模型(LLM)领域的应用。要理解现代LLM的工作原理,我们必须深入剖析Transformer的三大核心机制。
1.1 自注意力机制的本质
自注意力(Self-Attention)是Transformer区别于传统神经网络的最关键创新。它的核心思想是:每个词元(token)都可以直接关注输入序列中的任何其他词元,并通过计算"相关性分数"来决定关注程度。
具体实现包含三个关键步骤:
- 将每个词元的嵌入向量分别投影到查询(Q)、键(K)、值(V)三个空间
- 计算Q与所有K的点积,得到注意力分数
- 用softmax归一化分数后加权求和V向量
这种设计的精妙之处在于:
- 完全替代了RNN的序列处理方式,允许并行计算
- 动态关注不同位置的信息,解决了长距离依赖问题
- 通过多头机制(Multi-Head)可以捕捉不同类型的关联模式
实际应用中,我们会看到类似这样的注意力模式:
- 代词会高权重关注它所指代的名词
- 动词会关注其主语和宾语
- 连词会关注它所连接的两个分句
1.2 位置编码的玄机
由于自注意力机制本身不考虑词序,Transformer必须通过位置编码(Positional Encoding)来注入序列顺序信息。常见的位置编码方案包括:
-
正弦/余弦函数编码:
- 使用不同频率的正余弦函数组合
- 偶数维度用sin,奇数维度用cos
- 公式:PE(pos,2i)=sin(pos/10000^(2i/d_model))
-
可学习的位置嵌入:
- 将位置索引作为可训练的参数
- 常用于处理超长序列的变体模型
位置编码必须与词嵌入维度相同,两者直接相加作为最终输入。这种设计使得模型既能理解词语的绝对位置,也能捕捉相对位置关系。
1.3 前馈网络的特殊设计
Transformer中的前馈网络(FFN)看似普通,实则暗藏玄机:
python复制class FeedForward(nn.Module):
def __init__(self, d_model, d_ff):
