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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SkikitLearn学习曲线强烈依赖于MLPClassifier的批量大小???或者:如何诊断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)是梯度下降算法的变体,其计算误差并更新训练数据集中每个示例的模型。

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

什么是批量梯度下降?

批量梯度下降是梯度下降算法的变体,其计算训练数据集中每个示例的误差,但仅在评估了所有训练样本之后更新模型。

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

什么是Mini-Batch Gradient Descent?

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

实现可以选择对小批量的梯度求和或取梯度的平均值,这进一步减小了梯度的方差。

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


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

以上是关于SkikitLearn学习曲线强烈依赖于MLPClassifier的批量大小???或者:如何诊断NN的偏差/方差?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA学习曲线存技术讨论

HTML5干货整理详解canvas的学习方法及学习曲线(收藏保存)

ScikitLearn 中关于 epochs 的学习曲线解释

Linux软件间的依赖关系学习

60分钟内从零起步驾驭Hive实战学习笔记

调参是啥