首先,让我为在标题中塞进三个问题而道歉。我不确定还有什么更好的方法。
我就直奔主题吧。我想我对前馈神经网络非常了解。
但LSTM真的让我摸不着头脑,我觉得这可能是因为我对递归神经网络总体上没有很好的掌握。我已经看过了Hinton和Andrew Ng在Coursera上的课程。很多东西对我来说还是没有意义。
据我所知,递归神经网络与前馈神经网络的不同之处在于,过去的值会影响下一个预测。递归神经网络通常用于序列。
我看到的递归神经网络的例子是二进制加法。
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会有牺牲?
发布于 2015-11-07 03:43:06
什么是递归神经网络?
基本思想是循环网络有环路。这些循环允许网络使用以前通道中的信息,这些信息充当内存。这种记忆的长度取决于许多因素,但重要的是要注意,它不是无限的。你可以认为内存在退化,旧的信息越来越少。
例如,假设我们只想让网络做一件事:记住之前的输入是1还是0。不难想象,一个网络会不断地在循环中传递1。但是,每次发送0时,进入循环的输出都会变得更低(这是一种简化,但显示了想法)。经过一定次数的传递后,环路输入将是任意低的,从而使网络的输出为0。正如您所知道的,消失梯度问题本质上是相同的,只是相反。
为什么不直接使用时间输入窗口?
您提供了另一种选择:将过去的输入作为当前输入提供的滑动窗口。这不是一个坏主意,但请考虑一下这一点:虽然RNN可能会随着时间的推移而减少,但在窗口结束后,您将始终丢失完整的时间信息。虽然你可以消除消失的梯度问题,但你必须将网络的权重增加几倍。不得不训练所有这些额外的权重将会给你带来和消失梯度一样严重的伤害(如果不是更糟的话)。
什么是网络?
您可以将LSTM视为RNN的一种特殊类型。不同之处在于,LSTM能够主动维护自连接循环,而不会降低它们的性能。这是通过一种有点花哨的激活来实现的,这涉及到自循环连接的一个额外的“内存”输出。然后必须对网络进行训练,以选择将哪些数据放到此总线上。通过训练网络显式地选择要记住的内容,我们不必担心新的输入会破坏重要的信息,并且消失的梯度不会影响我们决定保留的信息。
主要有两个缺点:
总是更好吗?
哪种结构更好取决于许多因素,比如你的问题需要多少节点,可用的数据量,以及你希望你的网络内存回溯到多远。但是,如果您只想要理论上的答案,我会说,考虑到无限的数据和计算速度,LSTM是更好的选择,但是不应该将其作为实际建议。
发布于 2014-08-01 07:08:09
前馈神经网络具有从层n到层n+1的连接。
递归神经网络也允许从层n到层n的连接。
这些循环允许网络对来自前一个周期的数据执行计算,从而创建网络内存。这种记忆的长度取决于许多因素,是一个活跃的研究领域,但可能是数十到数百个时间步长的任何地方。
为了更清楚一点,您的示例中的Card1以与输入相同的方式存储:在神经层的激活模式中。它只是循环的(同层)连接,允许1在时间中持续存在。
显然,复制每个输入流超过几个过去的时间步长是不可行的,并且选择哪些历史流是重要的将非常困难(并导致灵活性降低)。
LSTM是一个非常不同的模型,我只是通过与PBWM模型进行比较而熟悉的,但在那个评论中,LSTM能够无限期地主动维护神经表示,所以我认为它更适合于显式存储。RNN更适合非线性时间序列学习,而不是存储。我不知道使用LSTM而不是RNN是否有缺点。
发布于 2014-10-20 15:05:25
这个问题导致RNN在大约超过10个时间步后无法记住过去输入的值。
换句话说,它能够记住过去多达1000个时间步长的输入(一些论文甚至声称它可以做到更多)。
然而,RNN的最新进展也声称,通过仔细的初始化,RNN也可以学习与LSTM性能相当的长序列。A Simple Way to Initialize Recurrent Networks of Rectified Linear Units。
https://stackoverflow.com/questions/24901637
复制相似问题