循环神经网络(Recurrent Neural Network, RNN)是一种针对序列处理的神经网络。它利用序列间的循环连接,实现对序列的学习与理解。
RNN的主要特征是:
- 循环连接:RNN的隐藏层之间存在循环连接,当前时刻的输出不仅依赖当前时刻的输入,还依赖之前时刻的输出。
- 记忆效应:由于循环连接,RNN可以记住之前时刻的输入信息,实现对序列的学习和理解。
- 时刻共享权重:RNN每个时刻使用相同的权重,这简化了模型但也限制了表达能力。
- 梯度消失问题:随着时刻增加,梯度会指数衰减,导致长序列难以训练。
常用的RNN模型有:
- 循环神经网络(Vanilla RNN):最简单的RNN模型,但容易出现梯度消失问题。
- 长短期记忆网络(LSTM):引入了门控机制,可以有效缓解梯度消失问题,学习长期依赖。
- 门控循环单元(GRU):比LSTM简单但效果也很好,融合了遗忘门和输入门机制。
- 双向RNN(BRNN): Forward RNN和Backward RNN结合,以获取序列上下文信息。
- 堆叠RNN(Stacked RNN):将多个RNN堆叠,增加层数和表达能力。
RNN的工作流程是:
- 定义RNN模型及隐藏层大小、层数等 hyperparameter
- 初始化权重和偏置
- 提供序列输入x1, x2, …, xn
- 计算各时刻隐状态hn及输出yn (hn = f(hn-1, xn))
- 根据损失函数计算输出结果与真实值的误差
- 使用反向传播算法更新网络权重
- 重复3-6步,直到误差达到期望值或达到最大迭代次数
RNN在自然语言处理、语音识别、机器翻译等序列学习问题上有着广泛的应用。理解RNN有助于我们解决更加复杂的序列学习任务。