Files
2026-05-16 17:16:51 +08:00

156 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 1-架构讲解
draft: false
tags:
- Transformer
- 注意力机制
- 架构
- 深度学习
---
![[Pasted image 20260512212750.png]
![[Pasted image 20260512212917.png]]
## 1. 架构总览与图形化解构
### 【原理描述】输入流转与位置编码
在 Transformer 抛弃了 RNN/CNN 结构后,模型本身丧失了对序列顺序的感知能力。因此,输入张量在进入主体网络前,必须完成两步:**Input Embedding**(将离散 Token 映射为连续稠密向量)与 **Positional Encoding**(注入绝对与相对位置信息)。
### 【数学推导】Positional Encoding (PE)
Transformer 采用正余弦交替函数生成固定的位置编码,公式如下:
$$
PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right)
$$
$$
PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right)
$$
**数学优越性**
1. **有界性**:正余弦函数将值域限制在 [-1, 1],保证了位置向量与词嵌入相加时不会导致数值爆炸。
2. **相对位置线性表达**:借助三角函数和角公式 $\sin(\alpha+\beta)$ 和 $\cos(\alpha+\beta)$,任意位置 $pos+k$ 的编码都可以表示为位置 $pos$ 编码的线性组合。这使得模型能够轻易学习到 Token 之间的相对距离。
### 【图形化表格】QKV 维度流转
设定序列长度为 $L$,模型维度为 $d_{model}$,单个 Attention Head 的维度为 $d_k = d_v = d_{model} / h$。
| 张量/操作 | 数学表达 | 维度变化 | 物理意义 |
|---|---|---|---|
| **输入张量** | $X$ | $L \times d_{model}$ | 包含了语义和位置信息的 Token 序列表示 |
| **Query 权重** | $W^Q$ | $d_{model} \times d_k$ | 将输入投影到“寻址”空间的变换矩阵 |
| **Key 权重** | $W^K$ | $d_{model} \times d_k$ | 将输入投影到“被寻址”空间的变换矩阵 |
| **Value 权重** | $W^V$ | $d_{model} \times d_v$ | 将输入投影到“内容”空间的变换矩阵 |
| **Query (Q)** | $Q = X W^Q$ | $L \times d_k$ | 当前 Token 的“查询意图” |
| **Key (K)** | $K = X W^K$ | $L \times d_k$ | 序列中各 Token 的“身份标签/索引” |
| **Value (V)** | $V = X W^V$ | $L \times d_v$ | 序列中各 Token 的“实际内容特征” |
### 【图形化表格】Scaled Dot-Product Attention 步进模拟
| 步进 | 操作环节 | 数学推导 | 张量维度 | 数值/物理意义 |
|---|---|---|---|---|
| **1** | **计算点积评分** | $S = Q \cdot K^T$ | $(L \times d_k) \times (d_k \times L) \rightarrow L \times L$ | 计算序列中每个 Token 对其他所有 Token 的原始相关性得分。 |
| **2** | **缩放 (Scale)** | $S' = \frac{S}{\sqrt{d_k}}$ | $L \times L$ | **关键!** 防止维度过大导致点积结果爆炸,使 Softmax 落入梯度饱和区(梯度消失)。 |
| **3** | **归一化 (Softmax)** | $A = \text{Softmax}(S')$ | $L \times L$ | 将得分转化为概率分布每行和为1明确当前 Token 应该分配多少注意力给其他 Token。 |
| **4** | **加权求和** | $O = A \cdot V$ | $(L \times L) \times (L \times d_v) \rightarrow L \times d_v$ | 根据注意力权重 $A$,按比例混合所有 Token 的 Value 信息,输出聚合后的上下文向量。 |
![[Pasted image 20260512212947.png]]
## 2. 多头注意力机制 (Multi-Head Attention - 深度解剖)
### 【原理描述】维度拆解与拼接
Transformer 并没有使用单个巨大的 Attention 矩阵,而是将其拆分。假设 $d_{model} = 512$,头数 $h = 8$,则每个头处理的维度 $d_k = 512 / 8 = 64$。
计算过程:
1. **独立投影**:每个头 $i$ 都有自己独立的 $W_i^Q, W_i^K, W_i^V$ 矩阵,对输入进行降维投影。
2. **并行计算**8个头同时执行 Scaled Dot-Product Attention产生 8 个 $L \times 64$ 的输出特征矩阵。
3. **拼接还原**:将这 8 个矩阵在最后一个维度上拼接Concat重新得到 $L \times 512$ 的张量。
4. **线性映射**:最后通过一个全连接层 $W^O$ 融合多头信息。
### 【数学推导】本质探究
$$
\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h)W^O
$$
$$
\text{其中 } \text{head}_i = \text{Attention}(Q W_i^Q, K W_i^K, V W_i^V)
$$
**为什么多头比单头好?**
单头 Attention 容易将全部权重集中在某一个强相关的特征上。多头机制本质上是将 $d_{model}$ 切分到不同的**低维特征子空间 (Low-dimensional Representation Subspaces)** 中。这允许模型同时在不同的表示空间中捕捉信息的不同侧面例如Head 1 可能专门寻找主谓宾的句法依赖SyntaxHead 2 可能捕捉代词指代关系CoreferenceHead 3 可能聚焦情感词汇Semantics
## 3. 三大 Attention 的本质区别与痛点(必答项)
### 3.1 Encoder Self-Attention (全局感知)
- **机制**Q, K, V 全部来源于 Encoder 前一层的输出。
- **本质**:完全的无向图,每个 Token 都可以毫无限制地“看”到序列的前后所有 Token借此消除长距离依赖问题构建完美的全局上下文感知。
### 3.2 Masked Self-Attention (Decoder)
- **Look-ahead Mask 形态**为了保证自回归生成的因果性Causality必须将矩阵的主对角线以上的元素遮蔽。
$$
M = \begin{bmatrix}
0 & -\infty & -\infty & \cdots & -\infty \\
0 & 0 & -\infty & \cdots & -\infty \\
0 & 0 & 0 & \cdots & -\infty \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
0 & 0 & 0 & \cdots & 0
\end{bmatrix}
$$
- **Preventing Information Leakage**:在训练阶段,我们是一次性输入整个目标序列进行并行计算的。通过在 $Q \cdot K^T$ 的结果上加上 Mask 矩阵 $M$,经过 Softmax 时,$e^{-\infty} \rightarrow 0$。这强行截断了当前词对未来词的注意力权重,完美模拟了推理阶段“只能看到已生成内容”的物理现实,防止了“答案泄露”。
### 3.3 Encoder-Decoder Cross-Attention重难点
- **原理**K 和 V 来自 Encoder 的最高层输出,而 Q 来源于 Decoder 中 Masked Self-Attention 层的输出。
- **直观逻辑(意图寻找语境)**在机器翻译中Decoder 当前正在生成的词(隐含在 Q 中)代表**当前的翻译意图** Encoder 提取的原句信息(封装在 K, V 中)代表**全局语境**。Q 拿着意图去遍历原句的标签 K找到最匹配的部分后提取出对应的真实内容 V 来指导下一个词的生成。
- **维度匹配**
假设 Encoder 输入序列长度为 $n$源语言长度Decoder 当前序列长度为 $m$(目标语言长度)。
- **注意力权重**$Q \cdot K^T \in \mathbb{R}^{m \times n}$。(这 $m \times n$ 的矩阵完美地代表了 $m$ 个目标词与 $n$ 个源词的对齐关系矩阵)。
- **最终输出**$\text{Softmax}(\dots) \cdot V \in \mathbb{R}^{m \times n} \times \mathbb{R}^{n \times d_v} \rightarrow \mathbb{R}^{m \times d_v}$。完美对齐输出维度!
## 4. 残差、归一化与前馈网络(细节填补)
### 【数学推导】Add & Norm
**Layer Normalization 公式**
$$
\text{LN}(x) = \gamma \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta
$$
其中 $\mu$ 和 $\sigma$ 是在 $d_{model}$ 这个特征维度上计算的均值和方差,$\gamma$ 和 $\beta$ 是可学习的仿射变换参数。
**对比 BN**Batch Normalization 在 Batch 维度上做归一化,这对 NLP 中长度参差不齐的序列极为不友好Pad 符会导致严重的统计噪声。LN 在单个 Token 的特征维度上进行,不受序列长度和 Batch 维度的影响,极其稳定。
### 【原理描述】Residual Connection (残差连接)
- 公式:$\text{Output} = x + \text{Sublayer}(x)$。
- **机制**:提供了恒等映射的高速公路。在深层网络中,梯度可以通过 $x$ 这条路径无损地反向传播回底层,极大地缓解了梯度消失问题,使得训练极深(如百层以上)的大语言模型成为可能。
### 【工程细节】FFN (Position-wise Feed-Forward Networks) 设计
- 公式:$\text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2$
- **升降维逻辑**:输入为 $d_{model}$,首先通过 $W_1$ 升维到 $4 \times d_{model}$(即 2048经过激活函数后再通过 $W_2$ 降维回 $d_{model}$。
- **作用**Attention 层本质上只做特征的“线性加权混合”缺乏非线性表达能力。FFN 的非线性激活函数ReLU/GELU和宽阔的中间层$4 \times d_{model}$)充当了**“记忆网络”**或**“局部特征加工厂”**的作用,对 Attention 提取出的上下文信息进行深度的非线性变换。
## 5. 训练全流程、优化与工程实践
### 【原理描述】Teacher Forcing 与并行加速
如果像 RNN 那样等待前一个词生成再预测下一个词训练速度将极其缓慢。Transformer 在 Decoder 端采用 **Teacher Forcing**:直接将 Ground Truth真实标签序列整体右移一位Shifted Right一次性输入 Decoder。借助 Mask 机制的遮挡,网络可以**高度并行**地在同一个 Batch 内计算整个序列的所有损失,效率得到了颠覆性提升。
### 【工程细节】Weight Sharing (权重共享)
在标准的 Transformer 中Input Embedding 矩阵和最后 Softmax 前的 Linear 层通常共享同一个权重矩阵 $W \in \mathbb{R}^{\text{vocab\_size} \times d_{model}}$。
**动机**Embedding 是将离散 Token 编码到连续空间,最后的 Linear 是将连续空间解码回离散 Token 概率。两者是互逆过程,共享权重不仅可以大幅减少模型参数量(防止过拟合),还能迫使模型学习到具有高度语义一致性的向量空间。
### 【数学推导】Noam Scheduler 与 Warmup
由于 Transformer 的结构特性初始阶段梯度极其不稳定。直接使用高学习率会导致模型崩溃。Noam 学习率调度策略结合了线性预热Warmup与衰减
$$
lrate = d_{model}^{-0.5} \cdot \min(step\_num^{-0.5}, step\_num \cdot warmup\_steps^{-1.5})
$$
**解析**:在最初的 $warmup\_steps$ 步内,学习率随着 $step\_num$ 线性急剧上升;到达峰值后,按 $step\_num^{-0.5}$ 的轨迹缓慢衰减。这犹如给引擎“预热”后再平稳加速,是 Transformer 能够收敛的核心 Trick 之一。
### 【优化细节】Label Smoothing
传统的 Hard Label如 $[0, 0, 1, 0]$会鼓励模型产生极端的概率分布导致模型过于自信Overconfidence陷入死记硬背。Label Smoothing 将真实分布软化:
$$
\boldsymbol{y}_{\text{true}}^{ls} = (1-\alpha)\cdot \boldsymbol{y}_{\text{onehot}} + \frac{\alpha}{V}\boldsymbol{1}
$$
通常 $\alpha = 0.1$。这相当于告诉模型:“你不仅要关注正确答案,还要分一点点注意力给其他词汇”。这种机制有效增加了不确定性,极大提升了模型在未知测试集上的泛化能力。
### 【工程实践】软硬件极限与算力刚需
Transformer 的核心痛点在于 Scaled Dot-Product Attention 的计算复杂度是 $\mathcal{O}(L^2 \cdot d_{model})$,空间复杂度(显存)同样随序列长度 $L$ 呈平方级增长。
- **物理极限**:当上下文长度扩展到 128k 甚至百万级别时,$L^2$ 的矩阵乘加MACs和显存读写带宽Memory Bandwidth将压垮普通计算架构。
- **GPU 算力支持**:这正是为何大模型训练和推理需要具备庞大显存、超高显存带宽(如 HBM3以及专门优化矩阵乘法的 Tensor Cores 的硬件。以 RTX 5070 等现代 GPU 为例,其微架构针对大规模并行矩阵运算进行了极致优化,支持 FP8/BF16 混合精度计算,这正是支撑 Transformer 从纸面走向工业神坛的底层算力引擎。
---
**相关视频:常看常新**
1. https://www.youtube.com/watch?v=wjZofJX0v4M
2. https://www.youtube.com/watch?v=zxQyTK8quyY