Transformer - day01- Encode
编码器
第一步:输入嵌入(Input Embedding)
- 一张224×224的图像切成16×16的块,会得到 (224/16)² = 196 个图像块
- 如果是单通道图像,每个图像块由 16×16=256 个标量数值组成
- 输入嵌入(线性投射)
- 一个可训练的权重矩阵 W,其形状为 256 × d_model
- 输入的 196*256个标量,与 W 做矩阵乘法,矢量化
- 计算结果:(196 × 256) · (256 × d_model) = 196 × d_model
- 196 个 矢量,矢量维度 d_model
第二步:位置编码(Positional Encoding)
- (正弦和余弦函数)直接计算得出
- \(PE(pos, 2i) = sin(pos / 10000^(2i/d_model))\)
- \(PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))\)
- 其中
- PE 是编码结果,是个矩阵,维度 块长度 × d_model
- pos 是 块序号,如 第几块
- \(i=\frac{d_{model}}{2}-1\)
- 相加 \(\oplus\)
- 输入,与权重矩阵 W 做乘法,与 PE 做加法
第三步:编码 Encode(重复 6 次)
子层一:多头自注意力机制 (Multi-Head Self-Attention)
-
STEP 1 : 生成 Q、K、V 矩阵
- 引入了三个可训练的权重矩阵 \(W_q, W_k, W_v\),形状都是 (序列长度, d_model)
- 将每个输入向量 x 分别映射为三个向量 Q , K , V
-
STEP 2 : 计算注意力分数 (Attention Scores)
- \(Scores = (Q · K^T) / \sqrt{d_{model}}\)
- \(Q · K^T\):矩阵乘法,结果是 (序列长度, 序列长度) 的方阵。
- 其中第 i 行第 j 列的数值,表示序列中第 i 个词对第 j 个词的“注意力分数”
- \(\sqrt{d_{model}}\):缩放因子(除以 d_model 的平方根),防止点积数值过大导致梯度进入饱和区,让训练更稳定
-
STEP 3 : 应用 Softmax,加权聚合
- \(Attention Output = Softmax(Scores) · V\)
- Softmax(Scores):对每个查询位置(行)做 Softmax 归一化,得到概率分布
- V:用这些权重去加权求和 V 矩阵中的值向量
-
结果
- 输出矩阵,形状仍然是 (序列长度, d_model)
-
多头 (Multi-Head):并行
- 并行运行:将上述过程复制 h 份(原论文 h=8),每一份称为一个“头”(Head)
- 独立参数:每个头都有自己的 \(W_Q、W_K、W_V\) 矩阵,维度 = d_model / h,它们独立地计算各自的注意力输出
- 最终拼接:将 h 个头的输出在 d_model 维度上拼接起来,再经过一个线性投影层 \(W_O\),得到最终的多头自注意力输出
- \(W_O\) 是一个可训练矩阵,形状 (d_model × d_model),初始可随机赋值
子层二:残差连接与层归一化 (Add & Norm)
- 残差连接(Add)
- 将子层的输入(即位置编码后的 X)与子层的输出(即多头自注意力机制的输出)直接相加
- 得到 X + Attention(X)
- 有效缓解深层网络中的梯度消失问题
- 层归一化 (Norm)
- 对每一个位置独立进行的。例如,对于序列中第 pos 个位置(pos = 0, 1, ..., 195),我们会取它那个长度为 512 的向量
- 步骤:
- STEP 1 : 计算该位置的均值 (Mean)
- 对于第 pos 个位置,其向量为 \(x = [x_1, x_2, ..., x_{512}]\)
- 均值 \(μ = (x_1 + x_2 + ... + x_{512}) / 512\)
- STEP 2 : 计算该位置的方差 (Variance)
- 方差 \(σ² = [(x_1 - μ)² + (x_2 - μ)² + ... + (x_{512} - μ)²] / 512\)
- STEP 3 : 标准化 (Normalize)
- 对向量中的每个元素 \(x_i\) 做变换
- \(\hat{x_i} = \frac{(x_i - μ)}{\sqrt(σ² + ε)}\)
- 除以标准差\(σ\)时,加一个很小的 ε,如 1e-5,防止除以零
- 结果:向量里的数值,变成了均值为 0,方差为 1 的标准正态数据
- 对向量中的每个元素 \(x_i\) 做变换
- STEP 4 : 缩放和平移 (Scale & Shift) —— 关键!
- 标准化后的数据虽然稳定了,但也可能限制了模型的表达能力,因为所有值都被“压”到了同一个量级)
- 因此,层归一化引入了两个可训练的参数:
- γ (Gamma):缩放因子,形状 (d_model,),即 512 个数值
- β (Beta):平移因子,形状 (d_model,),即 512 个数值
- \(最终输出 = γ * \hat{x_i} + β\)
- STEP 1 : 计算该位置的均值 (Mean)
- 整合到一起表示:
- $ LayerNorm(x) = γ ⊙ (x - μ) / √(σ² + ε) + β$
- 其中- ⊙ 表示逐元素相乘
- μ 和 σ 是该向量自己的均值和标准差
- γ 和 β 是可训练参数
输出(编码器)
- 矩阵
- 形状:序列长 × d_model (196 × 512)
浙公网安备 33010602011771号