循环神经网络一:RNN、LSTM 与 GRU 的序列建模原理

25.1 本章导学

卷积神经网络擅长处理空间结构数据,通过局部感受野和权值共享高效提取空间特征。但现实中还有大量时序数据,比如文本、语音、视频帧、时间序列数据,它们是变长的序列,数据之间存在前后依赖关系,当前时刻的信息和历史上下文密切相关。CNN 无法天然处理变长序列,也很难建模长距离的时序依赖,循环神经网络(RNN)正是为解决序列建模问题而生。

循环神经网络引入了 “状态” 的概念,通过隐藏状态传递历史信息,每一步的输出都依赖当前输入和之前的状态,天然适配变长序列数据。在 Transformer 诞生之前,RNN 及其变体 LSTM、GRU 是序列建模的绝对主流,广泛应用于机器翻译、语音识别、文本生成、时间序列预测等场景。即使在大模型普及的今天,理解循环神经网络依然至关重要:一方面,很多低资源、端侧的序列任务依然在使用 LSTM 等轻量模型;另一方面,Transformer 的序列建模、门控机制、自回归生成等核心思想,都直接继承自 RNN 体系。不理解 RNN 的局限,就无法理解 Transformer 为什么会成为新的主流。

本章是循环神经网络的基础篇章,沿着 “问题 - 方案 - 局限” 的脉络展开。首先分析序列建模的核心挑战,对比 CNN 处理序列的固有缺陷;然后讲解基础 RNN 的循环结构、前向传播与随时间反向传播算法,深入剖析梯度消失的根源;接着详细拆解 LSTM 的三门一细胞结构,讲清它如何通过门控机制解决长距离依赖问题;再介绍简化版 GRU 的结构与优势;最后梳理 RNN 系列的固有局限,为下一章 Seq2Seq 与注意力机制做铺垫。所有知识点均配套直观的物理意义解读,避免纯公式堆砌,帮你建立序列建模的完整认知。

25.2 序列建模的核心挑战

25.2.1 序列数据的特点

序列数据最核心的特点是有序性和依赖性。顺序很重要,调换元素的顺序,语义会完全改变;同时元素之间不是独立的,当前位置的含义依赖于前面的上下文,甚至依赖后面的信息。 比如文本序列,“我喜欢吃苹果” 和 “苹果喜欢吃我”,词完全一样,顺序不同,意思天差地别;再比如 “苹果” 这个词,在 “吃苹果” 和 “用苹果手机” 两个上下文中,含义完全不同,必须结合上下文才能判断。

序列数据还有一个特点是长度不固定。不同的句子长度不同,不同的语音时长不同,模型需要能够处理任意长度的输入,而不是固定维度的输入。

25.2.2 全连接与 CNN 处理序列的缺陷

如果用全连接网络处理序列,只能把序列展平成固定长度的向量,这会带来两个问题:一是长度必须固定,无法处理变长序列;二是丢失了顺序信息,不同位置的词没有区别,模型无法利用语序信息。 用 CNN 处理序列,可以通过一维卷积提取局部特征,捕捉短距离的依赖关系。但 CNN 的感受野有限,要捕捉长距离依赖需要堆叠很多层卷积,而且卷积是等权滑动,无法根据上下文动态调整权重,对长距离依赖的建模能力很弱。

循环神经网络的设计正是针对这些问题:它通过循环状态传递历史信息,理论上可以记住任意长的历史;它天然支持变长序列,每一步的处理逻辑相同,序列长度不影响模型结构;它的权重在时间维度共享,和 CNN 的空间权值共享异曲同工,大幅减少了参数量。

25.3 基础循环神经网络 RNN

25.3.1 循环结构的核心思想

RNN 的核心是 “循环”:网络每处理一个时刻的输入,都会更新自身的隐藏状态,这个隐藏状态承载了到当前为止的所有历史信息。下一个时刻,新的输入和上一时刻的隐藏状态共同输入,得到新的隐藏状态和输出。 如果把循环展开,RNN 就是一个逐层共享权重的深度网络,每一层对应一个时刻,所有层共用同一套参数。时间步有多少,网络就有多少层,所有层的权重完全相同,这就是时间维度的权值共享。

