lstm和gru结构的再理解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lstm和gru结构的再理解相关的知识,希望对你有一定的参考价值。
参考技术A我看大部分介绍rnn的文章里面都只画了cell的图,但是这对一个刚入门的人来说是会造成很大的误解,而正确的介绍方法应该先介绍rnn的总体结构,然后再介绍cell的结构。这才有可能对rnn有一个更清晰的认识。
我们在网上多是看到这样的图
cell是什么呢,我们首先回到MLP结构中
RNN中的cell其实就是MLP结构中隐藏层的神经元。但是这个神经元有点特殊,它加入了时序的特点,所以不同时间段它的表达是不一样的。
所以,RNN正确的模型结构图应该是这样:
横向是不同的时序,纵向是不同的层。这样是不是会更好理解了呢。
而LSTM和GRU只是cell的变种形式,总体上RNN的结构是不变的。双向RNN的总体结构也没变,也只是cell的形式有所变化。
好了,下面回到经常看到的图
这张图是一个lstm的总体结构,我们知道,lstm里面最重要的概念是“门结构(gate)”,分为遗忘门,输入门和输出门。这里分4步来理解这个cell的结构。
可以看到公式里面的[h, x],这里表示将这一时刻的输入x[t],和上一时刻t-1的输出h[t-1]做一个concat,然后经过sigmoid函数。
因为sigmoid输出是0和1(大部分),这里面0和1与后面做乘法的时候,等于相应的让一些信息变成了0,就等于是忘记了一些信息。这里其实一个开关,控制信息的通过。
举个例子,比如完形填空中填“他”或者“她”的问题,细胞状态可能包含当前主语的类别,当我们看到新的代词,我们希望忘记旧的代词。
公式中[h,x]还是做的concat操作。
这里的意思可以看作为放什么新信息到细胞状态(C[t])中。
i[t]有一个sigmoid,类似于遗忘操作,这里就是对新知识的筛选, C`[t]可以将其看作全部的新知识。
之前两补的操作就是为了更新细胞的状态,更新知识体系。包括让细胞忘记一些东西,然后给细胞补充新知识。
这里另外说一点,为什么lstm可以解决RNN中梯度弥散/消失的问题。
因为C[t]是又两个结果相加得到,求导时会保留更新梯度。
lstm结构理解完了,其实gru结构的理解方式基本一致。还是那张图
这里和lstm不同的是:
如果r[t] = 1,z[t] = 1,那么gru和普通rnn的cell就是一样的。
因为gru参数更少,所以gru训练起来比lstm更简单。
但是, 这两种cell最后的结果差不了太多! 用的时候不必纠结选择哪种结构。
好了,lstm和gru说完了,下次来点新玩意,seq2seq和attention。
快速理解RNN(LSTM,GRU)结构原理
参考技术ARNN主要用来解决序列问题,强调的是先后顺序,在NLP中引申出上下文的概念,一个翻译问题,这个词的含义可能和前后的单词形成的这个组合有联系(Skip-gram),也可能是它之前的所有单词都有联系(Attention),并且,借助RNN的state这样的记忆单元,使得一个序列位置的输出在数学上和之前的所有序列的输入都是有关系的。当然原始的RNN由于梯度的乘性问题,前面的序列的影响近乎为0,这个后面又用LSTM来修正为加性问题。RNN的数学基础可以认为是马尔科夫链,认为后续的值是有前者和一些参数的概率决定的。
seq2seq模型,另外会有新文章介绍。
普通的RNN在长文本的情况下,会学不到之前的信息,例如:the clouds are in the sky 预测sky是可以预测准确的,但是如果是很长的文本,如:我出生在中国,......,我讲的是 中文 这个时候就存在长时依赖问题,LSTM可以通过输入们,遗忘门,输出们来解决这个问题。
刚开始接触LSTM时有点懵,这个结构怎么这么复杂,但其实先理解LSTM做了什么来解决长时依赖问题,就很容易 记住这个结构了。
LSTM通过忘记们来决定从上个隐状态记忆中忘记哪些信息,通过输入们来决定输入哪部分信息,通过输出们来决定输出哪部分信息,这样来解决长时依赖问题,下面来介绍下LSTM的具体结构信息。
LSTM相比RNN hidden status还引入了细胞状态来记录信息。细胞状态通过门结构 gate来添加新的记忆和删除旧的记忆信息
这一步是通过忘记门来忘记部分cell state中的记忆信息
将需添加的新信息加入到经过忘记门后的cell state中,生成新的cell state
GRU的结构如下,主要包含重置门和更新门,把GRU看着LSTM的变体,相当于取消了LSTM中的cell state,只使用了hidden state,并且使用update gate更新门来替换LSTM中的输入们和遗忘门,取消了LSTM中的输出门,新增了reset gate重置门。这样做的好处是在达到LSTM相近的效果下,GRU参数更少,训练的计算开销更小,训练速度更快。
由于GRU参数更少,收敛快,通常在数据集够大的情况下,选择LSTM效果应该会更好。
通常情况下LSTM和GRU两者效果相差不大,GRU训练更快,所以一般会先选择使用GRU进行训练和调参,当无法再继续优化时可以把GRU替换成LSTM来看看是否有提高。
完全图解RNN、RNN变体、Seq2Seq、Attention机制
Understanding LSTM Networks
序列预测问题,CNN、RNN各有什么优势?
以上是关于lstm和gru结构的再理解的主要内容,如果未能解决你的问题,请参考以下文章