一、 RNN 的诞生时间

        RNN 的核心思想最早可追溯至 20 世纪 80 年代,但真正形成标准化架构并被广泛研究的标志是:

  1. 1982 年:物理学家 John Hopfield 提出 Hopfield 网络,这是一种循环神经网络的雏形,证明了循环结构可以存储和处理时序信息,但并非现代意义上的 RNN。

  2. 1986 年:学者 Rumelhart、Hinton 和 Williams 在论文《Learning representations by back-propagating errors》中,首次提出反向传播算法在循环结构中的应用,奠定了现代 RNN 的理论基础。

  3. 1990 年:Sepp Hochreiter 等人进一步完善了 RNN 的训练方法,解决了部分梯度问题,现代 RNN 的架构才正式确立。

        而 RNN 的核心变体 LSTM 则是在 1997 年由 Hochreiter & Schmidhuber 提出,2014 年后才大规模应用于 NLP 任务。

二、 RNN 与 CNN 的差异点

        RNN 和 CNN 均属于深度学习的经典架构,但设计目标、核心逻辑完全不同,是针对不同数据类型的并行发展路线。两者的后期发展都借鉴了注意力机制,弥补自身缺陷。

  • RNN + 注意力:解决长序列依赖的遗忘问题(如 Transformer 出现前的机器翻译模型);

  • CNN + 注意力:解决局部特征无法建模全局关联的问题(如 SENet、CBAM)。

        核心差异:解决的问题与设计逻辑不同
维度 RNN CNN

目标

数据

序列数据(文本、语音、时间序列),数据具有时序依赖(前一时刻影响后一时刻) 网格数据(图像、视频),数据具有空间局部性(相邻像素关联性强)

核心

归纳偏置

时序记忆性:通过隐藏状态迭代,利用历史信息 空间局部性 + 平移不变性:通过卷积核局部滑动,提取局部特征

计算

方式

串行计算:按时间步顺序更新,无法并行 并行计算:卷积核可同时作用于输入的所有局部区域
参数共享逻辑 时间步共享:同一套权重在所有时刻复用 空间位置共享:同一卷积核在图像所有位置复用

三、 RNN算法的核心

    1、 基础 RNN 的结构

        一个基础 RNN 模型的核心是循环结构,通过隐藏状态的迭代更新来捕捉序列数据的时序依赖,其基本结构可以拆解为 输入层、隐藏层、输出层 三部分。RNN 的本质是 “同一网络结构在不同时间步的重复”,不同的语料数据依次传递经过RNN的输入层、隐藏层和输出层。

核心特点

  • 所有时间步共享同一套权重(输入-隐藏层权重Wxh​、隐藏-隐藏层权重Whh​、隐藏-输出层权重Why​),大幅减少参数数量;Whh​ 是隐藏层到隐藏层的权重,它的作用是把上一个时间步的隐藏状态传递到当前步,当隐藏层不止一层时,也会涉及上一个隐藏层往下一个隐藏层传递的需求。

  • 隐藏层的输出 ht​ 会作为下一时刻的输入之一,实现历史信息的传递。

        2、简化版 RNN 示例

        我们以 输入 “我喜欢”,生成后续词(苹果 / 香蕉 / 橙子) 为例,核心步骤如下。前提设定:

  • 输入维度 = 3:每个词用 3 个数字表示(比如 “我”=[1,0,0],“喜欢”=[0,1,0])

  • 隐藏层维度 = 2:隐藏状态用 2 个数字表示(相当于 RNN 的 “短期记忆容量”)

  • 输出候选词:苹果、香蕉、橙子(输出维度 = 3,对应 3 个词的概率)

  • RNN 的核心规则:每一步都带着上一步的记忆,处理当前的词

        步骤 1:初始化 —— 没有记忆时,隐藏状态为 0

        处理第一个词 “我” 之前,RNN 没有任何历史信息,所以初始隐藏状态 h0​ = [0,0](2 个 0,对应隐藏层维度 = 2)。

        步骤 2:处理第一个词 “我” —— 第一次产生记忆
