使用Keras进行深度学习:RNN

RNN---循环神经网络,在这里主要将它用在处理与预测序列数据方面.

1.RNN网络结构与原理详解:

  

该图的左边是未展开的RNN模型,展开后的RNN模型在右边详细的进行了展示.RNN网络的最为重要的一点就是其具有时序性,该时序性在网络的具体的体现就是hi的一系列参数的设置,这些参数的含义就是在i时刻(对应时刻的记忆)的记忆.

输入层到隐含层:

用公式表示RNN当前时刻的记忆为:


你会通过这个公式发现,其hi就是在i时刻的记忆,他的计算具体是由两个部分组成的,其中前面的部分是输入的值与权值的乘积,后面一个部分是权值与前一个时刻记忆的乘积。构成了当前时刻的输出值.

隐含层到输出层:

在隐含层到输出层,我们使用softmax函数作为激活函数,这个函数的作用就是预测每一个词出现的概率,然后选择其中最大的那一个值(有时候还常常与交叉熵结合使用).


通过上面的处理过程,RNN就可以有效的处理时序数据,对每一个输入保留重要的信息,理论上就能够得到所有重要的信息,进而综合考虑所有的输入去预测输出.

2.双向RNN网络结构及原理详解:

实际上,为什么会产生双向的RNN,这里可以形象的说一下,如果我们把RNN的过程比作一部电视剧,那么如果我们突然的从中间挑出一集来看,肯定会看的一头雾水,因为我们并不知道其前面的背景,所以会很不理解,这就可以比作RNN神经网络,我们从头开始看电视剧,把其中的重要的信息保存下来,这样随着剧请的发展,我们就可以看懂了所有的剧情,并且有时候还可以根据剧情来进行预测.

但是吧,单向的RNN只能够往一个方向流动,恰好此时你又挑了一集电视剧,但是这个人是啥性格,下场咋样,单从前面的消息是不能够进行预测的,但是如果你知道后面的剧情,那么就非常容易了,这就是为啥引出双向RNN。。


在上图中,黄色的实线是从前向后流动的重要信息,而黄色的虚线就是从后向前的重要信息。

3.深层RNN网络结构:

 深层的RNN结构,就是多了几个隐藏层,当重要的信息一次无法体现的时候,我们就可以采用增加隐藏层的方式,试图使其变得更加复杂,那么其就有了更加良好的表示信息的能力.

4.Keras对RNN的支持:

Keras对RNN模型进行了封装,调用起来是十分的方便。

Keras在layers包的recurrent模块中实现了RNN相关层模型的支持,并在wrapper模型上实现双向的RNN包装器.

recurrent模块中的RNN模型包含RNN,LSTM,GRU等模型。

RNN:全连接RNN模型

SimpleRNN(units,activation='tanh',dropout=0.0,recurrent_dropout=0.0,return_sequences=False)

wrapper模块实现双向RNN模型:

Bidirectional(layer,merge_mode='concat',weights=None)



猜你喜欢

转载自blog.csdn.net/qq_20880939/article/details/80105046