和全连接网络相比,RNN 多了一个状态传递的路径。每个时刻的隐藏状态 h_t 的计算公式为:

\(h_t = \sigma(W_{xh} x_t + W_{hh} h_{t-1} + b_h)\) 其中 x_t 是 t 时刻的输入,h_{t-1} 是上一时刻的隐藏状态,W_xh 是输入到隐藏状态的权重,W_hh 是状态到状态的权重。 输出 o_t 则由当前隐藏状态计算得到:

\(o_t = W_{ho} h_t + b_o\)

整个结构非常简洁,同一套参数在所有时间步复用,无论序列多长,参数量都保持不变,完美适配变长序列。

25.3.2 前向传播过程

前向传播就是从左到右逐时刻计算的过程。初始时刻,隐藏状态 h_0 通常初始化为全零向量;然后依次输入每个时刻的 x,更新隐藏状态;每个时刻都可以输出对应的结果,也可以只在最后时刻输出最终结果。 根据输出形式的不同,RNN 可以适配不同的任务:输入一个输出一个,比如文本分类,输入整个序列,最后时刻输出分类结果;输入多个输出多个,比如词性标注,每个词都输出对应的词性标签;输入多个输出一个,比如时间序列预测,输入历史序列,输出下一个时刻的预测值。

25.3.3 随时间反向传播 BPTT

RNN 的训练同样使用梯度下降,参数梯度的计算叫做随时间反向传播,简称 BPTT。它的本质就是把 RNN 按时间步展开,变成一个多层共享权重的深度网络,然后用普通的反向传播计算梯度。 因为所有时间步共享权重,所以最终的梯度是每个时间步梯度的累加。权重 W_hh 的梯度,需要从最后一个时刻,一步步反向传播到第一个时刻,每经过一个时间步,就要乘以一次 W_hh 的转置,再乘以激活函数的导数。

25.3.4 梯度消失与长距离依赖难题

BPTT 的特性直接导致了 RNN 的核心缺陷:长距离梯度消失。 如果 W_hh 的特征值普遍小于 1,梯度每往前传一个时间步就衰减一次,时间步长了之后,前面时刻的梯度会指数级衰减,几乎变成 0。也就是说,模型很难学到远距离的依赖关系,前面很远的信息,传到后面已经消失了。 比如长文本的指代消解,开头提到的人名,到了结尾位置,基础 RNN 根本记不住。序列越长,这个问题越严重。 同样的,如果 W_hh 的特征值大于 1,梯度会指数级增长,出现梯度爆炸,导致训练不稳定。梯度爆炸可以用梯度裁剪缓解,但梯度消失没有简单的解决方案。

梯度消失是基础 RNN 的致命缺陷,它只能捕捉短距离的依赖,比如三到五个时间步,再长就记不住了。这极大限制了 RNN 的应用场景,也催生了门控循环单元的诞生。

25.4 LSTM:长短期记忆网络

25.4.1 门控机制的核心思想

1997 年提出的长短期记忆网络 LSTM,是 RNN 最重要的改进版本,它通过引入门控机制和细胞状态,完美解决了长距离梯度消失的问题,让循环网络能够有效学习上百步的长距离依赖。 LSTM 的核心思路是:不再每次都完全覆盖隐藏状态,而是通过门来控制信息的写入、遗忘和输出。就像有三个开关:遗忘门决定之前的记忆要扔掉多少,输入门决定新的信息要写入多少,输出门决定当前要输出多少记忆。 和普通 RNN 只有一个隐藏状态不同,LSTM 有两个状态:细胞状态 c_t 负责长期记忆,缓慢更新;隐藏状态 h_t 负责短期输出,每步变化。细胞状态是长记忆的载体,信息可以在上面流动很多步都不衰减。

25.4.2 三门一细胞的结构详解

