在Transformer模型中,所有可训练(trainable)的模块构成了其核心架构,每个模块都有其特定的功能和意义,并且都包含可通过反向传播进行优化的参数。下面是对各个模块的详细阐述:
🧠 1. 词嵌入层(Embedding Layer)
🔹 功能/意义:
-
将输入的离散token(如单词或子词)映射为连续的向量表示(词向量),便于模型进行数值运算。
-
使得模型能够捕捉词汇之间的语义和语法相似性。
🔹 可训练参数:
-
一个形状为
-
V
是词汇表大小。 -
d_model
是模型的隐藏层维度(如512)。
-
例如:输入一个词的ID为 i
,则嵌入层输出该词的向量表示 E[i]
。
🧠 2. 位置编码(Positional Encoding)
🔹 功能/意义:
-
Transformer 没有像RNN那样的时序结构,因此需要显式地加入位置信息。
-
位置编码用于为模型提供序列中每个词的位置信息,使模型能够理解顺序关系。
🔹 可训练参数:
-
传统Transformer使用固定的位置编码(如正弦/余弦函数)。
-
但在现代实现中,位置编码通常是可学习的嵌入向量(learnable positional embeddings),即:
-
一个形状为
(max_seq_len, d_model)
的可学习矩阵。
-
max_seq_len
是模型支持的最大序列长度。
🧠 3. 多头注意力层(Multi-Head Attention)
🔹 功能/意义:
-
实现自注意力机制(Self-Attention),让模型在处理每个词时可以“关注”到序列中的其他词。
-
多头(Multi-Head)设计允许模型从不同表示子空间中学习不同的注意力模式,增强表达能力。
🔹 可训练参数:
每个多头注意力模块包含以下线性变换的参数:
-
查询(Query)矩阵:
W_Q ∈ R^{d_model × d_k}
-
键(Key)矩阵:
W_K ∈ R^{d_model × d_k}
-
值(Value)矩阵:
W_V ∈ R^{d_model × d_v}
-
输出线性变换矩阵:
W_O ∈ R^{d_v × d_model}
其中,d_k = d_v = d_model / h
,h
是头的数量。
所有参数在训练中通过反向传播优化。
🧠 4. 前馈神经网络(Feedforward Neural Network, FFN)
🔹 功能/意义:
-
对每个位置的表示进行非线性变换,增加模型的表达能力。
-
是一个位置共享的全连接网络,独立地作用于每个位置。
🔹 结构:
FFN(x) = max(0, xW1 + b1)W2 + b2
🔹 可训练参数:
-
两个线性变换矩阵和对应的偏置项:
-
W1 ∈ R^{d_model × d_ff}
-
b1 ∈ R^{d_ff}
-
W2 ∈ R^{d_ff × d_model}
-
b2 ∈ R^{d_model}
-
d_ff
是前馈网络的中间维度,通常为d_model的4倍。
🧠 5. 层归一化(Layer Normalization)
🔹 功能/意义:
-
对每个样本的每个位置进行标准化处理,加速训练,提升模型稳定性。
-
与Batch Norm不同,Layer Norm不依赖于batch size,更适合Transformer结构。
🔹 可训练参数:
-
两个可学习参数:
-
缩放参数(gamma):
γ ∈ R^{d_model}
-
偏移参数(beta):
β ∈ R^{d_model}
-
这些参数用于对标准化后的数据进行仿射变换(scale + shift)。
🧾 总结表格:
模块 |
功能 |
可训练参数 |
参数维度 |
是否可学习 |
词嵌入层 |
将token映射为向量 |
词嵌入矩阵 |
|
✅ 是 |
位置编码 |
提供序列位置信息 |
位置嵌入矩阵 |
|
✅ 是(learnable) |
多头注意力 |
计算注意力权重 |
Q/K/V/O矩阵及偏置 |
|
✅ 是 |
前馈网络 |
非线性变换 |
两层线性变换 |
|
✅ 是 |
层归一化 |
标准化输入 |
缩放和偏移参数 |
|
✅ 是 |
🧩 补充说明:
-
参数数量估算(以
-
Embedding:
V × 512
-
Positional Encoding:
max_seq_len × 512
-
Multi-Head Attention(每层): 约
4 × 512 × 512 = 1M+
-
FFN(每层): 约
512 × 2048 + 2048 × 512 = ~2.1M
-
LayerNorm(每层):
2 × 512 = 1024
-