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}ht1 共同决定:

ht=fW(ht−1,xt)h_t = f_W(h_{t-1}, x_t)ht=fW(ht1,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(Whhht1+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=1TLt

2. 时间反向传播(Backpropagation Through Time, BPTT)

RNN 的反向传播需要沿着时间轴反向展开。梯度的传回路径取决于时间轴的长度 TTT

3. 截断式时间反向传播(Truncated BPTT)

针对极长序列(如上万字长文),完整 BPTT 会导致计算图过深、显存溢出(OOM)且计算极慢。

  • 前向传播:将序列切分为若干小块(Chunks/Windows),处理完当前块后,将末尾的 hth_tht 作为初始状态传递给下一块(保留隐状态链条的连续性)。
  • 反向传播梯度只在当前块内部回传,不跨越块边界(控制计算复杂度与显存)。

三、 输入处理:嵌入层(Embedding Layer)

处理离散 Token(如字符或单词)时,无法直接输入原始字符串:

  1. 独热编码(One-Hot Encoding):维度等于词表大小 VVV,仅对应位置为 1,其余为 0。
  2. 数学本质:独热向量与权重矩阵相乘,本质上等同于根据索引提取权重矩阵的某一行/列
  3. 工程实现(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}Ct1 中的哪些信息。
  • 输入门(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=ftCt1+itC~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=ftCt1+itC~t
梯度流动 梯度跨越中间网络层,直达浅层 梯度跨越中间时间步,直达早期时刻
架构本质 空间(层数)维度上的高速公路 时间(步数)维度上的传送带

核心启示:无论是 ResNet 还是 LSTM,本质都是通过引入加法直通路径(Identity / Additive Path),打破链式法则中的连乘效应,确保梯度能够无损传回远端。

七、 总结与现代演进

  1. Vanilla RNN:结构简单但极难训练,依赖梯度裁剪解决爆炸,因梯度消失逐步淘汰。
  2. LSTM / GRU:利用门控机制与细胞状态实现了选择性记忆,成为 Transformer 之前序列建模的标准范式。
  3. 现代演进(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 为例)计算步骤

  1. 计算对齐得分(Alignment Scores)

    衡量 Decoder 当前隐藏状态 st−1s_{t-1}st1 与 Encoder 各时刻隐藏状态 hih_ihi 之间的相关性:

    et,i=fatt(st−1,hi)e_{t,i} = f_{\text{att}}(s_{t-1}, h_i)et,i=fatt(st1,hi)

  2. 归一化注意力权重(Softmax Normalization)

    对得分进行 Softmax 操作,获得满足 ∑iαt,i=1\sum_i \alpha_{t,i} = 1iα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)

  3. 加权求和生成上下文向量(Compute Context Vector)

    根据注意力权重对 Encoder 的隐藏状态进行加权求和,得到当前时间步专属的上下文向量 ctc_tct

    ct=∑iαt,ihic_t = \sum_i \alpha_{t,i} h_ict=iαt,ihi

  4. 用于解码生成(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(yt1,st1,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

具体计算步骤:
  1. 投影生成 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

  2. 计算相似度得分矩阵 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=dk QiKjTE=dk QKT

  3. 计算注意力权重矩阵 AAA

    按行应用 Softmax 归一化:

    A=Softmax(E,dim=1)A = \text{Softmax}(E, \text{dim}=1)A=Softmax(E,dim=1)

  4. 加权汇总生成输出 YYY

    Yi=∑jAijVj  ⟹  Y=AVY_i = \sum_j A_{ij} V_j \implies Y = A VYi=jAijVjY=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)
  1. 输入表示(Input & Positional Encoding): 由于自注意力计算具有位置不变性(不关注输入顺序),必须显式叠加位置编码(Positional Encoding)以注入时序/位置信息。
  2. 自注意力层(Self-Attention): 使序列中的每个 Token 能够同时与全局其他 Token 进行交互,建立全局上下文关联。
  3. 前馈神经网络(MLP / Feed-Forward Network): 对每个位置的向量独立应用两层全连接网络,进行非线性变换与特征提取。
  4. 残差连接与层归一化(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)

六、 总结与延伸

  1. Attention 的本质:是一种选择性信息检索与加权聚合机制,解决了固定长度上下文向量的信息瓶颈问题。
  2. Transformer 的突破:通过自注意力机制取代了 RNN,实现了训练的高度并行化全局上下文建模,奠定了现代大语言模型(LLMs)的基础。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