【发布时间】:2021-12-18 23:11:18
【问题描述】:
想了解SGD和GD的区别就最简单的函数例子:y=x**2
GD的作用在这里:
def gradient_descent(
gradient, start, learn_rate, n_iter=50, tolerance=1e-06
):
vector = start
for _ in range(n_iter):
diff = -learn_rate * gradient(vector)
if np.all(np.abs(diff) <= tolerance):
break
vector += diff
return vector
为了找到 x**2 函数的最小值,我们接下来应该做(答案几乎是 0,这是正确的):
gradient_descent(gradient=lambda v: 2 * x, start=10.0, learn_rate=0.2)
我的理解是,在经典 GD 中,梯度是根据所有数据点精确计算的。我上面展示的实现中的“所有数据点”是什么?
此外,我们应该如何对这个函数进行现代化改造,以便将其称为 SGD(SGD 使用单个数据点来计算梯度。gradient_descent 函数中的“单个点”在哪里?)
【问题讨论】:
标签: python machine-learning gradient-descent sgd