我是机器学习的新手。我从带有梯度下降的线性回归开始。我有相关的Python代码,并且理解这种方法。我的问题是:梯度下降算法最小化函数,我能绘制这个函数吗?我想看看这个函数的最小值是什么样子的。这可能吗?我的代码如下:
import matplotlib.pyplot as plt import numpy as npdef sigmoid_activation(x): return 1.0 / (1 + np.exp(-x))X = np.array([ [2.13, 5.49], [8.35, 6.74], [8.17, 5.79], [0.62, 8.54], [2.74, 6.92] ])y = [0, 1, 1, 0, 0]xdata = [row[0] for row in X] ydata = [row[1] for row in X]X = np.c_[np.ones((X.shape[0])), X] W = np.random.uniform(size=(X.shape[1], ))lossHistory = []for epoch in np.arange(0, 5): preds = sigmoid_activation(X.dot(W)) error = preds - y loss = np.sum(error ** 2) lossHistory.append(loss) gradient = X.T.dot(error) / X.shape[0] W += - 0.44 * gradientplt.scatter(xdata, ydata) plt.show()plt.plot(np.arange(0, 5), lossHistory) plt.show()for i in np.random.choice(5, 5): activation = sigmoid_activation(X[i].dot(W)) label = 0 if activation < 0.5 else 1 print("activation={:.4f}; predicted_label={}, true_label={}".format( activation, label, y[i]))Y = (-W[0] - (W[1] * X)) / W[2]plt.scatter(X[:, 1], X[:, 2], c=y) plt.plot(X, Y, "r-") plt.show()
回答:
冒着显而易见的风险… 你可以简单地用matplotlib绘制lossHistory
。还是我错过了什么?
编辑:显然,原帖作者问的是梯度下降(GD)在最小化什么。我将在这里尝试回答,希望能回答原问题。
GD算法是一种通用的算法,用于在参数空间中找到函数的最小值。在你的例子中(通常在神经网络中也是这样使用),你想找到损失函数的最小值:均方误差(MSE)。你通过以下方式实现了GD算法来更新权重:
gradient = X.T.dot(error) / X.shape[0]W += - 0.44 * gradient
梯度只是你的损失函数(MSE)对权重的偏导数。因此,你实际上是在最小化损失函数(MSE)。然后你用0.44的学习率更新你的权重。接着,你简单地将损失函数的值保存到数组中:
loss = np.sum(error ** 2)lossHistory.append(loss)
因此,lossHistory
数组包含了你可以绘制来检查学习过程的成本(或损失)函数。绘图应该显示出某种下降的趋势。这个解释对你有帮助吗?
祝好,Umberto