CS224d-Day 5: 什么是RNN
本文结构:
1.什么是 RNN?和NN的区别?
2.RNN 能做什么?为什么要用 RNN?
3.RNN 怎么工作的?
4.RNN 基本模型存在某些问题?
5.GRU 和 LSTM 是什么?
1.什么是 RNN?和NN的区别?
RNN-(Recurrent Neural Networks):循环神经网络
传统的神经网络模型,它是有向无环的,就是在隐藏层中各个神经元之间是没有联系的,而实际上我们的大脑并不是这样运作的,所以有了RNN模型,它在隐藏层的各个神经元之间是有相互作用的,能够处理那些输入之间前后有关联的问题。
2.RNN 能做什么?为什么要用 RNN?
RNN 在 NLP 中有广泛的应用,语言模型与文本生成(Language Modeling and Generating Text),机器翻译(Machine Translation),语音识别(Speech Recognition),图像描述生成 (Generating Image Descriptions) 等。
3.RNN 怎么工作的?
参考:深入浅出讲解 SRN
用 SRN-(Simple RNNs) 这个最简单的 RNN 模型来举例说明一下它是怎样工作的:
SRN 做的事情就是,在一个时间序列中寻找这个时间序列具有的结构。例如,给一句话,这句话是把所有词串在一起没有空格,然后 SRN 要自动学习最小单元是什么,也就是它要学习哪些是单词,怎样的切割才可以被识别成是一个单词。
具体做法就是,在每个时间点时,预测下一个时间点是什么字母,SRN 的结果就是随着时间预测结果的误差,比如说,t=0时字母是F,t=1时预测是i,那误差就会减小,直到d,误差都是一直减小,但是下一刻预测结果是S,误差就会重新升高。就这样通过 SRN 这个模型就可以得到这个时间序列是由哪些词组成的。
模型结构就是有3层,输入层隐藏层和输出层,另外还有一个语义层,语义层的内容是直接复制上一时刻隐藏层的内容,然后它会返回一个权重矩阵,t 时刻的输入层和由 t-1 隐藏层复制过来的语义层一同作用到 t 时刻的输出层。
再具体点,把这个模型的环拆成线型来理解,在 t=0 的时候,就是普通的神经网络模型,有3层,两个权重矩阵和 bias,到输出层,预测结果和目标结果计算误差,接着用 BP 去更新 W1 和 W2,但是在 t=1 的时候,就有一个语义层,是从上一个时刻的隐藏层复制过来的,然后和此刻的输入层一起作用到隐藏层,再继续得到结果,再通过 BP 去更新 W1 和 W2。一直这样下去不断地迭代 W1,W2,theta,不断地跑这个时间序列,如果串的长度不到迭代次数,就首尾相连,直到收敛停止迭代。
SRN 是由 ELMAN 提出的,他用 N 个词,造了几百个句子,然后首尾相连,放进网络进行学习,最终结果就是学到了里面的基本构成单元-单词。
用数学表达出这个模型:
4.RNN 基本模型存在某些问题?
不过这个模型有个问题,就是当想要记忆的越多时,比如想要记忆 t-1,t-2,t-3 时刻的,就需要更多的层,伴随着层数的增加,就会出现 梯度消失(vanishing gradients) 的问题,
梯度消失就是一定深度的梯度对模型更新没有帮助。
原因简述:更新模型参数的方法是反向求导,越往前梯度越小。而激活函数是 sigmoid 和 tanh 的时候,这两个函数的导数又是在两端都是无限趋近于0的,会使得之前的梯度也朝向0,最终的结果是到达一定”深度“后,梯度就对模型的更新没有任何贡献。
这篇博客中有详细的解释为何会出现这样的问题。
可以用 gradient clipping 来改善这个问题:
5.GRU 和 LSTM 是什么?
GRU:
为了解决上面的问题,让 RNN 有更好的表现,它有一些改良版模型。
GRU(Gated Recurrent Unit Recurrent Neural Networks)
GRU 对两个方面进行了改进:1. 序列中不同的位置的单词对当前的隐藏层的状态的影响不同,越前面的影响越小。2. 误差可能是由某一个或者几个单词引起的,更新权值时应该只针对相应的单词。
LSTM:
LSTM (Long Short-Term Memory,长短时记忆模型) 是目前使用最广泛的模型,它能够更好地对长短时依赖进行表达。
LSTM 与 GRU 类似,只是在隐藏层使用了不同的函数。