先打个岔,区分一下recurrent neural network循环神经网络和recursive neural network递归神经网络。
recurrent: 时间维度的展开,代表信息在时间维度从前往后的的传递和积累,可以类比markov假设,后面的信息的概率建立在前面信息的基础上,在神经网络结构上表现为后面的神经网络的隐藏层的输入是前面的神经网络的隐藏层的输出;
recursive: 空间维度的展开,是一个树结构,比如nlp里某句话,用recurrent neural network来建模的话就是假设句子后面的词的信息和前面的词有关,而用recursiveneural network来建模的话,就是假设句子是一个树状结构,由几个部分(主语,谓语,宾语)组成,而每个部分又可以在分成几个小部分,即某一部分的信息由它的子树的信息组合而来,整句话的信息由组成这句话的几个部分组合而来。
再扯一个概念,隐形马尔可夫模型,英文是 Hidden Markov Models,简称 HMM,也用于处理序列数据,但是序列能力较弱。
HMM模型有一个会随时间改变的隐藏的状态(特征),在持续地影响它的外在表现(输出)。该模型有几个比较重要的概念:可见状态链;隐含状态链;HMM中说到的马尔可夫链其实是指隐含状态链,因为隐含状态之间存在转换概率(transition probability);可见状态之间没有转换概率,但是隐含状态和可见状态之间有一个概率叫做输出概率(emission probability);。HMM是马尔可夫模型,就一定存在马尔可夫链,该马尔可夫链服从马尔可夫性质:即无记忆性。也就是说,这一时刻的状态,受且只受前一时刻的影响,而不受更往前时刻的状态的影响。
循环神经网络(Recurrent Neural Network,RNN)是一种用于处理序列数据的神经网络。相比一般的神经网络来说,他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不同的含义,RNN就能够很好地解决这类问题。
这里h'的生成均来自同一个映射f();而输出y的映射根据具体模型而定。
长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
LSTM结构(图右)和普通RNN的主要输入输出区别如下所示。
下面具体对LSTM的内部结构来进行剖析。
下面开始进一步介绍这四个状态在LSTM内部的使用。(敲黑板)
以上,就是LSTM的内部结构。通过门控状态来控制传输状态,记住需要长时间记忆的,忘记不重要的信息;而不像普通的RNN那样只能够“呆萌”地仅有一种记忆叠加方式。对很多需要“长期记忆”的任务来说,尤其好用。
但也因为引入了很多内容,导致参数变多,也使得训练难度加大了很多。因此很多时候我们往往会使用效果和LSTM相当但参数更少的GRU来构建大训练量的模型。
GRU(Gate Recurrent Unit)是循环神经网络RNN的一种。和LSTM一样,也是为了解决长期记忆和反向传播中的梯度等问题而提出来的。
GRU和LSTM在很多情况下实际表现上相差无几,那么为什么我们要使用GRU(2014年提出)而不是相对经受了更多考验的LSTM(1997提出)呢。
下图引用论文中的一段话来说明GRU的优势所在。
相比LSTM,使用GRU能够达到相当的效果,并且相比之下更容易进行训练,能够很大程度上提高训练效率,因此很多时候会更倾向于使用GRU。
最后介绍GRU最关键的一个步骤,我们可以称之为”更新记忆“阶段。
在这个阶段,我们同时进行了遗忘了记忆两个步骤。我们使用了先前得到的更新门控 z(update gate)。
GRU是在2014年提出来的,而LSTM是1997年。他们的提出都是为了解决相似的问题,那么GRU难免会参考LSTM的内部结构。那么他们之间的关系大概是怎么样的呢?这里简单介绍一下。
GRU输入输出的结构与普通的RNN相似,其中的内部思想与LSTM相似。
与LSTM相比,GRU内部少了一个”门控“,参数比LSTM少,但是却也能够达到与LSTM相当的功能。考虑到硬件的计算能力和时间成本,因而很多时候我们也就会选择更加”实用“的GRU啦。
参考:
[1] 如何有效的区分和理解RNN循环神经网络与递归神经网络? - 知乎
[2]人人都能看懂的LSTM - 知乎
[3]台大李宏毅教授《机器学习》
[4]如何用简单易懂的例子解释隐马尔可夫模型? - 知乎
[5]一文搞懂HMM(隐马尔可夫模型) - skyme - 博客园
[6]人人都能看懂的GRU - 知乎