1.循环神经网络用于解决连续且长短不一的序列样本
2.RNN是一种时间序列模型,模型三个线性关系矩阵共享,体现“循环”思想
3.LSTM是RNN的一个特例,用于解决RNN梯度爆炸和梯度消失的问题
4.LSTM隐状态比RNN多了一层——细胞状态
5.LSTM由遗忘门、输入门、细胞更新和输出门构成
6.求解RNN模型依然采取前向传播与反向传播算法
多层感知机(MLP)是深度神经网络(DNN)的基础模型,通常DNN就是指多层感知机,在此基础上加入卷积层和池化层,就得到了卷积神经网络(CNN)。但这两类模型对于训练样本输入是连续且长短不一的序列比较难解决,比如一串语音或者一串文字,对于这类问题,循环神经网络(RNN)则比较擅长解决。我们这一篇就介绍该模型。
模型介绍
循环神经网络,英文是Recurrent Neural Networks ,简称RNN。通常用于自然语言处理的语音识别和机器翻译领域。下图是RNN的一种典型结构图:
它假设变量都是时间序列化的,其中:
x表示训练样本输入
h表示隐藏状态,t时刻的h状态由t时刻的x和t-1时刻的h决定
o表示模型输出,t时刻的输出o只与当前隐藏状态h决定
L表示损失函数
y表示训练样本的真实输出
W,U,V是模型三个线性关系参数的矩阵,它在整个RNN中共享,体现了“循环”思想
RNN模型传播算法
对于任意序列时刻t,隐藏状态h的公式:
激活函数一般为tanh。
此时模型输出o为:
t时刻最终预测输出为:
如果是识别分类模型,则该激活函数一般为softmax.
RNN的反向传播算法是基于时间序列,通常也称为BPTT(back-propagation through time).
每个时刻都有损失,所以最终的损失为:
为了简化计算,这里采取交叉熵损失,隐藏层激活函数为tanh函数,最终输出是softmax函数。因此求损失函数L对V,c的梯度为:
下面求解损失函数L对W,U,b的导数,类似DNN,定义一个迭代式子:
又因为:
所以:
最后得到梯度:
RNN改进——LSTM
RNN也会面临梯度消失的问题,天才数学家提出了它的改进模型——LSTM(Long Short-Term Memory),它可以避免RNN的梯度消失.
经典的RNN图结构如下(每层略去模型输出o,损失函数L,真实输出y):
每个时刻t增多一个隐藏状态,我们称为细胞状态(Cell State),图中最上面的长横线部分;
引进遗忘门(forget gate),以一定的概率控制是否遗忘上一层的隐藏细胞状态:
它通过t-1时刻隐藏状态h和t时刻序列数据x,通过激活函数σ得到遗忘门的输出f,一般为sigmod函数,控制在[0,1]之间,用以表示概率:
输入门(input gate)负责当前时刻t序列的输入:
它由两部分组成,第一部分使用了sigmoid激活函数,输出为i;第二部分使用了tanh激活函数,输出为a, 两者的结果后面会相乘再去更新细胞状态:
然后到细胞更新过程:
前面的遗忘门和输入门的结果都会作用于细胞状态:
最后到输出门:
t时刻隐藏状态h由两部分组成,第一部分是输出模型o,由t-1时刻因此状态h和t时刻序列数据x,以及激活函数σ得到;第二部分由t时刻隐藏状态C与tanh激活函数得到:
LSTM模型传播算法
LSTM的前向传播
前向传播算法很简单,只需要求出每个时刻t的各种输出即可。
然后按照序列t不断向前更新即可。
LSTM的反向传播
类似于标准的RNN,我们要找到迭代公式,这里的的隐状态有h和C,所以要定义两个δ:
最后可以计算得到T时刻:
t时刻:
其中,
最后得到参数梯度:
其他参数梯度也可以同样得到。
这一篇只对RNN做个简要的介绍与推导,对RNN有个整体的认识,更多深入的细节与原理以后会再介绍。