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

时间:2017-06-10 21:33:18

标签: neural-network lstm

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

但是,使用序列长度如此之大的LSTM会导致网络非常大。

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

3 个答案:

答案 0 :(得分:5)

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

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

是的,LSTM的介绍已经大大减少了这一点,但是当它持续这么长时间时你可能会面临这样的问题。

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

然后你问这个问题

  

有效的' chunk'有哪些方法?这些序列?

一种方法是截断后向传播。有许多方法可以实现此截断的BPTT 。简单的想法是

  1. 仅针对给定时间步数计算梯度 这意味着如果您的序列是200个时间步,并且您只给出10个时间步,则它将仅计算10个时间步的梯度,然后将该10个时间步中的存储的内存值传递给下一个序列(作为初始单元状态)。这种方法是tensorflow using to calculate truncated BPTT.
  2. 2.获取完整序列,并且仅从所选时间块的某些给定时间步长反向传播梯度。这是一个持续的方式

    这是我发现的最好的文章,它解释了这些trunacated BPTT方法。很容易。请参阅此Styles of Truncated Backpropagation

答案 1 :(得分:3)

这篇文章是前一段时间的,但我想我会在这儿报时。对于您正在处理的这个特定问题(具有局部性,成分性和平稳性的一维连续值信号),我强烈建议使用CNN卷积神经网络方法,而不是使用LSTM。

答案 2 :(得分:-1)

三年后,我们似乎已经开始解决这类问题:稀疏变压器。

请参见

https://arxiv.org/abs/1904.10509

https://openai.com/blog/sparse-transformer/