循环神经网络

1.简介循环神经网络

自然语言处理是研究人与计算机使用自然语言沟通的有效方法,需要用到神经网络进行学习,于是开发出了循环神经网络一系列的神经网络算法。

循环神经网络是一类具有记忆能力的神经网络,在循环神经网络中,神经元不但可以接受上一层神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。循环神经网络对于每一个时刻的输入结合模型的状态都会给出一个输出,可以看作是同一个神经网络被无限复制得到的结果。

下图为一个循环神经网络的结构,在网络训练的过程中,循环神经网络会保存上一个时刻训练过的隐藏层神经元数据,将这些数据加权线性变换后结合加权变换后的下一时刻输入数据和偏置值,经过激活函数的非线性变换后作为新的输入再通过一个全连接层转换为输出。在循环神经网络中,所有权重参数是共享的。

循环神经网络 递归神经网络 循环神经网络定义_循环神经网络 递归神经网络


循环神经网络擅长解决时间序列相关的问题,其输入为不同时刻的数据,在每一次循环得到的输出可以是对下一个时刻的预测,也可以是对当前时刻信息处理得到的结果。·

2.循环神经网络的构建

1)RNN前向传播算法

设RNN的输入为x1,x2,…,xt

对应的隐藏层状态为h1,h2,…,ht

输出为y1,y2,…,yt,则经典RNN的运算过程可以表示为

循环神经网络 递归神经网络 循环神经网络定义_深度学习_02


其中,U,W,V,c均为参数,b为偏置值,而f()表示激活函数,映射到输出层的激活函数不仅限于softmax函数,也可以为RELU,tanh等函数。

RNN的工作流程如下:

用户输入What time is it?,经过RNN训练之后得到的输出’05’可以判断语句意图,据此对用户进行回复。

循环神经网络 递归神经网络 循环神经网络定义_rnn_03

2)RNN计算梯度算法

由于在循环神经网络中,网络的输出维度一般远低于输入维度,因此循环神经网络多使用随时间反向传播算法(BPTT)来更新参数。

RNN中的反向传播和普通前馈神经网络的反向传播原理差不多,差别在于需要更新的参数变多了,每一次更新参数要更新对输入数据x进行映射的权重参数U,上一时间状态隐藏层神经元加权参数W,偏置值和隐藏层映射到输出层的权重参数V。由于RNN中权重参数是共享的,所以权重的梯度是所有层梯度的总和。

3.循环神经网络的优化

1)长短时记忆网络LSTM

一般建立长时间RNN中存在两个问题:

第一是在RNN训练的过程中如果建立长时间的RNN模型,就会导致需要存储所有时间序列上存留的数据,对硬件的开销会变得很大导致计算机无法负担;

第二是若建立的RNN时长趋近于无穷时,由于误差项

循环神经网络 递归神经网络 循环神经网络定义_rnn_04



循环神经网络 递归神经网络 循环神经网络定义_深度学习_05



循环神经网络 递归神经网络 循环神经网络定义_rnn_06


可以看到,当循环神经网络 递归神经网络 循环神经网络定义_数据_07循环神经网络 递归神经网络 循环神经网络定义_rnn_08时,循环神经网络 递归神经网络 循环神经网络定义_深度学习_09,造成梯度爆炸问题;相反,循环神经网络 递归神经网络 循环神经网络定义_学习_10循环神经网络 递归神经网络 循环神经网络定义_rnn_08时,循环神经网络 递归神经网络 循环神经网络定义_学习_12,会出现梯度消失问题。

所以循环神经网路很难建立长距离的依赖关系,在RNN的基础上进行改进,对一些时长的数据选择性遗忘和选择性更新,就得到了长短期记忆网络LSTM。

LSTM的网络结构展开图如下

循环神经网络 递归神经网络 循环神经网络定义_rnn_13


对于LSTM网络结构进行拆分,可以分为遗忘门输入门细胞状态更新门输出门四个结构

遗忘门结构如下

循环神经网络 递归神经网络 循环神经网络定义_rnn_14


LSTM的遗忘门决定从上一时刻细胞状态中舍弃哪些信息,它接收循环神经网络 递归神经网络 循环神经网络定义_深度学习_15循环神经网络 递归神经网络 循环神经网络定义_rnn_16,加权之后经过sigmoid函数使得输出值在0到1之间,再用得到的介于0到1之间的数据循环神经网络 递归神经网络 循环神经网络定义_学习_17循环神经网络 递归神经网络 循环神经网络定义_学习_18乘点积表示需要遗忘上一层的某部分数据。输入门结构如下

循环神经网络 递归神经网络 循环神经网络定义_学习_19


输入门输入的信息为对于本层循环需要使用哪些数据参与计算具体的作用体现在细胞状态更新门。

细胞状态更新门结构如下

循环神经网络 递归神经网络 循环神经网络定义_rnn_20


将遗忘门所遗忘的数据状态和输入门记录的需要使用的数据状态相加,就得到了本层计算所需要使用的数据,并作为下一层的数据状态传入下层循环。输出门结构如下

循环神经网络 递归神经网络 循环神经网络定义_学习_21


将细胞状态通过tanh函数把数值调整到-1和1之间再和输入数据相乘,这样使得一些特征不够好的数据状态在下一层就会通过sigmoid函数调整后变为趋近于0的值被遗忘,输出的数据和传到下一层的数据都是特征明显的。

2)GRU

循环神经网络我用的太少就不看 这个了= =