Recurrent Neural Network (RNN)
一、什么是RNN面试
二、LSTM网络
1、什么是LSTM框架
2、LSTM框架函数
三、RNN分析学习
RNN
一、什么是RNN
- RNN能够处理序列的信息(即前面的输入对后面是有关系的)
下面经过一个订票系统的例子去说明什么是RNN:spa
1)、目标:假设咱们如今作这么一个事情,说下面一句话,系统会自动知道Taipei是目的地,November是时间3d
2)、若是没有把这句话当作一个序列,那么用前馈神经网络方法的话,这样是没有考虑到上下文的。blog
3)、所以要解决这个问题,模型须要有memory,这就引出了RNNip
RNN具体是怎么作到记忆的呢get
再看看RNN是如何解决Slot Filling的问题:
- 注意的是,下面不是三个神经网络,而是同一个神经网络
4)RNN种类
双向神经网络:在产生Y{t+1}的时候,你的network不仅是看过xt到x{t+1}全部的input,它也看了从句尾到x{t+1}的input
二、LSTM
1、什么是LSTM
- 左图中,LSTM是四输入一输出,其中有三个gate,每一个gate打开仍是关闭,都是学出来的
- 右图中,Z,Zi,Z0都是数值输入,三个gate使用的激活函数是sigmoid,因而把各个输入输出就能够用式子表示出来
举个栗子说明:
输入:三维vector[x1,x2,x3]
输出:一维vector y
下图从左到右表示更新过程,蓝色表明memory
代入LSTM中训练:(假设要训练的bias-10和weight100都已知)
2、LSTM框架
- LSTM的参数是普通神经网络的四倍
进一步揭开LSTM面纱
- 输入Xt先通过线性转化为4个vector组成的Z
多层的LSTM感觉一下
- C是memory的vector
- h是上一个LSTM神经元隐层的输出
三、RNN分析
1、RNN会出现“悬崖”(梯度消失或爆炸)问题
Total Loss对于参数的偏导的曲面是很不平整的,有不少断崖,所以会出现好几种状况:
- 第一种:1→2→3跳跃到悬崖上
- 第二种:1→2→4踩到墙脚
- 第三种:1→2→4→5加大学习率后直接飞出去
用clipping方法(当gradient大于某一个threshold的时候,不要让它超过那个threshold),当gradient大于15时,让gradient等于15结束
为何RNN会有这样的特性?是否是由于sigmoid函数会形成梯度消失?换成ReLU会不会解决这个问题?
答案是:sigmoid函数不是形成不平整的缘由,且ReLU在RNN上表现并不如sigmoid。因此activation function并非这里的关键点。
2、悬崖问题分析
如今w是咱们要学习的参数,咱们须要知道它的gradient,只要稍微改变w 的值,看看对output有多大的影响。
3、问题解决方案
面试题:LSTM为何能够解决RNN的梯度消失问题?
LSTM和RNN在处理memory cell里面的值的方式不同:
RNN每次都把新的值存到memory cell里面,旧的值被替换;
LSTM则用了input gate的计算结果与输入相乘后的值累加到memory cell里面。
思想:
- RNN每次都替换旧的值,旧的值没有办法对最后的值有所影响;
- LSTM则采用累加策略,旧的值的还在memory cell里面,也就意味旧的值还持续影响最后输出;
- 也就是说在LSTM里面,一旦对memory形成影响,那影响一直会被留着(除非forget gate要把memory的值洗掉),否则memory一旦有改变,只会把新的东西加进来,不会把原来的值洗掉,因此它不会有gradient vanishing的问题
其实LSTM的第一个版本其实就是为了解决gradient vanishing的问题,因此它是没有forget gate,forget gate是后来才加上去的。甚至,如今有个传言是:你在训练LSTM的时候,你要给forget gate特别大的bias,你要确保forget gate在多数的状况下都是开启的,只要少数的状况是关闭的