如何处理极长的LSTM序列长度?

Par*_*xD9 5 neural-network lstm

我有一些数据以非常高的速率采样(每秒数百次)。对于任何给定的实例,这平均会导致序列长度很大(〜90,000个样本)。整个序列只有一个标签。我正在尝试使用LSTM神经网络将新序列分类为这些标签之一(多类分类)。

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

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

小智 7

这篇文章是很久以前写的,但我想我应该在这里插话。对于您正在处理的这个特定问题(具有局部性、组合性和平稳性的一维连续值信号),我强烈推荐使用 CNN 卷积神经网络方法,而不是使用 LSTM。


Sha*_*ana 5

当序列很长时,RNN可能会遇到梯度消失和梯度爆炸的问题。

有方法。您需要了解的第一件事是为什么我们需要尝试上述方法?这是因为由于上述问题,长时间反向传播会变得非常困难。

是的,LSTM的引入已在很大程度上减少了这种情况,但是仍然很长,您仍然会遇到此类问题。

因此,一种方法是剪切渐变。这意味着您设置渐变的上限。请参阅此stackoverflow问题

那你问这个问题

有哪些方法可以有效地“整理”这些序列?

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

  1. 仅计算给定时间步长的梯度这意味着,如果您的序列是200个时间步长,而您只给出10个时间步长,则它将仅计算10个时间步长的梯度,然后将在该10个时间步长中存储的存储值传递给下一个序列(作为初始单元状态)。张量流使用此方法来计算截断的BPTT。

2.采取完整的序列,并且仅从选定的时间块开始反向传播特定时间步长的梯度。这是一种连续的方式

这是我发现的最好的文章,它解释了这些截断的BPTT方法。很容易。请参阅这种截断的反向传播样式