RNN
- 针对序列数据建模,输入数据格式类似于(batch, seq, dim)
- 相比与全连接网络(batch, dim)多了一个时间步长维度
- 因此网络在计算一个batch时,要按照seq顺序计算
- RNN就是在一个seq计算过程中,考虑步长里面的历史信息
LSTM
RNN的问题:梯度消失和爆炸
1个神经元的计算:y(t) = tanh( x(t) + h(t-1) )
一个seq的计算你就是累乘每一个神经元输出
-
RNN公式在反向求导过程中,有一个连乘公式,当其中为一个很大的数或者很小的数,则出现梯度消失和爆炸
-
LSTM在结构上引入不同门的操作,主要是把连乘项输出控制在0-1之间(激活函数),
LSTM结构
- long-term 特征C,
其中f表示遗忘门输出,过滤掉历史信息,
i表示输入门输出,表示要新增的历史信息
- 遗忘门,过滤C
激活函数sigmoid,除以0-1之间,小于0.5的减少权重,大于的增加权重
- 输入门,并入C
其中it也有选择的作用,sigmoid激活函数,大于0.5的加强,小于0.5的减弱
Ct表示当前step下输入后的激活输出,tanh在-1到1之间,
整体输出表示当前step下要选择哪些信息保留到长期特征当中
- 输出门,神经元输出
长期特征C激活后进行过滤,确定哪些信息是做为神经元输出
- 整体结构:
这只是一层,LSTM也可以向全连接堆叠多层,一般2层足够
- 双向LSTM: