概述
循环神经网络(RNN-Recurrent Neural Network)是神经网络家族中的一员,擅长于解决序列化相关问题。包括不限于序列化标注问题、NER、POS、语音识别等。RNN内容比较多,分成三个小节进行介绍,内容包括RNN基础以及求解算法、LSTM以及变种GRU、RNN相关应用。本节主要介绍
1.RNN基础知识介绍
2.RNN模型优化以及存在的问题
3.RNN模型变种
RNN知识点
RNN提出动机
RNN的提出可以有效解决以下问题:
- 长期依赖问题:在语言模型、语音识别中需要根据上下文进行推断和预测,上下文的获取可以根据马尔科夫假设获取固定上下文。RNN可以通过中间状态保存上下文信息,作为输入影响下一时序的预测。
编码:可以将可变输入编码成固定长度的向量。和CNN相比,能够保留全局最优特征。
计算图展开
RNN常用以下公式获取历史状态
ht=f(ht−1,xt;θ)
其中h为隐藏层,用于保存上下文信息,f是激活函数。
用图模型可以表达为:
RNN潜在可能的展开方式如下:
1)通过隐藏层传递信息
1.该展开形式非常常用,主要包括三层输入-隐藏层、隐藏层-隐藏层、隐藏层到输入层。依赖信息通过隐藏层进行传递。
2.参数U、V、W为共享参数
2)输出节点连接到下一时序序列
应用比较局限,上一时序的输出作为下一时间点的输入,理论上上一时间点的输出比较固定,能够携带的信息比较少。
3)只有一个输出节点
只在最后时间点t产生输出,往往能够将变成的输入转换为固定长度的向量表示。
RNN使用形式
在使用RNN时,主要形式有4中,如下图所示。
1.一对一形式(左一:Many to Many)每一个输入都有对应的输出。
2.多对一形式(左二:Many to one)整个序列只有一个输出,例如文本分类、情感分析等。
3. 一对多形式(左三:One to Many)一个输入产出一个时序序列,常用于seq2seq的解码阶段
4.多对多形式(左四:Many to Many)不是每一个输入对应一个输出,对应到变成的输出。
RNN数学表达以及优化
RNN前向传播
对于离散时间的RNN问题可以描述为,输入序列
其中时间参数t表示离散序列,不一定是真实时间点。
对于多分类问题,目标是最小化释然函数
根据上面经典的RNN网络结构,前向传播过程如下:
如上图U、V、W分别表示输入到隐藏层、隐藏层到输出以及隐藏到隐藏层的连接参数。
1. 隐藏层节点权值: at=b+Wht−1+Uxt
2. 隐藏层非线性变换: ht=tanh(at)
3. 输出层: ot=c+Vht
4. softmax层: y^t=softmax(ot)
RNN优化算法-BPTT
BPTT 是求解RNN问题的一种优化算法,也是基于BP算法改进得到和BP算法比较类似。为直观上理解通过多分类问题进行简单推导。
1. 优化目标,对于多分类问题,BPTT优化目标转换最小化交叉熵:
2. 由于总的损失L为各个时序点的损失和,因此有
3. 对于输出层中的第i节点有