卷积神经网络可以有效地处理空间信息, 循环神经网络就是专门为更好地处理序列信息而生,如时间等。循环神经网络通过引入状态变量存储过去的信息和当前的输入,从而可以确定当前的输出。
一,什么是循环神经网络
循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络。
它不仅考虑前一时刻的输入,而且赋予了网络对前面的内容的一种记忆功能.
之前的神经网络中隐藏层节点之间是没有连接的,RNN里面是有的,网络会对前面的信息进行记忆并应用于当前输出的计算中,隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出
代表性的RNN有:
- 基本RNN:循环网络的基本构成
- LSTM:突破性进展的长短期记忆网络
- GRU:新式的Cell模块单元
- NTM:更大记忆体模型的探索
二,基本RNN
首先看一下简单的循环神经网络,由输入层、一个隐藏层和一个输出层组成
和之前的全连接神经网络不同的是,在隐藏层中,有用隐藏层的输出作为下一次隐藏层的输入。权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重。这个就是实现时间记忆功能的方法。
把这个图具体一下
t-1时刻的输出是影响着t时刻的输出的,画成标准的RNN结构图如下:
可以看出来,输入和输出序列必须是等长的
三,RNN变体
因为标准RNN的限制,经常会有要求输入和输出不是同样数量的情况
3.1 N VS 1
要求输入一个序列,输出是一个单独的值,在最后进行输出变换即可
通常用来处理序列分类问题。如输入一段文字判别它所属的类别,输入一个句子判断其情感倾向,输入一段视频并判断它的类别等等。
3.2 1 VS N
输入一个单独的值,输出是一个序列
可以处理从图像生成文字,从类别生成语音或音乐等
3.3 N VS M
输入输出都是序列,但不等长。这种结构又叫Encoder-Decoder模型,也可以称之为Seq2Seq模型
有一个过程向量c,常用的求取方式有以下3种
得到c之后,就用另一个RNN网络对其进行解码
常常应用在机器翻译、文本摘要、阅读理解、语音识别
3.4 Attention机制
在Encoder-Decoder结构中,Encoder把所有的输入序列都编码成一个统一的语义特征c再解码,因此, c中必须包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈。
Attention机制通过在每个时间输入不同的c来解决这个问题
每一个 c 会自动去选取与当前所要输出的 最合适的上下文信息。具体来说,我们用 衡量 Encoder 中第 阶段的 和解码时第 阶段的相关性,最终 Decoder 中第 阶段的输入的上下文信息 就来自于所有 对 的加权和。