2017-06-10 22 views
1

我有一些数据以非常高的速率(每秒几百次)进行采样。这导致任何给定实例的平均序列长度是平均值(约90,000个样本)。整个序列有一个标签。我正尝试使用LSTM神经网络将新序列分类为这些标签之一(多类分类)。如何处理极长的LSTM序列长度?

但是,使用具有如此大的序列长度的LSTM会导致相当大的网络。

什么是有效的方法来“块”这些序列,以便我可以减少神经网络的序列长度,但仍然保持在整个实例中捕获的信息?

回答

0

当您的序列非常长时,RNN可能面临消失梯度和爆炸梯度的问题。

有方法。你需要了解的第一件事是为什么我们需要尝试以上方法?这是因为通过时间反向传播可以得到真正的努力,由于上述问题。

是的,LSTM的介绍已经将这个降低了很多,但是如果这么长时间,您仍然可以面对这样的问题。

所以一种方法是削减梯度。这意味着你设置了渐变的上限。请参阅本stackoverflow question

那么这个问题你问

什么是一些方法,有效地“块”这些序列?

一种方法是通过时间截断反向传播。有很多方法可以实现这个截断的BPTT。简单的想法是

  1. 计算梯度只为给定的时间步数 这意味着,如果你的序列是200层时的步骤,你只给10时间步只会计算梯度10时间步骤,然后通过存放记忆值在那10步时间到下一个序列(作为初始单元状态)。这种方法是什么tensorflow using to calculate truncated BPTT.

2.采取完整的序列,只有选择时间块的某些给定的时间步后退梯度传播。这是一个连续的方式

这是我发现的最好的文章,它解释了这些trunacated BPTT方法。好简单。参考Styles of Truncated Backpropagation

+0

谢谢!有了这些方法,我仍然可以建立约90,000个LSTM层的网络吗?这就是我现在的问题所在,因为我不认为这可以在合理的时间内进行培训。 – Parad0xD9

+0

理论上来说是的!您可以。但实际上这并不容易。有一件事是训练时间。另一个问题是,当你有很多长时间的连接时,他们往往会随着时间步骤而松散记忆。 –

+0

我认为你的答案对于处理一般的RNN问题是有效的。然而,我在这个问题上的问题只是关于一个网络,当展开时,这个网络会非常大,需要很长时间来训练。相反,我已经将我的序列分解为具有单独标签的较小子序列。 – Parad0xD9