计算机视觉与深度学习-Lecture7 and Lecture8
Lecture 7:Recurrent Neural Networks (RNNs) & Sequential Models
一、 RNN 核心架构与模式
RNN 是一类专为处理序列数据(Sequential Data)**设计的神经网络。与之前处理固定尺寸输入(如图像)的 CNN 不同,RNN 能够处理**可变长度的输入(如文本、音频、视频帧、时间序列),并借助隐藏状态具备对过去信息的“记忆”能力。
1. 经典输入/输出模式
| 模式 | 英文术语 | 典型应用场景 |
|---|---|---|
| 一对一 | One-to-One | 传统图像分类(CNN 标准模式,无时间轴) |
| 一对多 | One-to-Many | 图像描述(Image Captioning:输入 1 张图,输出一段描述文本) |
| 多对一 | Many-to-One | 文本情感分类(Sentiment Analysis:输入一句话,输出分类得分) |
| 多对多(同步) | Many-to-Many (Synced) | 视频帧分类(每帧实时输出一个类别标签) |
| 多对多(异步) | Many-to-Many (Async) | 机器翻译(Seq2Seq:编码器-解码器架构,输入与输出长度可不一致) |
2. 核心前向传播公式
在每个时间步(Timestep) ttt,RNN 的隐藏状态(Hidden State) hth_tht 由当前输入 xtx_txt 和前一时刻的隐藏状态 ht−1h_{t-1}ht−1 共同决定:
ht=fW(ht−1,xt)h_t = f_W(h_{t-1}, x_t)ht=fW(ht−1,xt)
Vanilla RNN 具体计算公式:
ht=tanh(Whhht−1+Wxhxt+bh)h_t = \tanh(W_{hh} h_{t-1} + W_{xh} x_t + b_h)ht=tanh(Whhht−1+Wxhxt+bh)
yt=Whyht+byy_t = W_{hy} h_t + b_yyt=Whyht+by
- 权重共享(Weight Sharing):不同时间步重复使用完全相同的参数矩阵(Whh,Wxh,WhyW_{hh}, W_{xh}, W_{hy}Whh,Wxh,Why),这保证了模型参数量不随输入序列变长而膨胀。
- 激活函数:隐藏层通常使用 tanh\tanhtanh(将值压缩至 [−1,1][-1, 1][−1,1])或 ReLU\text{ReLU}ReLU;输出层则根据任务(分类/回归)配合 Softmax 等。
二、 训练与梯度计算(Training & Backpropagation)
1. 损失计算
RNN 在每个时间步 ttt 都会产生一个局部损失 LtL_tLt。总损失为所有时间步损失的累加:
Ltotal=∑t=1TLtL_{\text{total}} = \sum_{t=1}^{T} L_tLtotal=t=1∑TLt
2. 时间反向传播(Backpropagation Through Time, BPTT)
RNN 的反向传播需要沿着时间轴反向展开。梯度的传回路径取决于时间轴的长度 TTT。
3. 截断式时间反向传播(Truncated BPTT)
针对极长序列(如上万字长文),完整 BPTT 会导致计算图过深、显存溢出(OOM)且计算极慢。
- 前向传播:将序列切分为若干小块(Chunks/Windows),处理完当前块后,将末尾的 hth_tht 作为初始状态传递给下一块(保留隐状态链条的连续性)。
- 反向传播:梯度只在当前块内部回传,不跨越块边界(控制计算复杂度与显存)。
三、 输入处理:嵌入层(Embedding Layer)
处理离散 Token(如字符或单词)时,无法直接输入原始字符串:
- 独热编码(One-Hot Encoding):维度等于词表大小 VVV,仅对应位置为 1,其余为 0。
- 数学本质:独热向量与权重矩阵相乘,本质上等同于根据索引提取权重矩阵的某一行/列。
- 工程实现(Embedding Layer):代码中通过查找表(Lookup Table)实现,跳过无意义的零乘法运算,直接将离散索引映射为低维、稠密的连续向量(Dense Embeddings)。
四、 RNN 的优缺点与梯度问题
| 优点(Advantages) | 缺点(Disadvantages) |
|---|---|
| 可处理任意长度:理论上无固定上下文长度上限(权重共享)。 | 无法并行计算:强时间依赖性导致必须串行(Sequential)计算,无法高效利用 GPU 并行能力。 |
| 理论上具备长记忆:隐藏状态传递链可无限延伸。 | 实际难以捕捉长距离依赖:遭遇严重梯度消失或梯度爆炸问题。 |
| 参数量固定:模型体积与输入序列长度无关。 |
梯度问题的解决策略
- 梯度爆炸(Exploding Gradient):使用梯度裁剪(Gradient Clipping),当梯度的 L2L_2L2 范数超过设定阈值时进行等比例缩放。
- 梯度消失(Vanishing Gradient):Vanilla RNN 的结构缺陷,催生了基于门控机制的变体(如 LSTM)。
五、 关键变体:LSTM(长短期记忆网络)
为了解决 Vanilla RNN 的“长距离记忆遗忘”与“梯度消失”,LSTM(Long Short-Term Memory)引入了门控机制(Gating Mechanism)。
1. 三大门控与细胞状态
LSTM 引入了贯穿时间轴的细胞状态(Cell State, CtC_tCt)传送带,并通过 3 个 Sigmoid 门控进行增删改查:
- 遗忘门(Forget Gate, ftf_tft):决定丢弃上一时刻细胞状态 Ct−1C_{t-1}Ct−1 中的哪些信息。
- 输入门(Input Gate, iti_tit):决定将当前输入的信息写入细胞状态 CtC_tCt 中的程度。
- 输出门(Output Gate, oto_tot):决定从更新后的 CtC_tCt 中提取多少信息作为当前隐藏状态 hth_tht。
2. 缓解梯度消失的核心原理
在普通 RNN 中,反向传播需要不断连乘权重矩阵 WhhW_{hh}Whh;而在 LSTM 中,细胞状态 CtC_tCt 的更新主要是加法与逐元素乘法:
Ct=ft⊙Ct−1+it⊙C~tC_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_tCt=ft⊙Ct−1+it⊙C~t
在反向传播时,梯度沿着 CtC_tCt 传送带回传,无需经过频繁的矩阵连乘或非线性激活函数,从而能够畅通无阻地传回早期的时刻。
六、 深入对比:LSTM 的“传送带”与 ResNet 的“跳跃连接”
| 对比维度 | ResNet(残差网络) | LSTM(长短期记忆网络) |
|---|---|---|
| 核心解决问题 | 网络空间层数过深导致的梯度消失(训练退化) | 序列时间步数过长导致的梯度消失(长距离遗忘) |
| 数学结构 | xl+1=xl+F(xl)x_{l+1} = x_l + F(x_l)xl+1=xl+F(xl) | Ct=ft⊙Ct−1+it⊙C~tC_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_tCt=ft⊙Ct−1+it⊙C~t |
| 梯度流动 | 梯度跨越中间网络层,直达浅层 | 梯度跨越中间时间步,直达早期时刻 |
| 架构本质 | 空间(层数)维度上的高速公路 | 时间(步数)维度上的传送带 |
核心启示:无论是 ResNet 还是 LSTM,本质都是通过引入加法直通路径(Identity / Additive Path),打破链式法则中的连乘效应,确保梯度能够无损传回远端。
七、 总结与现代演进
- Vanilla RNN:结构简单但极难训练,依赖梯度裁剪解决爆炸,因梯度消失逐步淘汰。
- LSTM / GRU:利用门控机制与细胞状态实现了选择性记忆,成为 Transformer 之前序列建模的标准范式。
- 现代演进(Mamba / 状态空间模型 SSM):
- Transformer 拥有并行计算与全注意力,但推理时 KV Cache 开销大(二次方复杂度)。
- 以 Mamba 为代表的选择性状态空间模型(Selective State Space Models),成功结合了 RNN 的线性时间/显存复杂度推理 与 类似 Transformer 的并行训练及动态上下文能力,代表了新一代高效序列建模的研究前沿。
Lecture 8:Attention and Transformers
一、 Attention 机制的起源与引入
在传统的基于 RNN 的编码器-解码器(Encoder-Decoder / Seq2Seq)架构中,Encoder 需要将整个输入序列压缩为一个固定长度的上下文向量 ccc(Context Vector)。这种设计导致了严重的信息瓶颈(Information Bottleneck)——随着输入序列变长,模型难以将所有远距离信息完整压缩进单一固定维度向量中。
为了打破这一瓶颈,Attention 机制被提出:允许 Decoder 在输出的每一个时间步,都能够动态地选择并关注(Attend to)输入序列的不同部分。
1. 经典 Attention(以 Additive/Bahdanau Attention 为例)计算步骤
-
计算对齐得分(Alignment Scores):
衡量 Decoder 当前隐藏状态 st−1s_{t-1}st−1 与 Encoder 各时刻隐藏状态 hih_ihi 之间的相关性:
et,i=fatt(st−1,hi)e_{t,i} = f_{\text{att}}(s_{t-1}, h_i)et,i=fatt(st−1,hi)
-
归一化注意力权重(Softmax Normalization):
对得分进行 Softmax 操作,获得满足 ∑iαt,i=1\sum_i \alpha_{t,i} = 1∑iαt,i=1 的概率分布:
αt,i=exp(et,i)∑kexp(et,k)\alpha_{t,i} = \frac{\exp(e_{t,i})}{\sum_k \exp(e_{t,k})}αt,i=∑kexp(et,k)exp(et,i)
-
加权求和生成上下文向量(Compute Context Vector):
根据注意力权重对 Encoder 的隐藏状态进行加权求和,得到当前时间步专属的上下文向量 ctc_tct:
ct=∑iαt,ihic_t = \sum_i \alpha_{t,i} h_ict=i∑αt,ihi
-
用于解码生成(Decoder Usage):
将生成的 ctc_tct 结合 Decoder 状态用于生成预测:
st=gu(yt−1,st−1,ct)s_t = g_u(y_{t-1}, s_{t-1}, c_t)st=gu(yt−1,st−1,ct)
二、 从 RNN 中抽象出的通用注意力算子(Attention Layer)
将 Attention 机制从特定的循环网络结构中解耦,可以将其抽象为一个独立的通用计算层(Attention Operator)。
注意力机制的抽象逻辑是:拿着查询向量(Query),去匹配数据中的键向量(Key),并利用计算出的相似度权重对值向量(Value)进行加权汇总,生成输出向量(Context Vector)。
1. 核心概念(Q, K, V)
- Query(查询向量 QQQ):发起寻找请求的特征表示(如 Decoder 的当前状态或自注意力中的当前 Token)。
- Key(键向量 KKK):用于被匹配的索引特征(与 Query 计算相似度)。
- Value(值向量 VVV):实际被抽取与聚合的信息内容(通常与 KKK 一一对应,输出是 VVV 的线性组合)。
2. 缩放点积注意力(Scaled Dot-Product Attention)计算过程
给定输入矩阵 XXX,通过三个可学习的参数矩阵映射得到 Q,K,VQ, K, VQ,K,V:
-
输入向量(Inputs):XXX
-
线性变换矩阵:数据键矩阵 WKW_KWK、值矩阵 WVW_VWV、查询矩阵 WQW_QWQ
具体计算步骤:
-
投影生成 Q,K,VQ, K, VQ,K,V:
Q=XWQ,K=XWK,V=XWVQ = X W_Q, \quad K = X W_K, \quad V = X W_VQ=XWQ,K=XWK,V=XWV
-
计算相似度得分矩阵 EEE:
使用点积衡量相似度,并除以 dk\sqrt{d_k}dk(缩放因子,防止向量维度 dkd_kdk 较大时点积过大导致 Softmax 梯度消失):
Eij=QiKjTdk ⟹ E=QKTdkE_{ij} = \frac{Q_i K_j^T}{\sqrt{d_k}} \implies E = \frac{Q K^T}{\sqrt{d_k}}Eij=dkQiKjT⟹E=dkQKT
-
计算注意力权重矩阵 AAA:
按行应用 Softmax 归一化:
A=Softmax(E,dim=1)A = \text{Softmax}(E, \text{dim}=1)A=Softmax(E,dim=1)
-
加权汇总生成输出 YYY:
Yi=∑jAijVj ⟹ Y=AVY_i = \sum_j A_{ij} V_j \implies Y = A VYi=j∑AijVj⟹Y=AV
三、 注意力机制的主要形式与变体
| 注意力类型 | 英文术语 | 核心特点与作用 | 典型应用 |
|---|---|---|---|
| 自注意力 | Self-Attention | Q,K,VQ, K, VQ,K,V 全部来自同一个输入序列 XXX;能够捕捉序列内部任意两点间的依赖(无视距离,不强依赖输入顺序)。 | Transformer Encoder / Decoder 内部 |
| 交叉注意力 | Cross-Attention | QQQ 来自当前序列(如 Decoder),而 K,VK, VK,V 来自另一个序列(如 Encoder 的输出)。 | 编码器-解码器架构、机器翻译 |
| 掩码注意力 | Masked Attention | 在计算 Softmax 前,将未来位置的相似度得分设为 −∞-\infty−∞(使 Aij=0A_{ij}=0Aij=0),阻止模型看到未来信息。 | 自回归生成(如 GPT 系列) |
| 多头注意力 | Multi-Head Attention | 将 Q,K,VQ, K, VQ,K,V 拆分到多个独立的投影子空间(Heads)中并行计算注意力,最后拼接输出。增强模型捕捉多维度关系的能力。 | Transformer 核心模块 |
四、 Transformer 神经网络架构
Transformer 是由 Vaswani 等人在论文 Attention Is All You Need 中提出的架构,彻底废弃了循环(RNN)和卷积(CNN)结构,完全将自注意力机制置于核心。
1. 整体模块组成与数据流向
对于输入的 Token 序列 XXX,经过词嵌入(Embedding)与位置编码(Positional Encoding)后,进入编码器/解码器层处理:
Plaintext
Input (X) ──> Self-Attention ──> Add & LayerNorm ──> MLP (Feed-Forward) ──> Add & LayerNorm ──> Output (Y)
- 输入表示(Input & Positional Encoding): 由于自注意力计算具有位置不变性(不关注输入顺序),必须显式叠加位置编码(Positional Encoding)以注入时序/位置信息。
- 自注意力层(Self-Attention): 使序列中的每个 Token 能够同时与全局其他 Token 进行交互,建立全局上下文关联。
- 前馈神经网络(MLP / Feed-Forward Network): 对每个位置的向量独立应用两层全连接网络,进行非线性变换与特征提取。
- 残差连接与层归一化(Add & Layer-Normalization): 每个子层(Self-Attention 和 MLP)均采用残差连接 x+SubLayer(x)x + \text{SubLayer}(x)x+SubLayer(x),后接 Layer Normalization,以保证深层网络训练的稳定与梯度顺畅流动。
五、 RNN 与 Transformer 的全面对比
| 对比维度 | RNN / LSTM | Transformer |
|---|---|---|
| 核心计算单元 | 循环门控单元(Recurrent Steps) | 多头自注意力机制(Multi-Head Attention) |
| 并行计算能力 | 差:强时间依赖,必须按步骤串行计算。 | 极佳:全序列矩阵运算,可高度并行于 GPU。 |
| 长距离依赖处理 | 较差:受限于梯度消失或信息遗忘。 | 极佳:任意两个 Token 间路径长度均为 O(1)O(1)O(1)。 |
| 计算复杂度(序列长度 NNN) | 时间复杂度 O(N)O(N)O(N) | 自注意力计算复杂度为 O(N2)O(N^2)O(N2)(标准 Transformer) |
| 位置感知方式 | 隐式蕴含于 Step 递进计算中 | 依赖显式的位置编码(Positional Encoding) |
六、 总结与延伸
- Attention 的本质:是一种选择性信息检索与加权聚合机制,解决了固定长度上下文向量的信息瓶颈问题。
- Transformer 的突破:通过自注意力机制取代了 RNN,实现了训练的高度并行化与全局上下文建模,奠定了现代大语言模型(LLMs)的基础。
更多推荐




所有评论(0)