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