我已经搜索了互联网和书籍,但似乎所有东西都可以互换使用num_steps和batch_size/或类似的术语,我无法掌握它们的具体用途,或者在谈论 RNN 时批次适合的地方(我了解它们与梯度下降的使用,也许我对 RNN 有误解,我需要在基本层面上直截了当——如果是这样,请这样做。
那么批处理在递归神经网络中应用在什么地方呢?在时间步内的实例级别或时间步本身的级别。
根据我目前的理解,输入模型的数据结构如下:
data = [
"time_step_1": [
"instance_1": [
"feature_1": "some_value1",
"feature_2": "some_value2",
"feature_3": "some_value3",
"feature_4": "some_value4"
],
"time_step_2": [
"instance_2_but_first_in_time_step_2": [
"feature_1": "some_value1",
"feature_2": "some_value2",
"feature_3": "some_value3",
"feature_4": "some_value4"
],
"time_step_3": [
"instance_3_but_first_in_time_step_3": [
"feature_1": "some_value1",
"feature_2": "some_value2",
"feature_3": "some_value3",
"feature_4": "some_value4"
],
"time_step_4": [
"instance_4_but_first_in_time_step_4": [
"feature_1": "some_value1",
"feature_2": "some_value2",
"feature_3": "some_value3",
"feature_4": "some_value4"
],
"time_step_5": [
"instance_5_but_first_in_time_step_5": [
"feature_1": "some_value1",
"feature_2": "some_value2",
"feature_3": "some_value3",
"feature_4": "some_value4"
],
]
]
除了:许多人(和示例)每个时间步都有更多实例。
典型的训练循环如下所示:
for epoch in range(do_num_epochs):
for time_step_count in range(len(data)):
run(model, data[time_step_count])
也就是说,如果您在每个时间步(例如)有 10,000 个实例,那么批处理将允许更频繁地更新权重,而不必等待整个 10,000 个实例被处理。然后循环看起来像:
batch_size = len(data) // do_num_batches
for epoch in range(do_num_epochs):
for time_step_count in range(len(data)):
for batch_count in range(do_num_batches):
batch_data = data[time_step_count][batch_count * batch_size : (batch_count + 1) * batch_size]
run(model, batch_data)
但是,如果每个时间步只有一个数据实例,那么批量处理数据没有意义吗?
我制作了一个图表来尝试(也对我自己)解释流程和数据结构的样子:
我只是想了解批次在所有这些中的作用,它是如何适应的?
(编辑/添加)
在对该主题进行了更多研究之后,我相当确定批次是一种以块的形式输入序列并控制权重更新频率的方法。通过使用批次,权重在批次级别更新,从而使您可以将时间序列分组在一起。我在下面说明了我认为正确的内容,在下面的示例中有:
- 4个实例,
- 每个都有 5 个功能
- 跨越 30 个时间步长
在第一个示例(小批量)中,有 3 个批次,batch_size在该示例中 = 10,权重将更新 3 次,每批次结束后更新一次。
在第二个示例中,有效=1 的在线batch_size学习,在该示例中,权重将更新 30 次,每次更新一次time_series
在最后一个示例(批量学习)中,一次处理整个数据集,权重仅在“批量”结束时更新一次 (1)。
在这些示例中的每一个中,整个数据集都将运行多次,这些循环中的每一个都是一个epoch。


