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

标签 c matlab machine-learning gradient-descent

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

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

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

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

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

最佳答案

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

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

关于c - fminunc如何优化梯度下降中的学习率(步长比例)值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13998880/

相关文章:

c - 文件可以打开但无法读取 QNX

performance - 仅计算矩阵平方的对角线的快速方法

python - 使用sklearn计算仅给定单词列表的tf-idf权重

python - sklearn.roc_auc_score() 和 sklearn.plot_roc_curve() 之间的区别

machine-learning - 为什么weka中的KNN实现运行得更快?

c - C 中的简单字符串密码(const char 困难)

c - 从 (C) 中的文件中删除字节而不创建新文件

c - 未定义行为有多未定义?

matlab - Regionprops 方向对于逻辑和整数的行为有所不同

python - 在python中创建v7.3的.mat文件