自用。nlp作业整理
RNN原理
网络结构
RNN的核心特征是“循环”,它通过将隐藏层的输出反馈到输入,实现对序列信息的记忆。RNN的基本结构包括以下部分:
- 输入层:输入序列的每一个时间步数据
。
- 隐藏层:隐藏状态
,通过递归计算捕捉序列依赖性。
- 输出层:根据隐藏状态生成输出
。
RNN的隐藏状态更新公式为:
其中:
:输入到隐藏层的权重矩阵。
:隐藏层到隐藏层的权重矩阵。
:隐藏层偏置项。
:激活函数(如
或
)。
输出层的计算公式为:
其中:
:隐藏层到输出层的权重矩阵。
:输出层偏置项。
:输出层的激活函数(如
)。
时间序列的依赖性
- RNN通过递归传递隐藏状态
,可以捕捉序列的上下文信息。
- 隐藏状态
的动态变化使得RNN能够在序列中保留长期信息,但也可能面临梯度消失或梯度爆炸问题。
-
在RNN的标准训练方式中,权重的更新是一次性计算完所有时间步之后再更新权重矩阵,而不是逐时间步计算和更新权重。这种训练方法称为 通过时间的反向传播(Backpropagation Through Time,BPTT)。
RNN的核心优势在于能够处理序列信息并捕捉上下文依赖关系,其训练过程包括前向传播、误差反向传播和参数更新。但原始RNN在处理长序列时存在梯度问题,因此实际应用中多采用改进的变体(如LSTM、GRU)。
简单手算例子
问题描述(为了便于手算设置如下):
- 输入序列:
,长度
(两步序列)
- 目标输出:
- 每个时间步的输入和隐藏状态维度均为1
- 激活函数为:
(为了便于手算,暂时忽略非线性)
- 初始隐藏状态:
- 初始权重矩阵和偏置:
- 输入到隐藏层的权重
- 隐藏到隐藏层的权重
- 输出层权重
- 隐藏层偏置
- 输入到隐藏层的权重