1. RNN 的隐藏层是什么类型的网络?全连接还是卷积?
RNN 的隐藏层通常是**全连接(Fully Connected)**的,而不是卷积。
-
在每个时间步(timestep),RNN 单元会接收两个输入:
- 当前时刻的输入数据
- 上一时刻的隐藏状态
-
然后通过一个全连接变换(即线性变换 + 激活函数)来计算当前时刻的隐藏状态:
其中:
- :隐藏层到隐藏层的权重(体现"记忆")
- :输入到隐藏层的权重
- :偏置项
- 激活函数常用
tanh或ReLU
👉 所以,虽然 RNN 本身是一种特殊结构**(循环连接)** ,但其内部的计算本质上是全连接操作,不是卷积。
⚠️ 注意:也有结合卷积的变体,比如 Convolutional RNN (如 ConvLSTM),用于图像序列任务(如视频,用于记忆前后的图像的关系,而不仅仅用于记忆前后词的关系),但标准 RNN 使用的是全连接。
2. RNN 如何实现"状态记忆"?
这是 RNN 的核心思想 ------ 通过隐藏状态(hidden state)传递信息。
✅ 核心机制:隐藏状态
- 隐藏状态 可以看作是 RNN 的"记忆"。
- 它在每个时间步被更新,并携带了前面所有输入的信息(理论上)。
- 这个状态会被传递到下一个时间步,形成"循环"结构。
🔄 循环结构示意:
+-------+ +-------+ +-------+
x_1 ->| RNN | -> x_2 ->| RNN | -> x_3 ->| RNN | -> ...
+-------+ +-------+ +-------+
| | |
h_1 h_2 h_3
- :初始状态(通常为0)
➡️ 因此, 隐式地编码了H0时刻从到Hn时刻的历史信息。
🔁 数学表达(简化版):
这个公式中的 就是"记忆"的载体。每一步都依赖前一步的状态,从而实现了对序列的建模。
❗️存在的问题:长期依赖困难
虽然 RNN 理论上可以记住很久以前的信息,但实际上由于梯度消失/爆炸问题,它很难学习到远距离的依赖关系。
👉 解决方案:后来出现了更强大的变体,如:
- LSTM(长短期记忆网络):引入门控机制(输入门、遗忘门、输出门)来控制记忆的写入和删除。
- GRU(门控循环单元):简化版 LSTM,同样能有效捕捉长期依赖。
✅ 总结
| 问题 | 回答 |
|---|---|
| RNN 隐藏层是全连接还是卷积? | 全连接(标准 RNN) |
| RNN 如何实现状态记忆? | 通过隐藏状态 在时间步之间传递,形成循环连接,实现对序列历史的建模 |