【问题标题】:LSTM: choice of batch size when State reused for generation laterLSTM:当状态重用于以后生成时选择批量大小
【发布时间】:2025-12-05 19:20:06
【问题描述】:

我正在构建一个逐步生成符号的 LSTM 模型。任务是将模型训练到数据序列的某个点,然后在测试阶段使用训练后的模型处理序列的剩余部分——这些剩余部分在训练期间看不到。

对于这个任务,我正在尝试将训练阶段的最新状态重新用于后续的预测阶段(即,不要以干净的零状态开始预测,而是在事情被中断的地方继续进行排序训练)。

在这种情况下,我想知道如何最好地选择训练的 Batch 大小。

我的训练数据是一长串按时间排序的观察结果。如果该序列被分成 N 批进行训练,那么我的理解是状态张量在训练期间的形状为[N, Network_Size],在预测期间为[1, Network_Size]。所以对于预测,我只取[N, Network_Size] 张量的最后一个元素,它的形状是[1, Network_Size]

这似乎在机制方面有效,但这意味着N 的值决定了原始状态的最后一个向量在训练期间看到了多少观察结果。

是否有确定如何选择 N 的最佳实践?网络的训练速度更快,批量更大,但我担心这样状态张量的最后一部分可能看不够。显然我正在尝试各种组合,但很好奇其他人是如何处理的。

此外,我还看到了一些示例,其中将此类参数(或单元大小/等)设置为 2 的幂(即 64、128 等)。与简单的 50/100/等相比,这背后有什么理论上的原因吗?还是只是一个古怪的选择?

【问题讨论】:

    标签: machine-learning tensorflow lstm


    【解决方案1】:

    首先,对于您的最后一个问题:对于计算机,2 的幂比 10 的幂更简单(例如,内存大小和对齐约束更可能是 2 的幂)。

    从您的问题中不清楚您所说的培训是什么意思;如果更新参数或仅计算 RNN 前向步骤。更新参数没有多大意义,因为对于 RNN(包括 LSTM),理想情况下您只在看到整批序列后才更新参数(并且您通常需要多次更新,直到模型完全合理)。同样,RNN 前向步骤对我来说没有多大意义,因为每个示例的状态都与批量大小无关(忽略您可能正在进行的任何批量标准化)。

    【讨论】:

    • 假设我有这个数据:[1,2,3,4,5,6,7,8,9,10,11,12]。如果我选择批量大小 2,那么我有 [1,2,3,4,5,6] 和 [7,8,9,10,11,12],例如我可以通过传递长度为 3 的序列开始训练到网络,所以步骤 1 中的 [1,2,3] 和 [7,8,9] 以及 [4,5,6] 和 [10,11,12],依此类推(如果数据更长) .另一方面,如果我选择批量大小 3,那么我有 [1,2,3,4]、[5,6,7,8] 和 [9,10,11,12]。因此,如果我开始对 3 的序列进行训练,那么 State 的最后一个元素(从 9 开始的那个)在训练期间的观察结果将比批量为 2 的示例中看到的更少
    • 因此,如果我在训练后重新使用状态进行预测,那么我可以尝试将状态张量的元素作为从训练数据中记住最后一部分观察结果的状态。因此,批次大小似乎越大,State 部分看到的观察结果就越少。这就是我想知道的,如果这有意义吗?
    • 不,批量大小与序列长度完全正交。