梯度下降 "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 不再改善(损失函数值几乎变为静态)。
下面是我的机器学习教授提供的线性回归梯度下降的 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 不再改善(损失函数值几乎变为静态)。