前馈 - 神经网络 Keras

Feed Forward - Neural Networks Keras

对于我在 Keras 中实现的前馈神经网络的输入,我只是想检查一下我的理解是否正确。

[[ 25.26000023  26.37000084  24.67000008  23.30999947]
[ 26.37000084  24.67000008  23.30999947  21.36000061]
[ 24.67000008  23.30999947  21.36000061  19.77000046]...]

所以在上面的数据中,它是数组中 4 个输入的时间 window。我的输入层是

model.add(Dense(4, input_dim=4, activation='sigmoid')) 

model.fit(trainX, trainY, nb_epoch=10000,verbose=2,batch_size=4)

和 batch_size 是 4,理论上,当我调用 fit 函数时,该函数会遍历每个 nb_epoch 中的所有这些输入吗? batch_size 是否需要为 4 才能让 window 正常工作?

谢谢约翰

让我用一个例子来解释一下:

当您有 32 个训练示例并调用 model.fitbatch_size 为 4,神经网络将一次呈现 4 个示例,但一个 epoch 仍将定义为一次完整地通过所有 32 个示例。所以在这种情况下,网络将一次处理 4 个示例,并且至少从理论上讲,将调用正向传递(和反向传递)32 / 4 = 8 次。

在极端情况下,当您的 batch_size 为 1 时,这就是普通的旧式随机梯度下降法。当你的 batch_size 大于 1 时,它被称为批量梯度下降。

and batch_size is 4, in theory when I call the fit function will the function go over all these inputs in each nb_epoch?

是的,每个时期都是对所有个训练样本

的迭代

and does the batch_size need to be 4 in order for this time window to work?

不,这些是完全不相关的事情。 Batch 只是训练数据的一个子集,用于计算成本函数真实梯度的近似值。批次越大 - 越接近真实梯度(和原始 梯度下降),但训练速度变慢。接近 1 - 它变得越来越随机,噪声近似(并且更接近 随机梯度下降 )。您匹配 batch_size 和数据维度的事实只是一个奇怪的巧合,没有任何意义。

让我把它放在更一般的设置中,你在带有附加损失函数(神经网络通常使用的)的梯度下降中所做的是与梯度相反的,即

grad_theta 1/N SUM_i=1^N loss(x_i, pred(x_i), y_i|theta) =  
 = 1/N SUM_i=1^N grad_theta loss(x_i, pred(x_i), y_i|theta)

其中 losspred(预测)与 y_i 相比的一些损失函数。

在基于批处理的场景(粗略的想法)中,您不需要遍历所有示例,而是一些严格的子集,例如 batch = {(x_1, y_1), (x_5, y_5), (x_89, y_89) ... } 并使用形式梯度的近似值

1/|batch| SUM_(x_i, y_i) in batch: grad_theta loss(x_i, pred(x_i), y_i|theta)

如您所见,这与 x_i 所在的 space 没有任何关系,因此与数据的维度无关。