1. Transformer模型核心机制解析
Transformer模型自2017年由Google团队提出以来,已成为自然语言处理领域的基石架构。其核心创新在于完全摒弃了传统的循环神经网络结构,转而采用基于自注意力机制的并行化处理方式。这种设计不仅大幅提升了训练效率,更通过全局依赖建模能力显著改善了长距离语义捕捉效果。
1.1 输入预处理流程
在实际工程实现中,输入文本需要经过三个关键预处理步骤:
-
Tokenization(分词):将原始文本拆分为模型可处理的离散单元。以英文为例,现代模型通常采用Byte Pair Encoding(BPE)算法,能在保持语义完整性的同时有效控制词表大小。例如"unhappy"可能被拆分为"un"+"happy"两个子词单元。
-
Embedding(嵌入):通过查找嵌入矩阵将离散token映射为连续向量。假设我们使用512维嵌入,每个token会被转换为一个512维的浮点向量。这个过程中,语义相近的词汇会在向量空间中距离更近,例如"猫"和"犬"的向量夹角通常小于"猫"和"汽车"。
-
Positional Encoding(位置编码):由于Transformer不包含循环结构,必须显式注入位置信息。原始论文采用正弦/余弦函数生成位置编码:
$$PE_{(pos,2i)} = \sin(pos/10000^{2i/d_{model}})$$
$$PE_{(pos,2i+1)} = \cos(pos/10000^{2i/d_{model}})$$其中pos表示位置,i表示维度索引。这种编码方式既能表示绝对位置,又能通过三角函数性质捕捉相对位置关系。在实际部署中,位置编码会与词嵌入向量相加,形成最终的输入表示。
注意事项:现代大模型如GPT-3通常采用可学习的位置嵌入(learned positional embedding)而非固定函数,这在小数据场景可能增加过拟合风险,但在大数据集上表现更优。
1.2 多头注意力机制详解
注意力机制的核心思想是动态计算输入序列各部分的关联强度。给定输入矩阵X(序列长度×模型维度),其计算流程如下:
-
线性变换:通过三个可训练矩阵WQ, WK, WV(各为512×512)生成查询(Query)、键(Key)、值(Value)三组向量:
$$Q = XW_Q, K = XW_K, V = XW_V$$ -
多头拆分:将Q/K/V沿特征维度分割为h个头(原始论文h=8),每个头获得64维子空间。这种设计带来两大优势:
- 不同头可专注不同层面的特征(如语法vs语义)
- 大幅提升GPU计算并行度
-
缩放点积注意力:每个头独立计算注意力权重:
$$Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})V$$
其中分母$\sqrt{d_k}$($d_k=64$)用于防止点积结果过大导致梯度消失。 -
多头合并:将各头的输出拼接后通过线性层WO整合:
$$MultiHead = Concat(head_1,...,head_h
