fminunc如何优化梯度下降的学习率(步长比)值?

时间:2012-12-22 00:21:54

标签: c matlab machine-learning gradient-descent

我目前正致力于机器学习算法,我注意到当我使用Matlab的fminunc时,与手动更新参数时相比,算法收敛到全局最小值(几次迭代):

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

我认为这是因为我天真地认为alpha(步比例)是不变的。

那么,如何在C中实现类似fminunc的内容?

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

1 个答案:

答案 0 :(得分:3)

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

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

相关问题