深度学习——RNN和LSTM

学习*大学李宏毅教授的课程做的相关笔记,课程链接

一、RNN(循环神经网络)

Recurrent Neural Networks(RNN)用于处理序列模型的问题,是一种对序列数据建模的神经网络。

1.RNN与一般NN的不同

传统NN每个样本输入、输出之间相互独立,不能处理很多情况。比如预测句子的下一个单词是什么,需要用到之前的信息。

深度学习——RNN和LSTM

上图是一个NN识别两个不同句子中相同单词的含义的例子。可以看到本身两个不同意思的句子中相同的单词是有不一样的意思的,第一个句子中的Taipei代表目的地,第二个句子中的Taipei代表出发地。原因是他们之前的信息不一样,一个是arrive,一个是leave。但是NN不能分辨这个差别,会将两个单词分为同一类。所以神经网络需要记忆来存储之前的信息。

用RNN处理相同的信息:

深度学习——RNN和LSTM

每个step读入一个input,加上之前的memory,作为当前的输入,产生output。同时将当前step的信息存入memory cell,供下一个step使用。Memory Cell是RNN隐含层的核心部分,即图中的蓝色框部分,用于存储之前的信息,传递给后续的step。

结合之前的信息,RNN就能区别出例子中Taipei的不同了。因为之前的memory不同,所以对于同一单词Taipei就有了区别。

深度学习——RNN和LSTM

2.RNN的结构

简单的单隐含层RNN结构如下

深度学习——RNN和LSTM

有别于传统的机器学习模型中隐层单元彼此间是完全对等的,RNN中间的隐层从左向右是有时序的。上图中不同时刻的输入经过同一个网络,使用同一组参数W,U,V。

3.RNN怎么工作的

  • step1:输入。t时刻(t=1,2,3… ),RNN获得当前样本的第t个输入x(t),x(t)表示第t时刻的输入;
  • step2:计算当前state。s(t)为隐藏层的第t时刻的状态,它是网络的记忆单元。s(t)根据当前输入层的输出与上一步隐藏层的状态进行计算。s(t) =f(U*x(t) +W*s(t−1)),其中f()一般是非线性的**函数,如tanh或ReLU或Sigmoid,在计算s(0)时,即第一个单词的隐藏层状态,需要用到s(−1),在实现中一般置为0向量即可;
  • step3:计算输出。o(lt)是lt(last t)时刻,即当前样本的最后一个输出,o(lt) =softmax(V*s(lt);
  • step4:计算cost,一般用交叉熵计算的方法;
  • step5:反向传播,更新参数。

Notice:可以认为隐藏层状态s(t)是网络的记忆单元,包含了前面所有步的隐藏层状态。而输出层的输出o(t)只与当前步的s(t)有关。在实践中,为了降低网络的复杂度,往往s(t)只包含前面若干步而不是所有步的隐藏层状态。

下图的递归结构清楚表示了整个RNN的前向传播过程
深度学习——RNN和LSTM

4.RNN的前后向传播

  • forward propagation

深度学习——RNN和LSTM

RNN中前一时刻到当前时刻只有一个权重矩阵深度学习——RNN和LSTM,该权重矩阵与时间并没有什么关系。整个前向传播算法与BP网络的前向传播算法的差别是多了一个前一时刻隐藏层深度学习——RNN和LSTM的信息而已。u(t)是输入v(t)和上个时刻隐含层输出h(t-1)经过weight矩阵和bias矩阵线性计算的结果,h(t)表示当前隐含层输出,o(t)表示输出层线性结果,z(t)表示输出层经**函数计算的结果,e和g表示**函数。

  • backward propagation

    BPTT(Backpropagation through time)算法

    深度学习——RNN和LSTM

    BPTT算法的核心就是将最后结果的残差传递到最初的时刻。计算过程类似神经网络bp算法中,利用链式求导法则一步步反向求各个变量的梯度。不过这里的参数较多,计算相对复杂。


二、LSTM(长短期记忆网络模型)

如果RNN处理的时间序列过长,在BPTT过程中会有梯度消失和梯度爆炸的问题发生。LSTM(Long Short-term Memory)改进了RNN,解决了梯度消失的问题,所以LSTM只要关心梯度爆炸的问题,方法很简单,就是使用小的learning rate。

深度学习——RNN和LSTM
这是一个LSTM的基本单元,相对于RNN多了三个gate控制相关的输入输出:input gate,forget gate,output gate。每个单元都有4个输入,1个输出。

单个lstm单元的计算过程如下。每个时刻的input映射为z,zi,zo,zf作为输入,input门的控制,output门的控制和forget门的控制。

深度学习——RNN和LSTM

深度学习——RNN和LSTM

c(t-1)是一个向量,表示t-1时刻每一个单元内的memory cell存储的值。z,zi,zo,zf也是向量,每一个dimension送入一个lstm神经元。

深度学习——RNN和LSTM

上图表示lstm单元内的计算过程,x表示乘法,+表示加法。

下面是两个lstm网络间的连接图,c(memory)、h(hidden layer output)值被传递到下一层作为输入。

深度学习——RNN和LSTM

深度学习——RNN和LSTM

LSTM克服了一般RNN的缺点,已经成为一种RNN的标准模型,现在一般提到RNN模型,较多使用LSTM。