我目前正致力于机器学习算法,我注意到当我使用Matlab的fminunc
时,与手动更新参数时相比,算法收敛到全局最小值(几次迭代):
thetas[j] = thetas[j] - (alpha*gradient)/sampleNum;
我认为这是因为我天真地认为alpha
(步比例)是不变的。
那么,如何在C中实现类似fminunc
的内容?
我尝试从大alpha
开始,如果当前成本大于之前的成本,则调整它。当最小化函数的形状不是线性的时,问题出现了,因为alpha
最初会得到一个非常小的值,而当函数形状趋于变得“平坦”(并且更大)时,它不会返回到更大的值。可以采取步骤)。
答案 0 :(得分:3)
Matlab的fminunc
实际上并不使用渐变下降,而是使用类似牛顿的方法(BFGS-based quasi-Newton or trust-region,具体取决于问题大小),无论你如何,它通常都比梯度下降快得多选择步长。
如果你想要更快的收敛,也许你应该研究这种方法。