RNN模型笔记

2019-03-10  本文已影响0人  谦之

模型是什么

众所周知,RNN的特点是将以前保留的信息,传递给未来,使得RNN模型具有记忆的功能,其主要的原理类似于函数中的递归,将不同时间片的隐变量传递给同一个神经元,神经元处理之后再输出,这样使得神经元在对原来的向量存在记忆的同时,接受新的变量输入。

简单的循环神经网络展开图如下所示,最重要的是每个环节的函数构造,需要理解: RNN层次图

上图中S_{t-1}即是上一个时间片中神经元的输入,也是下一个时间片中神经元的输出,假设时间片中的函数为,f(x,s), 其中xs分别是上图中的变量, 那么循环网络的计算可以按下图的几个公式完成:

从表中可以看出 S 一直在做递归操作,从而能够保存原有变量的信息

如果我们进一步细化f(x , s),那么 f(x , s) 可以写成如下几个公式

模型的公式就到这里了。

如何反向传播(公式推导)

我们从末尾开始计算

softmax(o_{t}) = \frac {e^{o_{t}}}{A+e^{o_t}} 其中A表示 其他的输出向量

softmax对o_{t}求导: {(softmax(o_{t}))}^{'} = softmax(o_{t}) * (1 - softmax(o_{t}))

S_{t}o_{t}求导:V* {(S_{t})}^{’}

S_{t-1}{h_{t-1}}求导:diag(1-{h_{t-1}}^{2})* {h_{t-1}}^{'}

W{h_{t-1}}求导:S_{t-1}

b{h_{t-1}}求导:1

U{h_{t-1}}求导:x_{t-1}

最后的输出结果:

训练难点在与神经元和神经元之间不能同时训练,大大延长了训练时间

哪些变种

1.递归神经网络,将原本以线状的神经网络以树的形式表示,减少了树的深度,进而减少训练的时间

2.双向RNN,考虑到输入一个句子的时候,我们不仅仅从前面的词中获取信息,也会往后看,即从后面的单词中也获取信息,因此,双向RNN设计了一条从尾部到头部的线路,将该词的后续词纳入了学习范围

3.基于上下文RNN,其重点是在每一个节点输入更多上下文的信息,比如,原先所有的x的信息作为当前神经元的输入特征,当前y的信息作为输入特征等

4.长短时门控RNN,在自循环的思想基础上,使用门控来手动训练权重,设计了输入门,遗忘门和输出门三个门,来手动学习应该记忆的内容

梯度爆炸和梯度消失

梯度爆炸主要原因是参数梯度太大,导致被抛出目标区域,使得之前的训练变成无用功,其主要处理方式是梯度截断,即使用一个衰减速度足够慢的学习率,进而对梯度差异的反应更温和

梯度消失的主要方法有两个,使用LSTM或者使用正则化,通过正则化可以调整梯度的大小,特定的正则函数可以保证梯度不为0

上一篇 下一篇

猜你喜欢

热点阅读