迷你批次梯度下降,亚当和历元

时间:2018-07-17 05:36:32

标签: python machine-learning regression

我正在上一门有关Python深度学习的课程,并且只停留在示例的以下几行:

regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')
regressor.fit(X_train, y_train, epochs = 100, batch_size = 32)

根据我知道的定义, 1个纪元=遍历所有训练示例一次以进行一次权重更新。

batch_size用于优化程序,该优化程序将训练示例分成小批。每个小批量的大小为batch_size

我不熟悉亚当优化,但我相信它是GD或Mini batch GD的变体。梯度下降-具有一大批(所有数据),但有多个时期。迷你批次渐变下降-使用多个迷你批次,但只有1个时期。

然后,代码为什么同时具有多个迷你批处理和多个时期? 这段代码中的epoch的含义是否与上面的定义不同?

3 个答案:

答案 0 :(得分:1)

假设您有3200个示例来训练模型。然后1个历元=进行3200个训练示例,但如果设置batch_size = 32,则进行100次反向传播。

答案 1 :(得分:1)

尽管其他答案基本上已经为您提供了正确的结果,但我想澄清您在帖子中提出的几点,并加以纠正。
不同术语的(公认的)定义如下。

  • 梯度下降(GD):一种在您的函数中找到(局部或全局)最优值的迭代方法。默认梯度下降将遍历所有示例(一个时期),然后一次更新。
  • 随机梯度下降(SGD):与常规GD不同,它将通过一个示例,然后立即更新。这样,您可以获得更高的更新率。
  • 最小批处理:由于SGD的频繁更新非常昂贵(更新梯度非常乏味),在某些情况下可能导致更差的结果,因此汇总< em>将多个(但不是全部)示例合并为一个更新。这意味着,您将浏览 n 个示例(其中 n 是您的批量大小),然后然后更新。这仍然会导致在一个纪元内进行多次更新,但不一定与SGD一样多。
  • Epoch :一个纪元只是指您遍历所有训练数据。通常,您可以根据需要执行任意多个时期。

请注意,您对ADAM的看法是正确的。通常,它被视为香草梯度下降的一种更强大的变体,因为它使用更复杂的启发式算法(一阶导数)来加速和稳定收敛。

答案 2 :(得分:1)

您对时代 batch_size 的理解似乎是正确的。

下面的精度更高。

一个时期对应于整个训练数据集扫描。可以通过多种方式执行此扫描。

  • 批处理模式:整个训练数据集的损失梯度用于更新模型权重。一个优化迭代对应一个纪元。
  • 随机模式:使用一个训练数据集点的损失梯度来更新模型权重。如果训练数据集中有N个示例,则N个优化迭代对应一个时期。
  • 小批量模式:训练数据集中的一小部分样本的损失梯度用于更新模型权重。该样本的大小为 batch_size 。如果训练数据集中有N_examples个示例,则N_examples/batch_size个优化迭代对应一个时期。

在您的情况下(epochs=100batch_size=32),regressor将扫描整个数据集100个项目,并以32个大小的微型数据批次(即 Mini-batch模式)。

如果我假设您的数据集大小为N_examples,则regressor将执行N_examples/32模型权重优化迭代每个时期

因此,对于100个时期:100*N_examples/32模型权重优化迭代。

总而言之,具有epoch>1和具有batch_size>1是兼容的。