7

首先,让我为在该标题中塞入三个问题而道歉。我不确定有什么更好的方法。

我会马上解决的。我想我非常了解前馈神经网络。

但是 LSTM 真的让我无法理解,我觉得这可能是因为我对循环神经网络没有很好的掌握。我在 Coursera 上完成了 Hinton 和 Andrew Ng 的课程。很多对我来说仍然没有意义。

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

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

    010
+   011

循环神经网络首先取最右边的 0 和 1,输出 1。然后取 1,1,输出 0,并携带 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 有牺牲?

4

3 回答 3

9

什么是循环神经网络?

基本思想是循环网络有循环。这些循环允许网络使用来自先前通道的信息,这些信息充当内存。此内存的长度取决于许多因素,但重要的是要注意它不是无限的。你可以认为内存正在退化,旧信息越来越不可用。

例如,假设我们只想让网络做一件事:记住之前的输入是 1 还是 0。不难想象一个网络只是在循环中不断地传递 1。但是,每次发送 0 时,进入循环的输出都会变低一些(这是一种简化,但显示了这个想法)。经过一定次数的循环后,循环输入将任意低,使网络的输出为 0。如您所知,梯度消失问题本质上是相同的,但相反。

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

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

什么是 LSTM 网络?

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

有两个主要缺点:

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

总是更好吗?

哪种结构更好取决于许多因素,例如您解决问题所需的节点数量、可用数据量以及您希望网络内存达到多远。但是,如果您只想要理论上的答案,我会说考虑到无限的数据和计算速度,LSTM 是更好的选择,但不应将此视为实际建议。

于 2015-11-06T19:43:05.950 回答
6

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

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

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

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

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

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

于 2014-07-31T23:08:09.257 回答
3

RNN 和 LSTM 都可以是序列学习器。RNN 存在梯度消失点问题。这个问题导致 RNN 在大约超过 10 个时间步后难以记住过去输入的值。(RNN 只能记住几个时间步之前看到的输入)

LSTM 旨在解决 RNN 中的梯度消失点问题。LSTM 具有弥合输入之间长时间滞后的能力。换句话说,它能够记住过去多达 1000 个时间步的输入(一些论文甚至声称它可以比这更多)。这种能力使 LSTM 在学习具有长时间滞后的长序列方面具有优势。请参阅 Alex Graves 博士。论文监督序列标记与递归神经网络的一些细节。如果你是 LSTM 的新手,我推荐Colah 的博客,超级简单易懂的解释。

然而,RNN 的最新进展也声称,通过仔细初始化,RNN 也可以学习与 LSTM 性能相当的长序列。一种初始化整流线性单元循环网络的简单方法

于 2014-10-20T07:05:24.540 回答