RNN公式推导、案例实现及Python实现

文章目录

  • 1.RNN理论及实例计算推导
    • [1.1 理论介绍](#1.1 理论介绍)
    • [1.2 实例计算推导](#1.2 实例计算推导)
    • [1.3 RNN的几种结构](#1.3 RNN的几种结构)
      • [1.3.1 RNN的 1 to 1](#1.3.1 RNN的 1 to 1)
      • [1.3.2 RNN的 N to N](#1.3.2 RNN的 N to N)
      • [1.3.3 RNN的 N to 1](#1.3.3 RNN的 N to 1)
      • [1.3.4 RNN的 1 to N](#1.3.4 RNN的 1 to N)
      • [1.3.5 RNN的 N to M](#1.3.5 RNN的 N to M)
    • [1.4 RNN 的优缺点](#1.4 RNN 的优缺点)
  • [2.Python 实现RNN](#2.Python 实现RNN)

RNN(Recurrent Neural Network,循环神经网络)是专为序列数据(如文本、时间序列、语音)设计的神经网络,核心解决传统前馈神经网络无法捕捉 "时序依赖""变长序列" 的问题,通过 "循环传递隐藏状态" 实现对序列历史信息的记忆,也是理解LSTM以及Transformer模型的一个基础模型。下面关于RNN的基础架构 Vanilla RNN进行理论介绍以及实例计算推导,帮助"模糊"的人更清晰理解一下。

经典神经网络采用单向前馈结构,数据从输入层→隐藏层→输出层单向传递,层与层之间无反馈 / 循环连接;层内参数独立,不同层(或同一层的不同神经元)使用不同权重,无参数共享;每次输入的处理相互独立,无法利用历史信息。而循环神经网络RNN采用循环结构,隐藏层的输出不仅传递给输出层,还会反馈给自身作为下一时刻的输入,形成 "循环";所有时刻共用同一套权重;且有短期记忆能力,通过隐藏状态(h_t)累积历史信息,当前输出依赖 "当前输入 + 历史记忆"。经典神经网络与RNN的核心对比见下图:

1.RNN理论及实例计算推导

在学习RNN公式推导时,在B站看到了这个视频,分别讲解了RNN前向传播和反向传播的推导公式,很清洗。结合实例,简化一下过程

RNN循环神经网络前向与反向传播数学过程推导

1.1 理论介绍

1.2 实例计算推导


反向传播的推导

1.3 RNN的几种结构

参考文章二十张图带你彻底弄懂RNN!,RNN的几种结构主要是从输入元素数量和输出元素数量来分为以下几种。

1.3.1 RNN的 1 to 1

1.3.2 RNN的 N to N

1.3.3 RNN的 N to 1

1.3.4 RNN的 1 to N

这种结构事实上就是把x2、x3以及x4全部置零了,这种1 to N可以被用来给一个词,让他来造句。

我们也可以给同一个x,某种程度上也是1 to N:

1.3.5 RNN的 N to M

N to M要复杂一些:这种结构也是Encoder-Decoder模型,也可以称之为Seq2Seq模型。在真实的环境中,我们处理的输入和输出的长度往往是不同的,比如翻译问题,源语言和目标语言的句子往往并没有相同的长度。所以,Encoder-Decoder结构先将输入数据编码成一个上下文向量c,拿到c之后,就用另一个RNN网络对其进行解码,这部分RNN网络被称为Decoder。具体做法就是将c当做之前的初始状态h0输入到Decoder中:

1.4 RNN 的优缺点

优点
1. 天然适配序列数据,捕捉时序依赖

RNN 通过 "隐藏状态循环传递" 的设计,直接建模序列的前后关联(如文本中词的顺序、时序数据的趋势),这是传统前馈神经网络(如 CNN、全连接网络)无法实现的 ------ 前馈网络需将序列固定长度输入,且无法捕捉动态时序关系。
2. 权重共享,参数效率高

RNN 在所有时刻共享同一套权重((W_{xh})、(W_{hh})、(W_{hy})),而非为每个时刻单独设置参数。例如处理 100 步的序列,RNN 仅需 "输入→隐藏 + 隐藏→隐藏 + 隐藏→输出"3 套权重,而前馈网络需为每个时刻设计独立权重,参数数量呈线性增长。
3. 支持变长序列输入 / 输出

RNN 可处理任意长度的序列(如 10 个词的短句、100 个词的长句),且输出长度可与输入长度不同(如 Seq2Seq 架构的机器翻译:输入英文句子长度≠输出中文句子长度),适配 NLP、时序分析等领域的 "变长序列" 核心需求。
4. 结构灵活,易扩展为复合架构

RNN 可通过堆叠(深层 RNN)、双向(Bi-RNN)、编码器 - 解码器(Seq2Seq)等方式扩展,适配更复杂的序列任务:

缺点
1. 基础 RNN 存在严重的梯度消失 / 爆炸问题

基础 RNN 的隐藏状态更新依赖(\tanh)激活,梯度在反向传播时会随序列长度指数衰减(梯度消失)或指数增长(梯度爆炸)------ 超过 10 步的序列,模型几乎无法学习到早期信息的影响。
2. 并行性差,训练速度慢

RNN 的循环结构要求 "按时刻顺序计算"(t 时刻的计算依赖 t-1 时刻的隐藏状态),无法像 CNN 那样对输入数据并行处理。例如处理 100 步的序列,必须从 t=1 到 t=100 依次计算,GPU 的并行算力无法充分利用。
3. 对长序列的记忆能力仍有限(即使是 LSTM/GRU)

LSTM/GRU 虽缓解了梯度问题,但对超长篇序列(如 > 1000 步的文本、年度时序数据)仍会出现 "信息饱和"------ 细胞状态 / 隐藏状态无法无限存储信息,早期关键信息可能被后期信息覆盖。
4. 对输入噪声敏感,鲁棒性不足

RNN 的隐藏状态是 "累积式更新",若输入序列存在噪声(如时序数据的异常值、文本中的错别字),噪声会随循环传递不断放大,导致后续预测 / 输出偏差。
5. 难以捕捉长期依赖中的 "跳跃关联"

RNN 的隐藏状态按顺序传递,若序列中存在 "非连续的长距离关联"(如文本中第 1 词与第 50 词的关联),模型需逐次传递信息,易出现损耗;而 Transformer 的自注意力机制可直接捕捉任意位置的关联,效率更高。

2.Python 实现RNN

敬请期待

python 复制代码
敬请期待
相关推荐
fthux12 分钟前
RenoPit 能为普通业主做什么?看懂图纸、审查合同,提前发现装修坑
javascript·人工智能·ai·开源·github·chrome扩展·open source·edge扩展·firefox扩展
火山引擎开发者社区3 小时前
火山引擎混合云 veStack 智算平台 Day0 适配 Kimi K3
人工智能
RSABLOCKCHAIN3 小时前
AI Agents in LangGraph-2
人工智能·python
cd_949217213 小时前
哪些AI工具适合生成游戏开发用的3D道具模型?从道具草稿到引擎测试的选择方法
人工智能·3d
FII工业富联科技服务4 小时前
工业设备运维如何Agentic化?拆解Factory Brain的设备运维架构
大数据·运维·人工智能·架构·制造
WA内核拾荒者4 小时前
WhatsApp 账号异常检测的自动化告警系统设计
数据库·python·自动化
糖果店的幽灵4 小时前
人已经用 WorkBuddy 找工作拿了面试,你还在一份份手工改简历
人工智能·面试·职场和发展·langgraph
imuliuliang4 小时前
关于数据结构在算法设计中的核心作用解析7
算法
qq29534 小时前
2026 财搭子决策模拟器:多智能体投研架构能力拆解
大数据·人工智能·架构
码流怪侠4 小时前
【GitHub】Bend:让 GPU 并行编程像写 Python 一样简单
python·github