数据足够多的时候RNN已经不流行了,自然语言处理多用transformer来进行
传统的one to one模型不适合处理时序性数据,通常情况来说输入和输出的长度都不固定 ,对于时序数据,最好输入和输出的长度都不固定 many to one / many to many,
新的状态ht,依赖于向量ht-1,xt以及矩阵A
比如目前任务是给定半句话要求预测下一个单词:
(1),比如输入时cloud are in the 正确的输出应该是sky,(只借助前面几个词进行预测)RNN可以完成,RNN很擅长short-term dependence
状态h100 会把之前的输入忘记,RNN的记忆只有7秒
RNN->LSTM:
遗忘其实就是深度学习中老生常谈的梯度消失
LSTM或GRU的作用:它可以学习只保留相关信息来进行预测,忘记不相关的数据。在这种情况下,你记得的单词让你判断麦片是好的。
LSTM比RNN复杂的多,RNN有一个参数矩阵,LSTM有四个
过去的向量通过传输带送到下一个时刻,不会发生太大的变化,LSTM就是靠传输带来避免梯度消失的问题
LSTM中有很多个Gates可以有选择的让信息通过
输入sigmoid是一个向量a,算出遗忘门向量f
f怎么算出来的呢
ft是上一个状态ht-1和当前状态xt的函数(图右侧的计算过程)
遗忘门有一个参数Wf需要通过反向传播在训练数据里学习
输入门有一个参数Wi需要通过反向传播在训练数据里学习
有一个参数Wc需要通过反向传播在训练数据里学习
输出门有一个参数Wo需要通过反向传播在训练数据里学习
LSTM输出ht计算
所有xt状态的信息都积累到了ht里面
1、任务:电影评论情感分析
代码几乎一样就是层名变了
LSTM层是2080*4=8320个参数
也可以用dropout
但是dropout也不一定提升准确率,因为过拟合是由embedding层造成的(32万个参数)
LSTM总是要比simpleRNN要好
因篇幅问题不能全部显示,请点此查看更多更全内容