神经网络基础-循环神经网络
在深入学习深度学习的路上,作为一位刚入门的小白开发者,在探索各种关键技术时不断积累经验。我会持续分享自己探索的各种技术点,并邀请大家一起交流心得与经验
本文参考:本文参考吴恩达老师的Coursera深度学习课程,很棒的课,推荐
本文假设读者已掌握了深度学习的基础知识。如需进一步理解基础案例,请参考吴恩达老师的入门课程:
http://study.163.com/courses-search?keyword=吴恩达#/?ot=5
转载请注明出处,其他的随你便咯
一、前言
循环神经网络(Recurrent Neural Network, RNN)也被称作处理序列数据的一种重要神经网络模型,在深度学习的学习过程中会遇到各种各样的序列类型问题,在这种情况下普通的单层或浅层的感知机等传统神经网络已经无法有效建模这类具有时序特性的数据特征因而被提出了一种特殊的递归结构来解决此类问题
二、序列模型
我们在深度学习的领域,经常能碰到如下的一些问题:
- 语音识别:将来自语音信号的信息转化为对应的文本数据。其中,原始信号与目标表示均为序列形式。
- 音乐生成:创建音乐片段。仅输出部分为音乐片段。
- 情感分类:根据评论内容进行情感程度评估。
- DNA序列分析:确定DNA分子中编码特定蛋白质的部分。
- 机器翻译:在两种语言之间实现相互转换。
- 视频行为识别:识别视频中的行为模式。
- 命名实体识别:从文本中提取实体名称。

在这些问题中,在讨论输入与输出时,并非所有情况都具有固定的长度特征;其具体长度往往取决于问题所处的具体场景或背景信息。为了便于讨论,在此我们首先介绍一个典型的普通神经网络模型:

首先给出数学符号定义:
- 记输入序列为x(其中每个元素被视为一个序列),其中x^{(i)}_{
} \in \mathbb{R}^d 代表第i个样本在时间步长t上的特征值。 - 输出目标序列为y(其中每个元素对应于特定位置的信息),同样地用y^{(i)}_{
} \in \mathbb{R}^d 表示第i个样本在时间步长t上的对应信息。 - 输入数据集共有L_x = |\{ (x^{(i)}, y^{(i)}) \}_{i=1}^N | 条训练数据。
- 输出数据集共有L_y = |\{ (x^{(i)}, y^{(i)}) \}_{i=1}^N | 条验证数据。
- 其中x^{(i)}_{
} 代表第i个训练样本在时间步长t上的特征值;而\hat{x}^{(j)}_{}代表第j个测试样本在时间步长s上的特征值。
在上图表示的神经网络中,我们发现主要存在下面俩个问题:
- 输入和输出数据可能会有不同的长度;
- 不同文本中的各个位置上学习得到的特征值不会共享;这些权重的最优值在各个样本中都是不固定的。
为了改变上述问题,所以提出了循环神经网络(RNN)。
三、循环神经网络
在RNN架构中延后输出与传送时序单元来应对上述两大挑战。每个时间段内RNN会将一个激活值传送至下一时间段用于后续计算。以下展示了该过程的视觉呈现:

在图中 每个X< t >都会被输入到一个神经网络中 并且会生成一个预测值Yhat< t >同时存储一些中间数据a< t >这些中间数据用于后续计算过程 RNN模型通过按顺序从左向右处理数据序列实现了对时间序列信息的学习 同时在各个时间步段共享相同的参数设置 为了简化表示 右侧展示了RNN模型的一个简化表示形式
这是需要注意的是,在零时刻a^{(0)}时应初始化一个激活值作为输入。一般可采用全零向量作为初始输入;此外还可以通过随机数值的方式进行初始化。
图中标注为红色的字符显示了三个变量Wax、Waa和Way;这些变量代表的是权重值,并在同一时间段内保持一致。
Wax是从输入值X
Waa是从a隐层
Wya是从隐层a
PS.该种方法表现出显著的效果。
RNN的前向传播
我们给出一个RNN的结构图:

接下来是前向传播的步骤:
- 构造初始激活向量:a<0> = 0(向量);

* 我们通常用tanh作为激活函数,有时也可以用ReLU;

在处理二分类问题时,则可以选择使用sigmoid激活函数;在处理多分类问题时,则可以选择使用softmax激活函数。
Note: By employing matrix multiplication, we can concatenate Waa and Wax to form Wa; similarly, concatenating a

如上简化之后,RNN的前向传播公式为:

RNN的反向传播
在训练RNN模型的过程中运行反向传播计算时同样采用了梯度下降法以更新模型中的参数同时我们定义了一个用于衡量预测与真实值之间差异的损失函数

在循环神经网络(RNN)架构中,反向传播过程被称作穿越时间的反向传播机制。其背后的原因在于,在训练过程中需要沿着时间序列逐个时间步地反向传播误差信息以更新模型参数。
不同类型的RNN
多对多(Tx = Ty):
在输入和输出的长度相同时,是上面例子的结构,如下图所示:

多对多(Tx != Ty):
在输入和输出长度不同时候,会有如下结构:

多对一:
在情感分类模型中进行研究时

一对多:
比如在音乐生成模型中,我们输入一个音乐的类型,输出为一段音乐序列:

