图解RNN\LSTM及参数分析

本文深入解析循环神经网络(RNN)和长短期记忆网络(LSTM)的结构,阐述RNN的时间序列处理能力和LSTM的门控机制。此外,还介绍了RNN的变种,包括双向RNN、深层RNN以及RNN的dropout策略,以增强网络的表达能力和训练稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

循环神经网络

经典神经网络结构如下图:

从图中可以看出,循环神经网络主体A的输入除了来自输入层的xt,还有一个循环的边来提供上一时刻的隐藏状态(hidden state)ht-1。在每一时刻,循环神经网络的模块A读取了xt和ht-1后,会生成新的隐藏状态ht,并产生本时刻输出ot。因为模块A中运算和变量在不同时刻是相同的,因此RNN理论上可以被看做是同一神经网络结构被无限复制的结果。

正如CNN在不同的空间位置参数共享,RNN是在不同的时间位置参数共享,从而能够使用有限的参数处理任意长度的序列。

将完整的输入输出序列展开,可以得到下图展示的结构:

从图中可以看到RNN对长度为N的序列展开后,可以视为一个有N个中间层的前馈神经网络。这个前馈神经网络没有循环连接,因此可以使用反向传播算法进行训练。

对于一个序列数据,可以将这个序列上不同时刻的数据依次传入RNN的输入层,而输出可以是对序列中下一时刻的预测,也可以是对当前时刻信息的处理结果。RNN要求每个时刻都要有一个输入,但不一定每个时刻都要有输出。

如前面所说,RNN可以看做是同一神经网络结构在时间序列上被复制多次的结果,这个被复制多次的结构被称为循环体。如何设计循环体的网络结构是解决问题的关键。下图展示了一个最简单的循环体结构。

RNN网络中的状态是通过一个向量来表示的,这个向量的维度也称为RNN网络隐藏层的大小,假设其为n。

以下代码简单实现了RNN的前向传播:</

### 循环神经网络(RNN)工作原理及其图解 #### RNN 的基本概念 循环神经网络(Recurrent Neural Network, RNN)是一种专为处理序列数据设计的神经网络模型。与传统的前馈神经网络不同,RNN 具有内部状态记忆能力,能够捕捉时间序列中的依赖关系[^1]。 #### 工作机制 RNN 的核心特点是其隐藏层不仅接收当前时刻的输入 \(x_t\),还接收来自上一时刻的状态 \(h_{t-1}\)。这种机制使得 RNN 能够利用先前的信息影响后续的预测结果。具体来说,在每一个时间步 \(t\) 中,RNN 执行如下操作: \[ h_t = \phi(W_x x_t + W_h h_{t-1} + b) \] 其中: - \(W_x\) 和 \(W_h\) 是权重矩阵, - \(b\) 是偏置向量, - \(\phi\) 表示激活函数(通常是非线性函数如 tanh 或 ReLU)[^3]。 通过这种方式,RNN 可以动态调整自身的参数并逐步积累上下文信息。 #### 形化表示 以下是 RNN 的典型结构展示方式: 1. **折叠形式** 折叠形式展示了整个网络作为一个整体单元运行的情况。在这种视中,可以看到单个节点接受多个时间步的数据作为输入。 2. **展开形式** 展开后的 RNN 显示了每个时间步的具体计算过程。假设有一个长度为 T 的序列,则可以将其分解成 T 个小模块依次执行运算。下面是一段 Python 实现代码片段模拟这一流程: ```python import numpy as np def rnn_cell_forward(xt, a_prev, parameters): Wax = parameters["Wax"] Waa = parameters["Waa"] ba = parameters["ba"] a_next = np.tanh(np.dot(Wax, xt) + np.dot(Waa, a_prev) + ba) return a_next # 初始化变量 np.random.seed(1) xt = np.random.randn(3, 10) # 输入特征维度为 3,样本数为 10 a_prev = np.zeros((5, 10)) # 隐藏层大小设为 5 parameters = { 'Wax': np.random.randn(5, 3), 'Waa': np.random.randn(5, 5), 'ba' : np.random.randn(5, 1)} a_next = rnn_cell_forward(xt, a_prev, parameters) print(a_next.shape) # 输出形状应为 (5, 10),对应新的隐藏状态 ``` 上述代码定义了一个简单的 RNN 单元,并演示了如何从前一个隐藏状态和当前输入更新至下一个隐藏状态。 #### 应用场景与发展历程 虽然 RNN 提供了一种有效的方法来建模顺序型数据集,但由于梯度消失等问题的存在,原始版本可能难以训练深层架构。因此后来衍生出了改进版 LSTM(Long Short-Term Memory) 和 GRU(Gated Recurrent Unit)[^4] 来解决这些问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值