梯度下降 "until converge" 问题

Gradient Descent "until converge" question

下面是我的机器学习教授提供的线性回归梯度下降的 python 实现。我相信我理解它是如何工作的,但是,教授在讲座中建议这不是算法的完整实现,因为它应该重复直到 theta_0(m) 和 theta_1(c)收敛。他建议我们尝试修改这个实现,让它执行直到收敛,而不是在 epochs 上执行,以更加熟悉算法,尽管我不太确定从哪里开始。有什么建议吗?

# Building the model
m = 0
c = 0

L = 0.0001  # The learning Rate
epochs = 1000  # The number of iterations to perform gradient descent

n = float(len(X)) # Number of elements in X

# Performing Gradient Descent 
for i in range(epochs): 
    Y_pred = m*X + c  # The current predicted value of Y
    D_m = (-2/n) * sum(X * (Y - Y_pred))  # Derivative wrt m
    D_c = (-2/n) * sum(Y - Y_pred)  # Derivative wrt c
    m = m - L * D_m  # Update m
    c = c - L * D_c  # Update c
    
print (m, c)```

从本质上讲,收敛是指损失稳定在某个值,即它或多或少变得恒定。因此,要在收敛时停止梯度下降,只需在每次梯度下降迭代时使用 m 和 c 的值计算成本函数(也称为损失函数)。您可以为损失添加一个阈值,或者检查它是否变为常量,即您的模型收敛时。

我觉得他的意思是保持运行直到Loss对theta_0(m)和theta_1(c)的导数趋近于0或者损失函数没有更多的改进。 您可以做的是删除 运行 直到纪元数的 for 循环,并添加一个 while 循环,该循环将保持 运行 直到 m 和 c 不再改善(损失函数值几乎变为静态)。