梯度下降:thetas 不收敛

Gradient Descent: thetas not converging

我正在尝试使用 Octave 计算梯度下降。每次迭代,我的 thetas 都会呈指数级增长。我不确定是什么问题,因为我正在直接复制另一个函数。

这是我的矩阵:

X = 1 98
    1 94
    1 93
    1 88
    1 84
    1 82
    1 79

y = 97
    94
    94
    78
    85
    85
    76

theta = 1
        1

我正在使用这个公式:

theta = theta - 0.001 * (1 / 7) * (X' * (X * theta - y))

我使用正规方程计算出最佳 thetas 是多少,但仅经过几次迭代后,我的 thetas 就达到了数千。知道出了什么问题吗?

如果数值爆表,说明你的步子太大了。从本质上讲,您每次都在超调。如果您的步幅太大,您将看到一系列估计值,例如 [100,-100,1000,-1000, ...]...估计值将在连续的大正数和负数之间振荡。最简单的解决方法是将步长常数从

更改为

0.001 * (1 / 7)

类似于

1e-6

或者甚至更小。

你似乎在使用梯度下降进行线性回归,你的学习率太高了,正如前面的答案中提到的那样,这个post只是添加一些可视化并解释到底发生了什么在你的情况下。

如下图所示,学习率足够高,可以收敛到凸成本面的全局最小值,并且theta值振荡并错过最小点,因为步长太大(如下图所示) RHS 图)。如果降低学习率(如 LHS),收敛率会降低,但最终会达到全局最小值。

你需要找到一个合适的alpha(学习率),这样收敛速度才不会太慢或太高(这取决于数据,缩放特征会有所帮助)。