梯度下降 - 我可以绘制最小化的函数吗?线性回归

Posted

技术标签:

【中文标题】梯度下降 - 我可以绘制最小化的函数吗?线性回归【英文标题】:Gradient descent - can I draw function that I will minimize? Linear regression 【发布时间】:2018-08-29 20:48:51 【问题描述】:

我是机器学习的新手。我从梯度下降的线性回归开始。我有这方面的python代码,我以这种方式理解。我的问题是:梯度下降算法最小化函数,我可以绘制这个函数吗?我想看看最小值的函数是什么样的。有可能吗? 我的代码:

import matplotlib.pyplot as plt import numpy as np

def 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 * gradient


plt.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()

【问题讨论】:

【参考方案1】:

有明显的风险......您可以使用 matplotlib 简单地绘制lossHistory。还是我错过了什么?

编辑:显然 OP 询问梯度下降 (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 数组包含您的成本(或损失)函数,您可以绘制该函数来检查您的学习过程。情节应该显示一些减少。这个解释对你有帮助吗?

最好, 翁贝托

【讨论】:

是的,我画了。我不知道如何将 lossHistory 函数与梯度下降联系起来。梯度下降在 lossHistory 函数中找到最小值? 好的,谢谢解释。现在对我来说很清楚......我可以通过哪种方式在我的 lossHistory 函数上绘制点,如下所示:ml-cheatsheet.readthedocs.io/en/latest/_images/…? 现在我们正在讨论两个不同的事情。您显示的图是参数空间中的成本函数,叉号是每次更新后的权重值。这与成本函数与时期数不同。如果您想绘制与您的绘图类似的东西,您需要首先保存所有权重值并将它们绘制在参数空间中的成本函数表面上。你遇到的问题是你的参数空间有 3 个维度(偏差 + 权重),所以你不能像你提到的那样做一个图(你需要 4 个 z 轴)......希望有帮助

以上是关于梯度下降 - 我可以绘制最小化的函数吗?线性回归的主要内容,如果未能解决你的问题,请参考以下文章

神经网络梯度下降中的反向传播与线性回归

吴恩达机器学习--线性回归

线性回归和梯度下降

当我们可以解析地解决线性回归时,为啥梯度下降

吴恩达机器学习学习笔记——2.7第一个学习算法=线性回归+梯度下降

梯度下降算法&线性回归算法