【问题标题】:How to check if gradient descent with multiple variables converged correctly?如何检查具有多个变量的梯度下降是否正确收敛?
【发布时间】:2016-02-22 13:22:11
【问题描述】:

在具有 1 个变量的线性回归中,我可以清楚地看到绘图预测线,并且可以查看它是否正确拟合训练数据。我只是创建一个带有 1 个变量和输出的图,并根据找到的 Theta 0 和 Theta 1 的值构建预测线。所以,它看起来像这样:


但是如何检查在多个变量/特征上实现的梯度下降结果的有效性。例如,如果特征数是 4 或 5。如何检查它是否正常工作并找到所有 theta 的值是否有效?我是否必须仅依赖针对执行的迭代次数绘制的成本函数?

【问题讨论】:

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


    【解决方案1】:

    梯度下降收敛到局部最小值,这意味着一阶导数应为零,二阶导数为非正数。检查这两个矩阵会告诉你算法是否已经收敛。

    【讨论】:

    • 值得注意的是,在实践中导数很少为零(与任何其他值一样 - 在连续函数中实现任何特定值的概率几乎为零),此外,在有限精度算术中,“零”相当奇怪的术语。通常使用近似值,例如假设 10e-20 为零,这并不意味着它收敛,它仅表示“误差表面如此平坦,我们的算法无法更进一步”跨度>
    • 什么应该为零的第一个导数?
    • @kikatuso 我的意思是执行梯度下降的函数的一阶导数。
    【解决方案2】:

    我们可以将梯度下降视为解决f'(x) = 0 的问题,其中f' 表示f 的梯度。为了检查这个问题的收敛性,据我所知,标准方法是计算每次迭代的差异,看看它是否收敛到 0。
    也就是说,检查||f'(x)||(或其平方)是否收敛到0。

    【讨论】:

    • 这个答案是 Don Reba 答案的一个子集
    • @lejlot,不同意。我将 Don Reba 的回答(和您的评论)理解为严格比较导数与零的建议
    • 没有“检查是否聚集为零”之类的东西,没有办法以其他方式检查它:比较值是否很小(见他的回答)或检查它是否“确实变化不大”,这相当于检查梯度的梯度,因此 - 二阶导数(再次 - 正是他在第二部分中建议的)。
    【解决方案3】:

    您可以尝试一些事情。

    1) 检查您的成本/能量函数是否没有随着迭代的进行而改进。使用“abs(E_after - E_before)

    2) 检查您的变量是否已停止变化。您可以选择与上述非常相似的策略来检查这一点。

    实际上没有完美的方法来完全确保你的函数已经收敛,但是上面提到的一些事情是人们通常会尝试的。

    祝你好运!

    【讨论】:

    • 批量梯度下降呢?
    猜你喜欢
    • 2013-06-21
    • 2015-02-18
    • 2020-04-28
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多