1. Transformer架构概述
Transformer模型自2017年由Vaswani等人提出以来,已成为自然语言处理领域的基石架构。与传统RNN和CNN不同,它完全基于自注意力机制,实现了对序列数据的并行处理。理解Transformer的核心在于掌握其张量流动过程——这是模型实现上下文理解的关键。
模型的核心流程可分为四个阶段:
- 输入嵌入与位置编码
- 编码器堆栈(N个相同层)
- 解码器堆栈(N个相同层)
- 输出分类
每个阶段都涉及特定的张量变换,这些变换通过矩阵运算实现信息的提取与融合。我们将重点剖析batch_size=32、序列长度=10、d_model=512的典型场景下,张量在各组件间的传递过程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 输入嵌入与位置编码
2.1 词嵌入层实现
词嵌入层将离散的token索引映射为连续的向量表示。假设词表大小为30000,每个token通过nn.Embedding层转换为512维向量:
python复制embedding = nn.Embedding(30000, 512)
input_embeddings = embedding(token_ids) # [32,10] -> [32,10,512]
这里存在两个关键设计选择:
- 词表大小决定了模型能处理的词汇量,通常BPE算法用于平衡词表覆盖与稀疏性
- 512维的嵌入空间需要足够大以编码丰富的语义信息,但过大会增加计算负担
经验提示:嵌入层通常需要乘以√d_model进行缩放,这有助于保持数值稳定性,使后续位置编码的强度与词嵌入相匹配。
2.2 位置编码原理
位置编码通过正弦/余弦函数生成绝对位置信息:
python复制pe = torch.zeros(max_len, d_model)
position = torch.arange(0, max_len).float().unsqueeze(1)
div_term = torch.exp(torch.arange(0, d_model, 2).float() * -(math.log(10000.0) / d_model))
pe[:, 0::2] = torch.sin(position * div_term) # 偶数维度
pe[:, 1
