156 lines
12 KiB
Markdown
156 lines
12 KiB
Markdown
---
|
||
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 可能专门寻找主谓宾的句法依赖(Syntax),Head 2 可能捕捉代词指代关系(Coreference),Head 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
|
||
|