LSTM:如何用小批量喂给网络?何时重置 LSTM 状态?

机器算法验证 分类 神经网络 lstm 循环神经网络
2022-04-11 04:42:59

我的分类问题如下:我有一系列特征。这些用于预测 200 个类别之一。我正在尝试使用 RNN(更具体的 LSTM)。

在每次学习迭代中,我的框架都会处理一个小批量(B 个长度为 N 的特征序列)。在那里,序列中的每个特征都被输入网络,导致 N 次循环迭代,每次迭代都输入 B 个特征。

实际问题是关于 LSTM 的基本学习过程,那么我应该什么时候重置 LSTM 的状态?我是否必须在每次迭代时都这样做,所以对于每个小批量?还是在实际训练之前进行一次重置?

我对此的第一个想法如下:如果我在每次学习迭代中重置状态,那么 LSTM 会根据 B 个特征序列计算新状态,这对于同一个类来说是不必要的。训练在一个小批量中包含来自同一类的样本(特征序列)会更好吗?

编辑:在与我的同事讨论和对我正在使用的框架(chainer)进行一些调查之后,我发现了一些东西。首先,正如您所说,每个小批量都应该重置状态。其他框架,如 tensorflow,会在每次通过网络之前自动重置。我的问题的第二部分实际上是关于 LSTM 中的状态是否在 minibatch 中的所有样本之间共享。答案是不。在 chainer 中,LSTM 保存 B(对于每个序列一个)状态。最后,在重新思考我的问题之后,答案其实很明显,但是当你对某件事不熟悉时,一切都不清楚。

1个回答

我应该什么时候重置 LSTM 的状态?

通常,对于每个新输入,即对于每个样本。

如何用小批量喂给网络?

通常,出于编程和性能原因,对样本进行填充,以便小批量中的所有样本具有相同的长度。