RNN介绍

时序任务

对于一些任务需要能够更好的处理序列的信息,这些任务的特征是前面的输入和后面的输入是有关系的。比如,当理解一句话意思时,孤立的 理解这句话的每个词是不够的,需要处理这些词连接起来的整个序列;当处理视频的时候,不能只单独的去分析每一帧,而要分析这些帧连接起来 的整个序列;

循环神经网络(Recurrent Neural Network,RNN)具有记忆能力;循环神经网络全部或者部分神经元可以接受来自其它神经元或自身信号的神经网络结构,其拓扑结构可以是网状的,也可以是具有一定层级的,反馈神经网络通常被视为一个动态系统,主要关心其随时间变化的动态过程;

基本架构

RNN主要模拟的是人脑的记忆,来进行一个反馈的过程;RNN至少包含一个反馈链接的神经网络结构,特别适合处理时序数据,其基本结构如下所示:

RNN基本框架

  • 输入层向量;
  • 输入层到隐藏层的权重矩阵
  • 隐藏层向量:不仅和当前输入的有关,还取决于上一次隐藏层的值;
  • 隐藏层到输出层的权重矩阵;
  • 输出层向量;
  • 上一次隐藏层的向量被权重矩阵作用后,被作为这一次隐藏层的输入;

按时间顺序展开如下

RNN按时间线展开

可以抽象如下:

显然,某一时刻的输出值,收到前面历次输入值的影响;

一类带延迟/偏置的RNN常表示如下:

场景

神经网络模型通过训练“学”到的东西蕴含在“权值”中。基础的 神经网络只在层与层之间建立权连接,而RNN最大的不同之处在 于隐藏层内的神经元也建立了权连接。

RNN在不同的场景下,可能表现为不同的结构;

比如在文本分类中,输入数据为单词的序列,输出为该文本的类别

文本分类下的RNN

图片到文字描述的任务下,RNN表现如下:

图片到文字描述的任务RNN

输入和输出序列长度相同,比如为视频帧打标签

输入和输出登长的RNN

经典的编码器解码器架构,用于处理翻译问题

编码解码器架构

随时间反向传播

BPTT算法(Back-Propagation Through Time)可以用于RNN的训练,和BP算法类似,BPTT需要沿着徐娅优化的参数的负梯度方向寻找更优的点直到收敛;

将RNN沿时间轴展开如下:

RNN展开图

观察

BPTT算法是针对循环曾的训练算法。基本原理和BP算法是一样的,

  1. 前向计算每个神经元的输出值
  2. 反向计算每个神经元的误差项,它是误差函数对神经元的加权输入的偏导数;
  3. 计算每个权重的梯度;
  4. 随机梯度下降更新权重;

长程依赖

RNN 的长处之一是它可以利用先前的信息到当前的任务上,尤其当相关的信息和 预测的词之间的间隔较小时效果明显。 然而在间隔不断增大时,RNN会丧失学习到连接如此远的信息的能力。

考察RNN权重矩阵的最终梯度为各个时刻的梯度之和

在一般的训练中,从时刻开始,梯度已经几乎减少到了。即从此时刻 开始再往之前走,得到的梯度(几乎为零)就不会对最终的梯度值有任何贡献。这就是原始RNN无法处理长距离依赖的原因。