LSTM 的每个时间步有四个计算单元:三个门和一个候选细胞状态,全部由当前输入和上一时刻隐藏状态计算得到,都使用 Sigmoid 或 Tanh 激活。

第一个是遗忘门。它决定细胞状态中哪些信息需要被遗忘,输出 0 到 1 之间的数值,1 代表完全保留,0 代表完全遗忘。

\(f_t = \sigma(W_f x_t + U_f h_{t-1} + b_f)\) 遗忘门是 LSTM 非常关键的设计,它让模型可以主动丢弃不重要的历史信息,腾出空间存储新的重要信息。比如遇到新的主语时,遗忘掉旧的主语记忆。

第二个是输入门和候选细胞状态。输入门决定哪些新信息要写入细胞状态,候选细胞状态是生成的新记忆内容。

\(i_t = \sigma(W_i x_t + U_i h_{t-1} + b_i)\)

\(\tilde{c}_t = \tanh(W_c x_t + U_c h_{t-1} + b_c)\)

第三个是细胞状态更新。有了遗忘门和输入门,就可以更新细胞状态了:旧细胞状态乘以遗忘门,忘掉该忘的;加上输入门乘以候选状态,写入该记的。

\(c_t = f_t \odot c_{t-1} + i_t \odot \tilde{c}_t\) 这个更新公式非常关键:细胞状态的更新是加法形式,而不是普通 RNN 的乘法叠加。反向传播时,梯度沿着细胞状态的加法路径传递,不会因为时间步长而指数衰减,这就是 LSTM 能够解决梯度消失的核心原因。梯度可以沿着细胞状态的直通路径,无损地传递到很远的前序时刻。

第四个是输出门和隐藏状态。输出门决定细胞状态中有多少输出到隐藏状态,再经过 Tanh 激活后,乘以输出门得到当前隐藏状态。

\(o_t = \sigma(W_o x_t + U_o h_{t-1} + b_o)\)

\(h_t = o_t \odot \tanh(c_t)\) 隐藏状态是每个时刻的对外输出,用于生成最终结果,也传递给下一个时刻。

25.4.3 LSTM 为什么能解决长距离依赖

总结来看,LSTM 解决梯度消失的关键有两点: 第一,引入了独立的细胞状态,信息更新是加法形式,梯度在细胞状态上传递时不会指数衰减,相当于有一条梯度的高速公路,长距离的梯度可以顺畅流通。 第二,三个门都是自适应的,模型可以自己学习什么时候该记、什么时候该忘,而不是固定的权重变换。门的参数从数据中学习得到,不同的任务会学到不同的记忆策略。

LSTM 的出现极大拓展了循环网络的能力边界,让长序列建模成为可能。在 Transformer 出现之前,LSTM 是机器翻译、语音识别、文本生成等几乎所有序列任务的标准配置。

25.5 GRU:门控循环单元

25.5.1 简化的门控设计

LSTM 效果很好,但结构相对复杂,参数量大,训练速度慢。2014 年提出的门控循环单元 GRU,对 LSTM 做了简化,在效果接近的前提下,减少了门的数量,降低了参数量和计算量。

GRU 把细胞状态和隐藏状态合并为一个状态 h_t,门的数量从三个减为两个:更新门和重置门。 更新门 z_t 对应 LSTM 中遗忘门和输入门的组合,控制有多少旧信息保留,多少新信息写入。值越大,保留的旧信息越多。 重置门 r_t 控制有多少历史信息参与新候选状态的计算。值越小,越忽略历史信息。 候选隐藏状态由重置门控制历史信息的占比,再经过 Tanh 激活得到。 最终的隐藏状态由更新门加权旧状态和新候选状态得到:更新门接近 1 就保留旧状态,接近 0 就替换为新状态。

25.5.2 GRU 与 LSTM 的对比

