RNN

Posted rainwelcome

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RNN相关的知识,希望对你有一定的参考价值。

目录

1. 为什么需要RNN

2. LSTM的结构

3. LSTM网络

4. RNN 的评估

5. RNN的应用

6. Attention-based model

1. 为什么需要RNN?

传统的神经网络,一个输入会对应一个输出,如果输入不变,那输出也不会变。如下,一个Tappei是属于目的地类的,但换一句话又属于出发地类。这个时候就需要神经网络具有记忆功能。

实际上,循环神经网络是一类神经网络,一类具有记忆功能的神经网络。一类把上一个训练的结果带到下一次训练的神经网络

这就是一个简单的RNN,它有一个隐层,这个隐层的输出会被带到下一次训练中,和下一次训练的输入数据共同作为网络的输入

技术图片

技术图片

技术图片

这是一个双向的RNN,这样的好处是不仅可以看到上文,还可以看到下文

技术图片

2. LSTM的结构

下面,LSTM隆重登场!

LSTM是一种RNN, 实际上,现在大家讲在做RNN的时候,其实他们指的就是在做 LSTM。 LSTM已经成为了一种标准。

这是LSTM的一个Memory Cell, 也就是一个单元:

技术图片

LSTM的一个memory cell  一共有4个输入,一个输出。

技术图片

这种网络结构的好处就是 可以控制一个词是否应该输入,上一个词的信息是否应该被遗忘以及是否应该输出

这是一个LSTM的栗子:

技术图片

技术图片

技术图片

//篇幅原因,还有几幅图就不展示了,可以前往李老师的RNN part I 的ppt里面查看。

3. LSTM网络

一个LSTM网络可以有多个memory cell (先只关注只有一层的情况)

技术图片

我们注意到,相比于上面介绍的简单的RNN,使用了LSTM的网络的参数会是前者的4倍,因为一个memory cell有4 个输入嘛。

这里李老师又提到了这种网络,他是先对输入乘以一个矩阵,把这个矩阵叫做transfomer,然后这个输入就由一个任意维的向量变成了一个n维的向量。这里的n等于memory cell 的数量。然后这个n维向量的每一维分别作为不同的memory cell 的input 输入。 同理创造另外3个n维向量,同理这些向量的每一维作为不同memory cell 相同位置的输入。

技术图片

技术图片

x^t表示 t 时刻的输入

上面这个图以及很复杂了,但实际上在做LSTM的时候,可能还要把输出和memory(他们把这个拉memory的方式叫做peephole)拉过来做输入

技术图片

通常情况下LSTM不止又一层,可能会叠5--6层。这个是叠2层的样子:

技术图片

最后,放一张图轻松一下:

技术图片

如果看不懂的话,可以回去看一看李老师的视频,讲的很清楚,一遍看不懂就看两遍。

技术图片

4. RNN的评估

RNN的代价函数就是每一个时间点的output向量和target向量的距离之和。

技术图片

RNN也是用梯度下降算法来训练的,也是用到BP算法来求偏导,不过由于RNN是对sequence 训练,所以需要考虑时间的信息,所以这里的BP算法是做了一些改变的,叫做BPTT。具体过程李老师没有讲解。

技术图片

有个不好的消息,RNN并不好训练

我们可以从这个实验数据看出,随着梯度下降算法的运行,代价函数的值是没有逐渐变小,而是剧烈波动。。。09年RNN刚出来的时候,很长一段时间,只有RNN的作者能把RNN训练好。

技术图片

后来分析发现,出现这种情况是因为代价函数的集合图形很崎岖

技术图片

那么崎岖的原因是什么呢?

李老师没有讲BPTT,我们不知道参数的梯度,所以李老师也没有从数学的角度来讲原因,这是一个实验的角度来将的为什么这么崎岖。

下面这个RNN,

当w这个参数等于1 时,最后输出为1,

当w增大一点点的时候,输出会变大很多,

当w减小一点点的时候,输出会变为接近于0

那么此时就会想,它不是梯度很大嘛,我把学习率 设置小一点就行了,

但是当w从0.99减到0.01 时,代价函数的输出都接近与0,此时梯度很小。

从这个例子可以看出,w的变化,可能造成代价函数很小的变化,可能造成天崩地裂的变化。

总结,RNN代价函数很崎岖不平时因为:同样的weight在不同的时间点会被反复地使用。

技术图片

那么如何解决gradient 时大时小的问题呢?

LSTM可以避免gradient 变化过小的问题。(但是不可以解决gradient变化过大的问题)。所以可以放心的把学习率设置的比较大。

为什么呢?

因为普通的RNN每次memory都会被重置,而LSTM每次都是memory 的值乘以某一个值再与input的值相加,所以如果weight 可以影响memory里面的值的话,这个影响会一直存在。不想RNN每次都会被format掉 。(当然这是不考虑forget的问题,一开始LSTM的版本就是为了解决gradient的gradient vanishing问题,它是没有forget gate的,现在forget的bias会设置的比较大,保证一般forget gate都不起作用)

技术图片

还有其他网络模型可以解决loss function 剧烈波动的问题,贴出来知道就行了

技术图片

5. RNN的应用:

26‘40’‘

多对一

技术图片

多对多:

技术图片

CTC模型

技术图片

多对多-不知道谁长谁短

技术图片

技术图片

sequence to sequenct

技术图片

编码器:

技术图片

不仅对sequence做编码,还对句子做编码,就问你怕不怕

技术图片

对音频的编码

编码和解码的网络时一起训练的

技术图片

6. Attention-based model

可以想想成RNN 的进阶版

技术图片

技术图片

Reference:

李宏毅,Structured Learning: Recurrent Neural Network, http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML16.html

以上是关于RNN的主要内容,如果未能解决你的问题,请参考以下文章

强烈推荐RNN 架构解析(循环神经网络)

强烈推荐RNN 架构解析(循环神经网络)

hello-循环神经网络(RNN)原理

tf.contrib.rnn.static_rnn与tf.nn.dynamic_rnn区别

RNN经典案例使用RNN模型构建人名分类器(RNN实战-姓名分类)

RNN经典案例使用RNN模型构建人名分类器(RNN实战-姓名分类)