赞
踩
我们在学习某种神经网络模型时,一定要把如下几点理解透了,才算真正理解了这种神经网络。
很多介绍深度学习的书籍,在介绍全连接神经网络时,对这几个方面都会介绍的比较清楚,但是在介绍CNN,RNN,LSTM等,都会只偏重介绍网络的架构,其他的方面介绍的少,没有讲解透彻。
如果不信,我提一个问题,如果能够在那本书中找到答案,请一定要告诉我这边书的名字!
问题:双向RNN中,有两个隐藏状态,一个是正序,如下图中的实线;一个是逆序,如下图中的虚线。那么在计算t时刻的状态变量时,对于正序,比较好理解,输入是上一个时刻的隐藏状态和当前时刻的系统输入;对于逆序,输入是下一个时刻的隐藏状态和当前时刻的系统输入。下一个时刻的隐藏状态属于未来的状态,那么,系统在计算时,怎么能够用未来的状态做输入呢?
我可是日夜冥思苦想才想通这个问题啊。 下面给出历程。
先理解下RNN的几点:
网络的架构:
这是一个标准的RNN结构图,图中每个箭头代表做一次变换,也就是说箭头连接带有权值。左侧是折叠起来的样子,右侧是展开的样子,左侧中h旁边的箭头代表此结构中的“循环“体现在隐层。
在展开结构中我们可以观察到,在标准的RNN结构中,隐层的神经元之间也是带有权值的。也就是说,随着序列的不断推进,前面的隐层将会影响后面的隐层。图中O代表输出,y代表样本给出的确定值,L代表损失函数,我们可以看到,“损失“也是随着序列的推荐而不断积累的。
除上述特点之外,标准RNN的还有以下特点:
1、权值共享,图中的W全是相同的,U和V也一样。
2、每一个输入值都只与它本身的那条路线建立权连接,不会和别的神经元连接。
前向传播算法:
x是输入,h是隐层单元,o为输出,L为损失函数,y为训练集的标签。这些元素右上角带的t代表t时刻的状态,其中需要注意的是,因策单元h在t时刻的表现不仅由此刻的输入决定,还受t时刻之前时刻的影响。V、W、U是权值,同一类型的权连接权值相同。
前向传播算法其实非常简单,对于t时刻:
h(t)=ϕ(U*x(t)+W*h(t−1)+b)
其中ϕ()为激活函数,一般来说会选择tanh函数,b为偏置。
t时刻的输出就更为简单:
o(t)=V*h(t)+c
最终模型的预测输出为:
yˆ(t)=σ(o(t))
其中σ为激活函数,通常RNN用于分类,故这里一般用softmax函数。
损失函数的定义:
对于分类问题,采用交叉熵。
后向传播算法:
BPTT(back-propagation through time)算法是常用的训练RNN的方法,其实本质还是BP算法,只不过RNN处理时间序列数据,所以要基于时间反向传播,故叫随时间反向传播。BPTT的中心思想和BP算法相同,沿着需要优化的参数的负梯度方向不断寻找更优的点直至收敛。综上所述,BPTT算法本质还是BP算法,BP算法本质还是梯度下降法,那么求各个参数的梯度便成了此算法的核心。
需要寻优的参数有三个,分别是U、V、W。与BP算法不同的是,其中W和U两个参数的寻优过程需要追溯之前的历史数据,参数V相对简单只需关注目前。
什么时候出现过拟合,怎么优化?
很多资料在介绍全连接神经网络时,都介绍过拟合的定义以及优化的方法,然后在介绍RNN时,却没有介绍这些。对于学习和实践的过程就很容易忽略这些。其中这些在实践中也是非常重要的。
出现过拟合的现象,就是安装过拟合的定义,当模型在训练数据的表现很好,而在测试数据集的表现不好时。
优化的方法:一是使用正则化,而是使用dropout。 dropout就是对权重参数进行随机丢弃的过程,采用超参数来控制丢失的比例。一般对同一个序列的内部的参数(即 U和V)使用dropout,而不对不同序列之间的连接的参数(即W)进行dropout。为什么要这样呢?这点很多书籍和资料都没有讲解透彻。
这其实是一个从实践的角度总结出来的,隐状态h是之前输入的信息的表示,在传递给下一个时刻,如果进行dropout,会有信息丢失。 而对同一个序列的内部的参数(即 U和V)使用dropout,只是讲信息表示的维数降低,比如隐层的维数是200维,使用dropout之后,变成180维,从而降低模型的复杂度。
现在理解双向RNN的几个方面:
下一个时刻的隐藏状态属于未来的状态,那么,系统在计算时,怎么能够用未来的状态做输入呢?
这个问题,既然很多资料没有讲,那就找原始paper的作者,是怎么说明的。
https://www.di.ufpe.br/~fnj/RNA/bibliografia/BRNN.pdfwww.di.ufpe.br这里的确是讲解了,只是我还是没有理解。到这里为止,能够理解的请举手!
我发现tensorflow的代码,bidirectional_dynamic_rnn 函数的实现,坐了两遍计算:第一遍先正向计算隐状态h,保存成一个序列,顺序是t时刻从1到T。第二遍,将输入反转,计算隐状态h,保存为一个序列,这样顺序就是t时刻从T到1. 最后在计算output,这样在计算output时,所有时刻的隐状态都是已经计算出来了。这样之前的疑问就得到解答了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。