SkikitLearn 学习曲线强烈依赖于 MLPClassifier 的批量大小???或者:如何诊断 NN 的偏差/方差?

SkikitLearn learning curve strongly dependent on batch size of MLPClassifier ??? Or: how to diagnose bias/ variance for NN?

我目前正在 ScikitLearn 中使用求解器 adam 和激活 relu 处理两个 类 的分类问题。为了探索我的分类器是否存在高偏差或高方差,我使用 Scikitlearns 内置函数绘制了学习曲线:

https://scikit-learn.org/stable/auto_examples/model_selection/plot_learning_curve.html

我正在使用 Group-K_Fold 交叉验证 8 分割。 但是,我发现我的学习曲线在很大程度上取决于我的分类器的批量大小:

https://imgur.com/a/FOaWKN1

应该是这样的吗?我认为学习曲线正在解决依赖于独立于任何批次/时期的训练数据部分的准确性分数?我真的可以将这个内置函数用于批处理方法吗?如果是,我应该选择哪个批量大小(完整批量或批量大小 = 训练示例的数量或介于两者之间的数量)以及我从中得到什么诊断?或者你通常如何诊断神经网络分类器的偏差/方差问题?

非常感谢您的帮助!

是的,学习曲线取决于批量大小。

最佳批量大小取决于数据类型和数据总量。
在理想情况下,批量大小为 1 是最好的,但实际上,对于大量数据,这种方法不可行。
我认为你必须通过实验来做到这一点,因为你不能轻易计算出最佳值。

此外,当您更改批量大小时,您可能还想更改学习率,以便您希望保持对过程的控制。
但确实有一个工具来找到最佳的(内存和时间方面的)批量大小是非常有趣的。


什么是随机梯度下降?

随机梯度下降,通常缩写为 SGD,是梯度下降算法的一种变体,它计算误差并为训练数据集中的每个示例更新模型。

每个训练样例的模型更新意味着随机梯度下降通常被称为在线机器学习算法。

什么是批量梯度下降?

批量梯度下降是梯度下降算法的一种变体,它计算训练数据集中每个示例的误差,但仅在评估完所有训练示例后才更新模型。

整个训练数据集的一个循环称为一个训练时期。因此,常说批量梯度下降在每个训练epoch结束时进行模型更新。

什么是小批量梯度下降?

小批量梯度下降是梯度下降算法的一种变体,它将训练数据集分成小批量,用于计算模型误差和更新模型系数。

实施可以选择对小批量的梯度求和或取梯度的平均值,这会进一步降低梯度的方差。

小批量梯度下降寻求在随机梯度下降的稳健性和批量梯度下降的效率之间找到平衡。它是深度学习领域最常用的梯度下降实现。


来源:https://machinelearningmastery.com/gentle-introduction-mini-batch-gradient-descent-configure-batch-size/