过程 通俗理解
输入 “我” → 转化为向量 [1,0,0](输入维度 = 3)
计算隐藏状态 h1​ RNN 把输入向量 [1,0,0] 和初始记忆 [0,0] 结合,得到新的记忆 h1​ = [0.1, 0.3] 这个记忆里只存了 “我” 的信息
输出预测y1 基于记忆 h1​,预测下一个词的概率:苹果 29%、香蕉 31%、橙子 40% 此时预测不准,因为只有 “我” 一个词的信息
        步骤 3:处理第二个词 “喜欢” —— 记忆叠加,语义整合

        这是 RNN 的核心!处理 “喜欢” 时,会带着 “我” 的记忆一起计算

过程 通俗理解
输入 “喜欢” → 转化为向量 [0,1,0](输入维度 = 3)
计算隐藏状态 h2​ RNN 把输入向量 [0,1,0] 和上一步的记忆 h1​=[0.1,0.3] 结合,得到新的记忆 h2​ = [0.24, 0.44] 这个记忆里信息同时存了 “我” 和 “喜欢” 的组合
输出预测y2 基于组合记忆 h2​,预测下一个词的概率:苹果 28%、香蕉 32%、橙子 40% 这次预测比上次更贴合 “我喜欢 XX” 的语义
        步骤 4:反向传播,梯度更新。

        梯度更新的核心目标通过计算预测值与真实值的误差,反向传播误差得到权重的梯度,再用梯度下降调整权重,让预测越来越准。

        损失函数:交叉熵损失

        RNN 的反向传播称为BPTT(时间反向传播),核心是从最后一个时间步倒着算梯度,因为每个时间步的隐藏状态都依赖前一个时间步,误差需要从后往前传递。

        我们以更新 Whh​ 为例,在 RNN 中,Whh​ 是隐藏层到隐藏层的权重,它的作用是把上一个时间步的隐藏状态传递到当前步。对于两步序列,依赖链是:Whh​→h1​→h2​→y2​→Loss。

  • h1​ 虽然在计算时,h0​ 是初始零向量(看似和 Whh​ 无关),但 Whh​ 是 h1​ 计算式的固有部分;

  • h2​ 直接依赖 h1​ 和 Whh​;

  • 最终损失 Loss 来自 y2​,而 y2​ 依赖 h2​—— 因此,Loss 对 Whh​ 的梯度,必须包含 Whh​ 对 h1​、h2​ 的所有贡献。

        3、RNN 激活函数的搭配方案

        RNN 选择激活函数的核心原则是 适配时序信号的传递与梯度稳定性,不同位置(隐藏层 / 输出层)会搭配不同的激活函数,其中隐藏层的激活函数是关键,直接影响模型的记忆能力和训练效率。

模型位置 主流激活函数 核心作用
基础 RNN 隐藏层 tanh(首选)/ ReLU(长序列) 捕捉时序依赖,保证梯度传递
LSTM/GRU 隐藏层 tanh + Sigmoid 门控机制控制信息的遗忘与保留
输出层 Softmax(多分类)/ Sigmoid(二分类)/ 线性(回归) 匹配任务输出形态

四、 基础 RNN 的局限性

        基础 RNN 的结构简单,但存在梯度消失 / 爆炸问题 —— 当序列较长时,早期时间步的梯度会随反向传播指数级衰减,导致模型无法学习长距离依赖。

        因此,后续衍生出了 LSTM、GRU 等带门控机制的变体,它们的核心是在隐藏层中加入门控单元(遗忘门、输入门、输出门等),精准控制历史信息的传递和遗忘,本质是对基础 RNN 隐藏层的改进,整体三层结构保持不变。

五、 基础 RNN 结构的核心总结

  1. 核心特征:隐藏层自循环 + 时间步权重共享,实现时序记忆;

  2. 三层结构:输入层(接收序列)→ 隐藏层(存储记忆)→ 输出层(任务输出);

  3. 关键公式:隐藏状态 ht​ 是连接历史与当前的核心,决定了 RNN 的记忆能力;

  4. 变体延伸:LSTM/GRU 是基础 RNN 的隐藏层增强版,结构框架完全兼容。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