【问题标题】:How can I know whether the cost function has become the minimum or not?我如何知道成本函数是否已成为最小值?
【发布时间】:2020-04-20 22:37:49
【问题描述】:

我正在尝试在不使用 ML 相关库的情况下实现逻辑回归,并且在优化成本函数时遇到了麻烦。

我在迭代过程中存储了成本函数的历史。

成本函数一开始是 0.68,然后下降到 0.66 左右,之后又增加,甚至高于初始成本函数。

这是否意味着我的代码中有一些错误?

或者,0.66 可以是成本函数的最小值吗?

如何知道当前的代价函数值是最小值?

【问题讨论】:

    标签: machine-learning logistic-regression gradient-descent


    【解决方案1】:

    损失函数/优化步骤可能存在缺陷,因为从 0.68 到 0.66 没有太多优化,而理想情况下损失应该减少更多。此外,优化是发散的而不是收敛的。要确认 0.66 是否确实是您的训练损失的全局最小值(极不可能),您需要使用标准 ML 框架(例如 Tensorflow / PyTorch)交叉检查性能和模型网络/损失函数/优化实现。

    有几种方法可以通过训练分析损失函数的进度,并防止模型在达到局部最优后发散,其中一些方法是:

    • 使用KerasEarlyStopping- 一个回调,它允许您指定要监控的性能度量以及在损失开始增加时停止训练过程的触发器(EarlyStopping example)。但是,由于您不使用 Keras 或任何其他 ML 库,您可以只编写一个 sn-p 代码来跟踪最近 5 个 epoch 的损失值趋势,并确定是否训练需要停止并保存最佳模型检查点。
    • TensorBoard 等可视化包允许将损失值记录为摘要(同样不可能,因为您没有使用 ML 可视化包)。因此,您可以使用matplotlib 来绘制各个时期的损失值,这将有助于可视化优化趋势,尤其是在您进行大量时期的训练时。

    【讨论】:

    • 另一个检查结果的好选择是 scikit learn 库。或者您可以创建一个非常简单的数据集,例如几个 x,y 点并使用一个变量进行线性回归。创建一个测试用例应该很容易,您可以在其中设置一个远离全局最小值的初始条件,然后验证您的梯度下降解决方案是一种改进。
    猜你喜欢
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多