1

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

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

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

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

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

4

1 回答 1

4

Matlabfminunc实际上并不使用梯度下降,而是使用类似牛顿的方法(基于 BFGS 的准牛顿或信任区域,具体取决于问题大小),无论您如何选择步骤,它们通常都比梯度下降快得多尺寸。

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

于 2012-12-22T01:33:43.967 回答