文章目录
1. 为什么要使用循环神经网络?
因为全连接神经网络存在如下缺点:
- 网络没有记忆:每次网络的输出只依赖于当前的输入,不能处理输入之间有联系的数据。
- 参数太多:层与层之间全连接,层内无连接。
- 无法处理变长的序列数据,如视频、语音、文本 :因为输入和输出的维数都是固定的,不能任意改变。
其中,最主要的缺点还是第一点,输入之间没有联系,即网络没有记忆。那么如何给网络增加记忆能力? 有三种方法:
-
延时神经网络
-
自回归模型
-
循环神经网络
RNN主要用于解决输入之间具有时序关系的问题。
接下来介绍的就是其中的循环神经网络。
2. 简单循环神经网络
当隐藏层的个数不止一层时,就成了深度循环神经网络
3. 双向循环神经网络
4. 应用到机器学习
-
序列到类别模式:输入是序列,输出是类别,用于解决分类问题。比如:文本分类、情感分类等
-
同步的序列到序列模式:主要用于序列标注任务,即每一时刻都有输入和输出,输入序列和输出序列的长度相同。比如:词性标注、中文分词、信息抽取等
-
异步的序列到序列模式:也称编码器-解码器模型,即输入序列和输出序列不需要有严格的对应关系,也不需要保持相同的长度。比如:机器翻译中,输入为源语言的单词序列,输出是目标语言的单词序列。
5. 参数学习
可通过梯度下降的方法进行学习。主要有两种计算梯度的方式:
- 随时间反向传播算法(BPTT)
- 实时循环学习算法
5.1 随时间反向传播算法(BPTT)
主要思想是通过类似前馈神经网络的反向传播误差来计算梯度。过程如下:
-
前向计算激活值:在简单神经网络中提到过
-
反向传播误差
-
更新参数
6. RNN的梯度爆炸与消失、长程依赖问题
- 梯度爆炸:靠近输入层的网络层,计算的到的偏导数极其大,更新后W变成一个很大的数(爆炸)。
- 梯度消失:靠后面网络层(如layer3)能够正常的得到一个合理的偏导数,但是靠近输入层的网络层,计算的到的偏导数近乎零,参数几乎无法得到更新。
- 长程依赖问题:RNN并不能很好的处理较长的序列。一个主要的原因是,RNN在训练中很容易发生梯度爆炸和梯度消失,这导致训练时梯度不能在较长序列中一直传递下去,从而使RNN无法捕捉到长距离的影响。
那么,如何避免梯度爆炸和梯度消失,从而解决RNN的长程依赖问题?
7. 长短时记忆网络 (LSTM)
LSTM使用了三个门去控制LSTM的三个输入是否输入:
门实际上就是一层全连接层,它的输入是一个向量,输出是一个0到1之间的实数向量。
8. RNN vs CNN vs DNN
- DNN的代表是全连接神经网络,其层之间是全连接的,层内无连接。主要用于传统的机器学习,进行预测。
- CNN是卷积神经网络,其层之间是局部连接的,层内无连接。主要用于处理图像分类
- RNN是循环神经网络,其层之间是全连接的,层内是有连接的。主要用于解决时序数据的,比如语音识别、语言翻译等。