循环神经网络学习
循环神经网络
一、绪论
1. 循环神经网络的应用
- 语音问答(speech question answering)
- 机器翻译(machine translation)
- 股票预测
- 作词机、作诗
- 模仿写论文、写代码(格式)
- 图像理解(Image caption)
- 视觉问答(visual question answering)
2. 循环神经网络VS卷积神经网络
循环神经网络所做的任务
-
特点:上下文关系(时序)
-
目标:考虑更多的上下文
RNN和CNN的区别:
-
传统神经网络,卷积神经网络,输入输出之间是相互独立的
-
RNN可以更好的处理具有时序关系的任务
-
RNN通过其循环结构引入“记忆”的概念
-
RNN输出不仅依赖于输入,还依赖“记忆”;将同一个结构循环利用
二、基本组成结构
1. 基本结构
隐层的数据被存入到一个“记忆”单元中;
存在“记忆”中的数据会被作为另外一个输入与原始输入一起输入到神经网络中。
-
f是不断重复利用的
-
模型所需要学习的参数是固定的
-
无论输入的长度是多少,只需要一个函数f
-
隐层状态h可以被看作是“记忆”,它包含了之前时间点上的相关信息
-
输出y不仅由当前的输入所决定,还会考虑到之前的“记忆”
-
RNN在不同时刻共享同一组参数(U,W,V),加大的减少了需要训练和预估的参数量
2. 深度RNN
3. 双向RNN
结构:
优势:
当需要判断一个词的语义时,需要从整个句子的角度进行判断,因此需要正向RNN接收所有输入后,再反向回顾整个句子的语义,从而判断该词语在本次输入(语句)中的语义。
4. BPTT算法
-
BP算法
可能会出现梯度消失的问题。
-
BPTT算法
通过链式求导后:
三、循环神经网络的变种
1. 传统RNN
从上图中BPTT算法的链式求导过程中可得:
下图红色为tan图像,绿色为tan的导数图像:
可以得到:
所以,传统的RNN很容易出现梯度消失/梯度爆炸现象。因此,针对以上现象,采取权重衰减/梯度截断进行改进。
梯度消失会导致长时依赖问题,从而使得RNN随着时间间隔的不断增大,丧失学习到连接远距离的信息的能力。
2. LSTM(Long Short-term Memory)长短期记忆模型
LSTM拥有三个门(遗忘门,输入门,输出门),来保护和控制细胞状态
-
遗忘门(forget gate):
-
Sigmoid函数的取值范围在0~1之间,因此利用遗忘门来描述允许有多少的量通过
-
通过遗忘门来决定记忆的有无
-
**输入门(input gate):
- 先通过Sigmoid决定什么信息需要更新,然后通过tanh层输出备选的需要更新的内容,然后加入新的状态中。
- 0代表“不更新”,1代表“完全更新”
- 通过输入门记住真正需要的内容
-
输出门(output gate):
- 通过Sigmoid来确定细胞状态的哪个部分将输出出去。然后,将细胞状态通过tanh进行处理并将它和Sigmoid门的输出相乘,最终仅仅会输出我们确定输出的那部分
- 0代表”不输出“,1代表”完全输出“
- 通过输出门,判断在做下面决策时有哪些真正需要的记忆,进行输出
3. LSTM VS RNN
-
RNN和LSTM对记忆的处理方式不同
-
RNN的”记忆“在每个时间点会被新的输入覆盖,LSTM的”记忆“是与新的输入相加(线性操作)
-
LSTM:如果前边的输入对Ct产生了影响,那这个影响会一直存在,除非遗忘门的权重为0
-
LSTM中的learning rate可以被尽量的设置小
4. GRU
下图为LSTM和GRU:
差异:
- GRU只有两个门,分别为重置门和更新门
- 混合了细胞状态和隐藏状态
相似:
- 从t-1到t时刻的记忆的更新都引入加法
- 可以防止梯度消失
下图为LSTM和GRU的公式对比:
问题:GRU中的公式取消了偏置项的计算,有什么好处?
四、扩展
1. Clockwise RNN(CW-RNN)
相比较于RNN:
- CW-RNN把隐层分成很多组,每组有不同的循环周期;有的周期是1(=普通RNN),有的周期更长(例如:从前两个时间步连接到当前时间步;不同周期的cell之间也有一些连接)
- 如此,距离较远的某个依赖关系就可以通过周期较长的cell少数几次循环访问到,从而减少网络层数,容易学习。
2. 基于attention的RNN
注意力机制
示例如下:
当翻译某个词的时候,关注点不一样
- 把feature map和权重相乘,进行加和(每个channel进行一遍)
- 通过h1生成一个词,计算概率(第一次)
- 再经过h1在生成一个新的权重,然后再和feature map相乘,从而改变权重,达到改变注意力的目的。