一、概述
循环神经网络,Recurrent Neural Network,简称RNN。是一种专门用于处理序列数据(比如时间序列、文本、语音等)的深度学习模型。与传统的神经网络不同的是,RNN具有“记忆功能”,简单理解就是能够利用之前的信息影响它的输出。
1、核心思想
RNN的设计其实是来源于人脑的处理方式。当年凯库勒梦到了蛇咬尾巴,就此发现了“苯”分子的结构,那么据a哥推断,这个RNN提出者大抵是梦到了人脑神经系统(开个小玩笑哈)。
RNN在处理序列数据时,某个时间点的输出不仅取决于当前的输入,还取决于之前的状态(也就是上下文)。想象一个最基本的RNN单元,它在每个时间步t接收两个输入,产生一个输出。大致过程:
2、输入:
x_t:当前时间步的输入,比如一个句子中某个单词的词向量
h_{t-1}:上一个时间步的隐藏状态(这是RNN“记忆”的载体)
3、计算过程:
首先将x_t和h_{t-1}进行线性变换并相加(加权求和),然后通过一个非线性激活函数(比如tanh或ReLU),得到当前时间步的隐藏状态h_t,最后h_t会有两个流向:(1)经过一个线性层(通常加softmax)得到当前时间步的输出y_pred,这个输出也就是当前时间步的预测值.(2)作为下一个时间步的输入的一部分,即变成了下一个时间步的上一个时间步的h_t。
4、数学公式:
隐藏状态更新:h_t = tanh(W_h * h_{t-1} + W_x * x_t + b)
输出计算:y_t = Softmax(W_y * h_t + b_y)
其中,W_h, W_x, W_y 分别是隐藏状态、输入、输出的权重矩阵,b, b_y 是偏置项。
5、RNN的重要特性:
参数共享:所有时间步的权重矩阵w_h,w_x,w_y都是一样的,大大减少了参数量,并让模型能够处理任意长度的序列。
顺序处理:信息沿着时间轴串行流动,h_t必须等待h_{t-1}计算完成,这就导致训练和推理的速度慢,并且无法像transformer一样并行计算。
记忆的“容量瓶颈”:h_t是一个固定维度的向量,而这个h_t要存储从t=1到t的所有历史信息。这就导致随着时间推移,h_t一定会被存满。
二、经典RNN到现代变体
1、背景
经典RNN有一个致命伤:长距离依赖问题。由于链式法则和反复乘以 W_h 矩阵(尤其在 tanh 或 sigmoid 激活函数下),梯度在反向传播过程中会指数级地消失或爆炸。因此,RNN很难学到时间上相隔较远的信息。a哥在这里举个形象的例子:就像是我们在通讯软件里不断层级转发一张照片,这个照片的清晰度可能会下降,RNN因为自身的结构就会出现这种弊端。
为了解决这个问题,两位大牛霍赫赖特与施密德胡伯在1997年提出了长短期记忆网络(LSTM),后来又出现了门控循环单元(GRU)。
2、LSTM
LSTM比经典RNN多了一个关键的细胞状态(Cell State) C_t,它像一条传送带,信息在上面可以很少变化地流动。LSTM通过三个精心设计的“门”来控制信息的增删:
遗忘门:决定从细胞状态 C_{t-1} 中丢弃哪些旧信息(例如,句子主语已经改变,需要忘记旧主语的性别)。
输入门:决定将哪些新的候选信息 C'_t 存入细胞状态。
更新细胞状态:结合遗忘门和输入门的结果,更新细胞状态。
C_t = f_t * C_{t-1} + i_t * C'_t
输出门:决定当前细胞状态 C_t 的哪些部分需要输出为隐藏状态 h_t。
LSTM的优势:通过门控机制和独立的细胞状态,梯度可以沿着 C_t 这条“高速公路”通畅地流动,有效缓解了长距离依赖问题。
3、GRU
GRU是LSTM的简化版本,将LSTM的三个门合并为两个门,并合并了细胞状态和隐藏状态。它更高效,参数更少。
重置门(Reset Gate):决定如何结合当前输入 x_t 与上一隐藏状态 h_{t-1},以计算候选状态 h'_t。
更新门(Update Gate):决定保留多少旧隐藏状态 h_{t-1},以及引入多少新候选状态 h'_t。
长距离依赖仍然困难:虽然LSTM/GRU解决了梯度消失问题,但对于超长序列(如数千词的文档),其效果仍不理想。
信息容量有限:隐藏状态是固定维度的向量,无法像注意力机制那样让模型动态地“聚焦”于输入序列的任意位置。
结论:
正是这些局限,促使了Transformer架构的诞生。Transformer通过自注意力(Self-Attention) 机制,实现了完全并行化的计算,并且通过注意力权重直接捕捉任意位置之间的依赖关系,从而在绝大多数NLP任务上取代了RNN,成为了当前大模型(如GPT、BERT、LLaMA)的核心。
4、transformer
由 Google 在 2017 年的论文《Attention Is All You Need》中提出。它彻底摒弃了 RNN/LSTM 中的循环结构,完全基于自注意力机制(Self-Attention)来构建模型。
4.1核心思想
用全注意力机制取代循环结构,实现对序列的全局感知与并行化处理。
4.2关键组件
一个标准的 Transformer Encoder(编码器)主要由以下模块组成:
A. 输入与位置编码 (Input Embedding + Positional Encoding)
Embedding:将词汇映射为稠密向量。
PE:正弦/余弦函数生成的向量,注入位置信息。
B. 自注意力机制 (Scaled Dot-Product Attention)
这是最核心的组件。
C. 多头注意力 (Multi-Head Attention)
将 Q,K,V 分成多个子空间(头),分别进行注意力计算,最后拼接起来。
作用:让模型能从不同角度(如语法角度、语义角度、指代关系角度)同时关注不同的信息。
D. 前馈神经网络 (Feed-Forward Network, FFN)
在每个注意力层之后,接一个全连接的前馈网络(通常是两层线性层夹一个激活函数 ReLU/GELU)。
作用:对特征进行非线性变换和进一步整合。
E. 残差连接 (Residual Connection) & 层归一化 (Layer Normalization)
残差连接: 防止梯度消失,加速收敛。
Layer Norm:稳定训练过程,对每个样本的每个特征维度进行归一化。
F. 解码器 (Decoder) - 仅用于生成任务
Masked Self-Attention:强制模型在预测第 防止“作弊”看到未来。
Encoder-Decoder Attention:让解码器去“关注”编码器的输出,实现翻译或生成任务中的对齐。
5、对比
| 结构 | 核心思想 | 记忆机制 | 关键组件 | 优点 | 缺点 |
|---|---|---|---|---|---|
| 经典RNN | 循环连接隐藏状态 | 隐藏状态h_t | 一个非线性激活层 | 参数共享,处理变长序列 | 长距离梯度消失/爆炸 |
| LSTM | 门控机制+细胞状态 | 细胞状态C_t(信息高速路) + 隐藏状态h_t | 遗忘门、输入门、输出门、细胞状态 | 有效缓解长距离依赖 | 参数量大,计算复杂 |
GRU | 简化门控机制 | 合并后的隐藏状态h_t | 更新门、重置门 | 比LSTM更高效,参数更少 | 表达能力可能略弱于LSTM |
transformer | 去循环化和自注意力机制 | 隐形的上下文窗口 | 输入部分、编码器、解码器、输出部分 | 并行计算、克服长距离依赖问题 | 计算复杂度和内存消耗高 |