1.RNN
-
循环神经网络有挖掘数据中的时序信息以及语义信息的深度表达能力。
-
循环神经网络的主要用途是处理和预测序列数据。
-
BP和CNN网络,网络结构都是从输入层到隐含层再到输出层,层与层之间是全连接或部分连接的,但每层之间的节点是无连接的。RNN的隐藏层之间的节点是有连接的,隐藏层的输入不仅包括输入层的输出,还包括上一时刻隐藏层的输出。
-
每一时刻t,RNN都会针对该时刻的输入结合当前模型的状态给出一个输出,并更新模型状态。
RNN的主体结构A的输入除了来自输入层xi,还有一个循环的边来提供上一时刻的隐藏状态ht-1。在每一个时刻,RNN的模块A在读取了xi和ht-1之后会生成新的隐藏状态ht,并产生本时刻的输出ot。 -
模块A的运算和变量在不同时刻是相同的,因此RNN理论上可以被看作是同一神经网络结构被无限复制的结果。正如CNN在不同空间位置共享参数,RNN在不同时间位置共享参数,从而可以使用有限的参数处理任意长度的序列。
-
RNN在每一个时刻都会有一个输入xt,然后根据RNN前一时刻的状态ht-1计算新的状态ht,并输出yt。RNN的当前状态ht是由上一时刻的状态和当前的输入xt共同决定的。在时刻t,状态ht-1浓缩了前面序列x0,x1,…xt-1的信息,用于输出yt的参考。由于序列的长度可以无限延长,维度有限的h状态不可能将序列的全部信息都保存下来,因此模型必须学习只保留与后面任务ot,ot+1,…相关的最重要的信息。
-
RNN的展开在模型训练中有重要意义。 RNN对长度为N的序列展开之后,可以视为一个有N个中间层的前馈神经网络。这个前馈神经网络没有循环连接,因此可以使用反向传播算法进行训练。(沿时间的反向传播)
-
输入:将序列不同时刻的数据依次传入RNN的输入层
-
输出:下一个时刻的预测或当期信息的处理结果
-
RNN要求:每一个时刻都有一个输入,但不一定每一个时刻都有一个输出。
-
RNN可以看作是同一神经网络结构在时间序列上被复制多次的结果,这个被复制多次的结构被称为循环体。
-
关键问题:如何设计循环体
2.LSTM
- RNN的问题:长期依赖问题。一些上下文场景更加复杂的情况,简单的RNN丧失学习到距离很远的信息的能力。或在复杂的语言场景中,有用的信息间隔有大有小、长短不一,RNN的性能也会受到限制。LSTM结构可以解决这个问题。
- LSTM利用门结构,是信息有选择性的影响每个时刻的状态。
- 门结构:使用sigmoid神经网络和一个按位做乘法的操作。之所以叫门,是因为使用sigmoid作为激活函数的全连接神经网络会输出一个0-1的值,描述当前输入有多少信息量可通过这个结构。0关闭,1打开。
- 遗忘门:根据当前的输入xt和上一时刻的输出ht-1决定哪一部分记忆需要被遗忘。假设状态c的维度为n。遗忘门会根据xt和ht-1计算一个维度为n的向量f=sigmoid(w1x+w2h),它在每一维度上的值都在0-1范围内。再将上一时刻的状态ct-1与f向量按位相乘,那么f取值接近0的维度上的信息就会被忘记。
- 输入门:当忘记了之前的状态后,它还需要从当前的输入补充最新的记忆。根据xt和ht-1决定哪些信息加入到状态ct-1中生成新的状态ct。
- 输出门:根据最新的状态ct、上一时刻的输出ht-1和当前的输入xt决定该时刻的输出ht。
- 输入值:z=tanh(Wz[ht-1,xt])
- 输入门:i=sigmoid(Wi[ht-1,xt])
- 遗忘门:f=sigmoid(Wf[ht-1,xt])
- 输出门:o=sigmoid(Wo[ht-1,xt])
- 新状态:ct=f * ct-1 + i * z
- 输出:ht=o * tanh(ct)
- Wz、Wi、Wf、Wo维度为[2n,n]
3.BRNN和DRNN
3.1BRNN
- 解决当前时刻的输出与前后状态都有关系
- 由两个独立的RNN叠加而成,两个RNN的方向相反,其余结构完全对称
- 输入:在每一个时刻t,输入同时提供给两个方向相反的RNN
- 输出:由两个RNN的输出拼接而成
3.2DRNN
- 增强模型的表达能力,在网络中设置多个循环层,将每层循环网络的输出传给下一层进行处理
- 在一个L层的DRNN中,每一个时刻的输出xt到输出ot之间有L个循环体,网络因此可以从输入中抽取更加高层的信息。与CNN类似,每一层的循环体中的参数是一致的,不同层中的参数可以不同。
3.3RNN中的dropout
- RNN类似于CNN,只在最后的全连接层中使用dropout
- RNN只在不同层循环体结构之间使用dropout,而不在同一层的循环体结构之间使用。也就是说,从时刻t-1传递到时刻t时,RNN不会进行状态的dropout,而在同一个时刻t中,不同层循环体之间会使用