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

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

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

最佳答案

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

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

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

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

那你问这个问题



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

  • 仅计算给定时间步长的梯度
    这意味着,如果您的序列是200个时间步长,并且您仅给出10个时间步长,则它将仅计算10个时间步长的梯度,然后将在该10个时间步长中存储的内存值传递给下一个序列(作为初始单元格状态)。这个方法就是tensorflow using to calculate truncated BPTT.

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

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

    关于neural-network - 如何处理极长的LSTM序列长度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44478272/

    10-12 19:31