来源见此处
概述
RNN(Recurrent Neural Network)
RNN之所以称为循环神经网络,是因为一个序列的当前的输出与前面的输出也有关.
具体表现是网络会对前面的信息进行记忆并且应用于当前输出的计算中.即隐藏层之间的节点也是有连接的.并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出.
理论上RNN能对任何长度的序列进行处理,但是在实践中,为了降低复杂性,往往假设当前状态只与前面几个状态相关
多种结构
- one-to-one
- one-to-n
应用举例:
图像生成文字,输入X即为图像的特征.输出的y序列就是一段句子 - n-to-n
这是最经典的例子,输入输出都是等长的序列数据
h1 = f(Ux1+Wh0+b)
h2 = f(Ux2+Wh1+b) …
依次类推,要记住,其中的参数U,W,b都是一样的,也就是说每个步骤的参数都是共享的,这是RNN的重要特点.
理论上计算过程可以无限的持续下去
得到结果输出的方法就是通过h计算,
y1 = Softmax(Vh1+c)
- n-to-one
要处理的问题输入就是一个序列,输出是一个单独的值而不是序列.
只需要在最后一个h上进行输出变化就行了
Y=Softmax(Vh4+c)
- Encoder-Decoder
n-to-m 输入输出为不等长的序列,这种结构也叫Seq2Seq,是RNN的一个重要变种.
Encoder-Decoder结构先将输入数据编码成一个上下文语意向量c
这一步可以有多种方式,最简单的就是直接把h4赋给c
拿到c之后,用另一个RNN网络进行解码.这部分RNN网络称之为Decoder.具体得看图
Encoder和Decoder并不是一个固定的模型,而是一个框架
Encoder:将Input序列转成一个固定长度的向量
Decoder: 将固定长度的向量转成output序列
- Encoder Decoder缺点
局限性:编码和解码之间的唯一联系时固定长度的语义向量c
编码要把整个序列的信息压缩进c
语义向量c无法完全表达整个序列的信息
先输入的内容携带的信息,会被后输入的信息稀释掉,或者覆盖掉
输入序列越长,这样的现象越严重
因此提出了attention机制.
Attention Mechanism
挖个坑待补
LSTM结构
RNN结构如果需要长期记忆的话,就需要当前的隐含态计算和前n-1此的计算挂钩,这样计算太过麻烦.传统RNN无法解决,但是LSTM解决了这个问题
Long Short Term网络,LSTM.
LSTM的重复模块中包含四个交互的层
LSTM的关键就是细胞状态.(详情见图).只有一些少量的线性交互,信息在上面流传保持不变很容易
LSTM的关键在于"门",门是一种让信息选择式通过的方法.包含一个sigmoid神经网络层和pointwise乘法操作.
LSTM中包含三种门:
- forget gate:选择忘记过去某些信息
- input gate 记忆现在的某些信息
- 将过去和现在的记忆合并
- output gate 输出