【问题标题】:How does fminunc optimise the learning rate (step proportion) value in gradient descent?fminunc 如何优化梯度下降中的学习率(步长比例)值?
【发布时间】:2012-12-22 09:33:43
【问题描述】:

我目前正在研究一种机器学习算法,我注意到当我使用 Matlab 的 fminunc 时,与我手动更新参数时相比,算法收敛到全局最小值的速度非常快(迭代次数很少):

thetas[j] = thetas[j] - (alpha*gradient)/sampleNum;

我认为这是因为我天真地假设alpha(步长比例)是恒定的。

那么,如何在 C 中实现类似fminunc 的东西?

我尝试从一个大的alpha 开始,如果当前成本大于之前的成本,则对其进行调整。当最小化函数的形状不是线性时,就会出现问题,因为alpha 最初可以得到一个非常小的值,并且当函数形状趋于“平坦”时无法返回到更大的值(并且更大的步长可以被采取)。

【问题讨论】:

  • Matlab 的fminunc 不使用梯度下降。它使用准牛顿方法,无论您如何控制步长,它都可以显着加快。
  • @3lectrologos 感谢您的洞察力。这可以解释为什么我在使用fminunc 时得到非常好的二次函数结果。所以,也许我应该尝试使用不同的方法来改进我的alpha 猜测。根据您的经验,与梯度下降相比,使用准牛顿方法有任何缺点(除此之外,它可能更难实现)
  • 我可能不是回答这个问题的合适人选,但我认为在类似牛顿的方法中有一些实现细节,如果您尝试从头开始实现它们可能会有些棘手(例如数值问题)。在性能方面,我不知道有什么理由更喜欢梯度下降,除非你的问题真的很大(请参阅随机梯度下降)。
  • 既然你的第一条评论以某种方式回答了我的问题(我错误地认为fminunc 使用梯度下降并且可能提高我的步长猜测不会把我带到正确的方向)你能把它转换成一个答案,所以我可以接受。我将进一步研究准牛顿方法。谢谢!

标签: c matlab machine-learning gradient-descent


【解决方案1】:

Matlab 的 fminunc 实际上并没有使用梯度下降,而是类似牛顿的方法(BFGS-based quasi-Newton or trust-region 取决于问题的大小),无论您如何选择步长,这通常都比梯度下降快得多.

如果你想要更快的收敛,也许你应该研究这种方法。

【讨论】:

    猜你喜欢
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2018-03-26
    • 2013-05-14
    • 2023-03-06
    • 2016-10-27
    相关资源
    最近更新 更多