什么是回归神经网络,什么是长期短期记忆(LSTM)网络,它总是更好吗?

时间:2014-07-23 04:03:27

标签: machine-learning neural-network sequence lstm

首先,让我为在该标题中填写三个问题而道歉。我不确定那里有什么更好的方式。

我会正确的。我想我很了解前馈神经网络。

但是LSTM真的让我失望了,我觉得这可能是因为我对一般的递归神经网络没有很好的把握。我在Coursera上经历了Hinton和Andrew Ng的课程。其中很多对我来说仍然没有意义。

根据我的理解,递归神经网络与前馈神经网络的不同之处在于过去的值会影响下一个预测。递归神经网络通常用于序列。

我看到的循环神经网络的例子是二元加法。

    010
+   011

一个递归神经网络首先取0和1,输出1.然后取1,1接着输出零,然后进行1.取下一个0,0并输出1,因为它从最后一次计算中得出1。它存放在哪里1?在前馈网络中,结果基本上是:

    y = a(w*x + b)
where w = weights of connections to previous layer
and x = activation values of previous layer or inputs

如何计算递归神经网络?我可能错了,但根据我的理解,递归神经网络是具有T隐藏层的前馈神经网络,T是时间步数。每个隐藏层在时间步长T处获取X输入,然后将其输出添加到下一个相应的隐藏层输入。

    a(l) = a(w*x + b + pa)
where l = current timestep
and x = value at current timestep
and w = weights of connections to input layer
and pa = past activation values of hidden layer 
    such that neuron i in layer l uses the output value of neuron i in layer l-1

    y = o(w*a(l-1) + b)
where w = weights of connections to last hidden layer

但是,即使我理解正确,我也没有看到这样做的好处,而不仅仅是使用过去的值作为普通前馈网络的输入(滑动窗口或其他任何调用)。

例如,使用递归神经网络进行二进制加法而不是训练具有两个输出神经元的前馈网络有什么优势。一个用于二进制结果而另一个用于进位?然后取出进位输出并将其重新插入前馈网络。

但是,我不确定这与仅仅将过去的值作为前馈模型中的输入有何不同。

在我看来,由于梯度消失,反复出现的神经网络仅比前馈网络更具优势。这让我想到了第二个问题,根据我的理解,LSTM是消除梯度问题的解决方案。但我并没有真正掌握它们的运作方式。此外,它们是否比复发神经网络更好,或者是否有使用LSTM的牺牲?

3 个答案:

答案 0 :(得分:8)

什么是递归神经网络?

基本思想是循环网络有循环。这些循环允许网络使用来自先前传递的信息,这些信息充当存储器。这种记忆的长度取决于许多因素,但重要的是要注意它不是无限期的。您可以将内存视为降级,旧信息的可用性越来越低。

例如,让我们说我们只是希望网络做一件事:记住前面的输入是1还是0.不难想象一个网络只是不断通过1循环。但是每次发送0时,进入循环的输出会稍微降低(这是一种简化,但显示了这个想法)。经过一些次数后,循环输入将是任意低的,使得网络0的输出。正如您所知,消失的梯度问题基本相同,但相反。

为什么不使用时间窗口输入?

您提供了另一种选择:过去输入的滑动窗口作为当前输入提供。这不是一个坏主意,但请考虑一下:虽然RNN可能会随着时间的推移而受到侵蚀,但是在窗口结束后,您将始终丢失整个时间信息。虽然您可以消除消失的梯度问题,但您必须将网络的权重数量增加几倍。必须训练所有这些额外的重量会伤害你,就像消失梯度一样糟糕(如果不是更糟)。

什么是LSTM网络?

您可以将LSTM视为一种特殊类型的RNN。不同之处在于LSTM能够主动维护自连接循环而不会降低它们的性能。这是通过一种有点花哨的激活来实现的,其中涉及一个额外的记忆"自循环连接的输出。然后必须训练网络以选择将哪些数据放入该总线。通过训练网络以明确选择要记住的内容,我们不必担心破坏重要信息的新输入,并且消失的梯度不会影响我们决定保留的信息。

有两个主要缺点:

  1. 计算网络输出并应用反向传播更加昂贵。由于复杂的激活,你只需要做更多的数学运算。然而,这并不像第二点那么重要。
  2. 显式内存为每个节点增加了几个权重,所有这些权重都必须经过训练。这增加了问题的维度,并可能使找到最佳解决方案变得更加困难。
  3. 总是更好吗?

    哪种结构更好取决于许多因素,例如您需要的节点数量,可用数据量以及您希望网络内存达到的距离。但是,如果你只想要理论答案,我会说,鉴于无限的数据和计算速度,LSTM是更好的选择,但不应该把它作为实用的建议。

答案 1 :(得分:6)

前馈神经网络具有从第n层到第n + 1层的连接。

循环神经网络也允许从n层到n层的连接。

这些循环允许网络对先前周期的数据执行计算,从而创建网络内存。这种记忆的长度取决于许多因素,是一个活跃的研究领域,但可能是几十到几百个时间步。

为了使它更清楚一点,你的例子中的携带1以与输入相同的方式存储:以激活神经层的模式。它只是循环(同一层)连接,允许1持续时间。

显然,复制每个输入流超过几个过去的时间步骤是不可行的,选择哪些历史流是非常困难的(并导致灵活性降低)。

LSTM是一个非常不同的模型,我只是通过与PBWM模型比较而熟悉,但在该评论中,LSTM能够无限期地主动维护神经表示,因此我认为它更适用于显式存储。 RNN更适合非线性时间序列学习,而不是存储。我不知道使用LSTM而不是RNN是否存在缺陷。

答案 2 :(得分:3)

RNN和LSTM都可以是序列学习者。 RNN遭遇消失的梯度点问题。此问题导致RNN在超过10次步骤后记住过去输入的值时遇到问题。 (RNN只能记住以前看到的几个时间步长的输入)

LSTM旨在解决RNN中消失的梯度点问题。 LSTM能够弥合输入之间的长时间滞后。换句话说,它能够记住过去多达1000个时间步的输入(有些论文甚至声称它可以超过这个)。这种能力使LSTM成为学习长时间滞后的长序列的优势。请参阅Alex Graves博士。论文Supervised Sequence Labelling with Recurrent Neural Networks了解一些细节。如果您不熟悉LSTM,我建议Colah's blog进行简单易懂的解释。

然而,RNN的最新进展还声称,通过仔细初始化,RNN还可以学习与LSTM性能相当的长序列。 A Simple Way to Initialize Recurrent Networks of Rectified Linear Units