1.RNN:处理序列数据
循环神经网络是一类以序列数据为输入,在序列的演进方向进行递归,且所有节点(循环单元)按链式连接形成闭合回路的递归神经网络。
RNN的独特价值: 它能有效的处理序列数据。因为序列中,前面的输入也会影响到后面的输出。RNN相当于有了记忆功能。
缺点: 严重的短期记忆问题,长期的数据影响很小(哪怕是重要的信息)。越晚的输入影响越大,越早的输入影响越小。
变种算法LSTM和GRU等的特点:
- 长期信息可以有效的保留
- 挑选重要信息保留,不重要的信息会选择“遗忘”
1.1.为什么需要RNN?
CNN和普通的算法大都是输入和输出的一一对应,也就是一个输入得到一个输出,不同的输入之间是没有联系的。
序列数据:一串相互依赖的数据流。(考虑词序)
对于序列数据,因为要考虑词之间的依赖性、顺序,则一个输入就不够了。因此,需要RNN。
1.2.基本原理
RNN跟传统神经网络最大的区别:将前一次的输出结果,带到下一次的隐藏层中,一起训练。
下图中,输入 “time” 的时候,前面 “what” 的输出也产生了影响(隐藏层中有一半是黑色的)。以此类推,前面所有的输入都对未来的输出产生了影响,大家可以看到圆形隐藏层中包含了前面所有的颜色。当我们判断意图的时候,只需要最后一层的输出。
1.3.缺点
1.3.1.短期记忆、训练成本大
根据上图的最后一个hidden layer(下图):短期的记忆影响较大(如橙色区域),但是长期的记忆影响就很小(如黑色和绿色区域),这就是RNN存在的短期记忆问题。
RNN有短期记忆问题,无法处理很长的输入序列。而且训练RNN需要投入极大的成本。
越晚的输入影响越大,越早的输入影响越小。
1.3.2.梯度消失/爆炸
BPTT:Back propogation through time
求导过程的链太长。
太长的求导链在以tanh为激活函数(其导数值在0~1之间)的BPTT中,连乘就会使得最终的求导为0,导致梯度消失。因此,t时刻已经学习不到t-N时刻的参数了。
解决方法: LSTM、设计更好的初始参数、更换激活函数ReLU等。
1.4.LSTM:RNN的优化算法
长短期记忆(LSTM) 单位是递归神经网络的单位。由LSTM单元组成的RNN常简称为LSTM。
公共LSTM单元由单元、输入门、输出门和忘记门组成。该单元记住任意时间间隔内的值,并且三个门控制进出单元的信息流。
1.4.1.与RNN相比
- 保留较长序列数据中的重要信息,忽略不重要的信息,解决了RNN短期记忆的问题。
- 处理了在训练传统RNN时,可能遇到的梯度爆炸和消失的问题。
- 所有递归神经网络都具有神经网络的链式重复模块。
在标准的RNN中,这个重复模块具有非常简单的结构,例如只有单个tanh层。
LSTM的链式结构重复模块:不是一个单独的神经网络层,而是4个非常特殊的方式进行交互的层。而且多了一个控制长时记忆的Cell state(细胞状态)。
1.4.2.核心步骤(前向计算过程)
该小节的图中:
- 最上面 C t C_t Ct线的状态代表了长时记忆
- 最下面的 h t h_t ht线代表了工作记忆或短时记忆
门结构:用来控制增加或删除信息的程度,一般由 sigmoid函数(值域 (0,1))和向量点乘来实现。
LSTM共包含3个门结构(遗忘门、输入门、隐藏门),来控制细胞状态和隐藏状态。
- 遗忘门:确定什么样的信息要被丢弃。
决定上一时刻细胞状态 C t − 1 C_{t−1} C