GRU 比 LSTM 少一个门,参数量减少约三分之一,训练速度更快,占用内存更少。大量实验表明,在大多数任务上,GRU 和 LSTM 的效果相当,部分任务 GRU 甚至更好,因为参数少,泛化性可能更优。 一般来说,数据量大、序列复杂的任务,LSTM 的上限可能更高;数据量小、追求速度的场景,GRU 性价比更高。 二者的核心思想是一致的:通过门控机制控制信息的流动与保留,解决长距离梯度消失问题。

25.6 RNN 的重要变体

25.6.1 双向 RNN

很多序列任务中,当前位置的含义不仅依赖上文,也依赖下文。比如词性标注,一个词的词性需要结合前后文判断。普通 RNN 只能从左到右传递信息,无法利用下文信息。 双向 RNN 同时训练一个正向 RNN 和一个反向 RNN,正向从左到右提取上文信息,反向从右到左提取下文信息,每个时刻的输出是两个方向隐藏状态的拼接。 双向 RNN 能够同时利用上下文信息,在序列标注、语音识别等任务上效果远好于单向 RNN。但它只能处理完整的序列,无法用于流式生成任务,因为生成的时候是逐词输出的,看不到未来的内容。

25.6.2 多层 RNN

单层 RNN 的特征提取能力有限,可以堆叠多层 RNN,下一层的输出作为上一层的输入,形成深度循环神经网络。一般 2 到 3 层最常用,层数太多提升有限,还会增加训练难度。 多层 RNN 的每一层都有自己的隐藏状态,层与层之间是纵向传递,时间步之间是横向传递。和 CNN 的层次化特征类似,低层 RNN 提取低级的序列特征,高层提取高级的语义特征。

25.7 RNN 系列的固有局限

尽管 LSTM 和 GRU 解决了梯度消失问题,让循环网络达到了很高的水平,但它依然有无法克服的固有缺陷,这些缺陷也正是 Transformer 能够取代它的核心原因。

第一个局限是串行计算,无法并行。RNN 每个时刻的计算都依赖上一时刻的隐藏状态,必须一步一步算,不能像 CNN 那样所有位置同时计算。序列越长,计算时间越久,而且无法有效利用 GPU 的并行算力。这在大规模预训练时代是致命的缺陷,大序列、大数据下,训练速度远低于 Transformer。

第二个局限是长距离依赖依然有限。虽然 LSTM 比基础 RNN 好很多,但几百步以上的超长距离依赖,LSTM 依然很难有效建模。信息经过上百步的门控筛选,还是会逐渐丢失。超长文档建模、长对话等场景,RNN 的效果并不理想。

第三个局限是位置信息传递不直接。序列的位置信息隐含在状态传递中,远距离的相对位置很难精准建模。而 Transformer 可以通过位置编码直接注入位置信息,更加灵活高效。

正是这些局限,推动了注意力机制的诞生,最终发展出 Transformer 架构,取代了 RNN 在 NLP 领域的主导地位。但 RNN 的序列建模思想、门控机制、自回归生成模式,都被 Transformer 继承和发展。理解了 RNN 的优势与局限,才能真正理解 Transformer 的革命性在哪里。

25.8 本章小结

本章系统讲解了循环神经网络的基础原理,从基础 RNN 到门控变体,完整呈现了序列建模的技术演进。核心知识点回顾:

  1. 序列数据具有有序性、依赖性、变长的特点,CNN 和全连接网络无法高效处理;
  2. RNN 通过隐藏状态传递历史信息,时间维度权值共享,天然适配变长序列;
  3. 随时间反向传播 BPTT 会导致梯度指数衰减,基础 RNN 无法建模长距离依赖;
  4. LSTM 通过三门一细胞的门控结构,以加法形式更新细胞状态,从根本上缓解了梯度消失,大幅提升了长序列建模能力;
  5. GRU 简化了门控设计,在效果接近的前提下减少了参数量,提升了训练效率;
  6. 双向 RNN 和多层 RNN 是常用扩展,分别提升上下文建模能力和特征提取能力;
  7. RNN 存在串行无法并行、超长依赖建模不足的固有局限,这也是 Transformer 崛起的核心背景。
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