本文参考:本文参考吴恩达老师的Coursera深度学习课程,很棒的课,推荐
本文默认你已经大致了解深度学习的简单概念,如果需要更简单的例子,可以参考吴恩达老师的入门课程:
http://study.163.com/courses-search?keyword=%E5%90%B4%E6%81%A9%E8%BE%BE#/?ot=5
转载请注明出处,其他的随你便咯
循环神经网络(Recurrent Neural Network,RNN)是一类用于处理序列数据的神经网络。我们在深度学习的学习过程中,会碰到很多序列类型的问题,这时候普通的的神经网络在处理这类问题的时候不适用,所以提出了这种特别的神经网络,在自然语言处理情形下,很有优势。
我们在深度学习的领域,经常能碰到如下的一些问题:
在这些问题中,我们的输入值和输出值,并不是固定长度,也可能需要根据的上下文来判断。我们先给出一个普通神经网络模型:
首先给出数学符号定义:
在上图表示的神经网络中,我们发现主要存在下面俩个问题:
为了改变上述问题,所以提出了循环神经网络(RNN)。
在RNN中,我们通过延迟输出和传递时间步来解决上述两个问题。在每一个时间步中,RNN会传递一个**值到下一个时间步中,用于下一个时间步的计算。下面给出RNN的图示:
如上图,每个X<t>都输入进一个NN,同时输出一个Yhat<t>和一个a<t>。Yhat<t>是基于这个输入X<t>对应的输出值,a<t>是目标节点之前需要记忆的数据的集合。RNN是从左到右扫描数据的,同时共享每个时间步的参数。右侧是RNN的简写方式。
这是需要注意的是,在零时刻a<0>,需要初始化一个**值输入。通常输入零向量,也可以用随机数的方法来输入。
在图中红字所示的Wax、Waa和Way是权重,这三个参数在每个时间步中共享(参数相同):
Wax是从输入值X<t>到隐层a<t>的连接权重;
Waa是从a隐层<t-1>到隐层a<t>的连接权重;
Wya是从隐层a<t>到输出层Yhat<t>的连接权重。
PS.上述RNN还有一个问题,每个预测值Yhat<t>只包含了在它之前的信息,而没有使用后面的信息,这个问题可以用BRNN(双向循环神经网络)或SLTM来解决,后文会提到。
我们给出一个RNN的结构图:
接下来是前向传播的步骤:
Note:我们可以利用矩阵的乘法,将Waa和Wax拼为Wa;将a<t-1>和x<t>拼在一起,这将就可以简化我们的前向传播公式:
如上简化之后,RNN的前向传播公式为:
我们在进行RNN的反向传播计算时候,也是使用梯度下降法来更新RNN的参数,我们定义其损失函数为:
在RNN中,反向传播称为穿越时间的反向传播,因为需要通过时间步来传递。
在输入和输出的长度相同时,是上面例子的结构,如下图所示:
在输入和输出长度不同时候,会有如下结构:
比如在情感分类模型中,我们对一段语言文本进行情感判断。输入值是一个序列,而输出值只有一个值:
比如在音乐生成模型中,我们输入一个音乐的类型,输出为一段音乐序列:
本文链接:http://task.lmcjl.com/news/5946.html