Matrix 梯度下降:θ不收敛

Matrix 梯度下降:θ不收敛,matrix,machine-learning,octave,linear-regression,gradient-descent,Matrix,Machine Learning,Octave,Linear Regression,Gradient Descent,我想用八度音阶来计算梯度下降。每次迭代,θ都会成倍增大。我不确定问题出在哪里,因为我正在直接复制另一个函数 以下是我的矩阵: 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 *

我想用八度音阶来计算梯度下降。每次迭代,θ都会成倍增大。我不确定问题出在哪里,因为我正在直接复制另一个函数

以下是我的矩阵:

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))

我用正规方程算出了最佳θ,但经过几次迭代,我的θ就达到了几千。知道出了什么问题吗?

如果值爆炸了,那么您的步长一定太大了。从本质上说,你每次都做得太过分了。如果您的步长太大,您将看到一系列的估计值,如[100,-1001000,-1000,…]。。。估计值将在连续较大的正数和负数之间波动。最简单的修复方法是将步长常数从

0.001*(1/7)

差不多

1e-6


或者甚至更小

您似乎在使用梯度下降法进行线性回归,您的学习率太高,正如前面的答案中所提到的,这篇文章只是为了增加一些可视化效果,并准确地解释您的情况

如下图所示,由于步长过大(如RHS图所示),学习率高到足以在凸成本曲面中收敛到全局最小值,θ值振荡并错过最小点。如果降低学习速度(如LHS),收敛速度将降低,但最终会达到全局最小值

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


为了避免数值不稳定,实际上最好也缩放数据。问题是X和Y都在100秒内,X和Y除以100不会改变解,但会产生相同的效果(有效地改变学习率),但不会失去数值稳定性(大数与小数相乘是基本的不稳定运算之一)