首页 > 解决方案 > LSTM:多步预测的训练和反向传播

问题描述

我正在训练一个用于时间序列预测的 LSTM。我不仅需要预测下一个时间步长,还需要预测一系列未来的时间步长。也就是说,从1, 2, 3, 4我需要预测的一组输入中5, 6, 7, 8, 9。我的数据集采用以下格式:

input             label
1, 2, 3, 4        5
2, 3, 4, 5        6

为了训练它,我定义了一个n决定输入大小的窗口大小和一个m决定未来我想要预测多少步的窗口大小。所以,这就是我为一批做的事情:

for _ in range(m):

    set hidden_state = 0

    input             prediction      label      loss
    1, 2, 3, 4   ->   8               5          mse(label, prediction)
    2, 3, 4, 8   ->   11              6          mse(label, prediction)
    3, 4, 8, 11  ->   2               7          mse(label, prediction)
    ...
    ...

loss = mse(total_loss)
loss.backward()

[我每次定义输入的方式非常重要]
对于每个预测,我计算损失并将预测作为下一个输入的最后一个值。损失被添加到 total_loss 缓冲区并在最后取平均值。迭代后m,我反向传播 total_loss(梯度为每个预测和 hidden_​​state 存储)并重新开始一个新批次,设置 hidden_​​state = 0。
这个选择背后的基本原理是损失编码算法预测整个系列的好坏而不仅仅是下一个时间步长(就像我总是计算 的损失一样1,2,3,4 -> 5)。我不太确定这是正确的方法,因为输入主要由第一步之后的预测组成。
这是训练时间序列的常用方法吗?这种方法有什么具体问题吗?

标签: machine-learningtime-serieslstmrecurrent-neural-network

解决方案


推荐阅读