循环神经网络简介
循环神经网络概念
循环神经网络 (RNN) 是一种深度神经网络,基于顺序或时间序列数据进行训练,以创建机器学习模型,可以根据序列输入做出序列预测或结论。
循环神经网络的工作原理
与前馈和卷积神经网络 (CNN) 一样,循环神经网络利用训练数据进行学习。区别在于它们的“记忆”,因为它们从先前的输入中获取信息,用于影响当前的输入和输出。传统的深度神经网络假设输入和输出相互独立,而循环神经网络的输出则取决于序列中的先验元素。虽然未来的事件也有助于确定给定序列的输出,但单向递归神经网络无法在其预测中解释这些事件。
我们用一个俗语来辅助解释 RNN,例如 “feeling under the weather” 通常用来形容某人生病了。为了赋予这个俗语意义,需要以特定的顺序来进行表达。因此,循环网络需要考虑俗语中每个单词的位置,并利用这些信息来预测序列中的下一个单词。
在此过程中,RNN 往往会遇到两个问题,称为梯度爆炸和梯度消失。这些问题由梯度的大小决定,梯度是沿误差曲线的损失函数的斜率。当梯度过小时,它会继续变小,更新权重参数,直到它们变得微不足道,即零 (0)。出现这种情况时,算法将不再学习。梯度爆炸:梯度太大时会发生这种情况,并创建不稳定的模型。这种情况下,模型权重会变得过大,最终表示为 NaN。针对此类问题的一种解决方案是减少神经网络中的隐藏层数量,从而消除 RNN 模型中的复杂性。
循环神经网络的分类
LSTM模型
LSTM通过引入门控机制,能够更好地控制梯度的流动,从而避免了梯度消失和梯度爆炸的问题。因此,LSTM在处理长期依赖关系的序列数据时表现出色。
GRU模型
GRU(Gated recurrent unit)是RNN中的一种门机制单元,与LSTM类似,GRU有一个遗忘门(forget gate),但其没有输出门(output gate)。GRU在音乐模型、语音信号模型和NLP模型中的性能与LSTM类似,而且在一些小样本数据集表现出更有的性能。
循环神经网络实例
本实例使用numpy构建了一个rnn神经网络以及输入矩阵,并模拟了RNN网络的运作流程。运行该实例,可以打印输入矩阵的尺寸,输出矩阵的结果和尺寸以及中间状态的尺寸。
依赖安装
sudo apt install python3-numpy
文件准备
下载rnn-demo.py文件
运行demo
使用以下命令运行rnn demo文件
python rnn-demo.py
结果应如下图所示: