【问题标题】:Gradient descent math implementation explanation needed.需要梯度下降数学实现解释。
【发布时间】:2017-03-26 00:58:09
【问题描述】:

我知道解决方案,但我不明白如何将以下等式转换为代码。

  • 为什么总和不见了?
  • 为什么我们要转置 ((sigmoid(X * theta)-y) 表达式?

解决方案

grad  = (1/m) * ((sigmoid(X * theta)-y)' * X);

【问题讨论】:

  • 总和没有丢失。左方括号内的求和符号适用于所有术语。

标签: math machine-learning linear-algebra linear-regression logistic-regression


【解决方案1】:

如前所述,您发布的数学表达式是成本函数,而您显示的代码 sn-p 是梯度。

但是,总和并没有丢失。让我们分解一下。

代价函数相对于第j个参数的梯度是

使用X * theta,您将获得一个包含所有数据点和参数向量的点积的向量。

使用sigmoid(X * theta),您可以评估每个点积的 sigmoid。

使用X * theta)-y,您将获得一个包含所有预测与实际标签之间差异的向量。

使用sigmoid(X * theta)-y)' * X,您正在转置 sigmoid 评估向量并计算其与数据集的每一列的点积(即每个数据点的每个 x_j)。

想一想,您会发现这正是表达式中的求和,但对参数向量的所有条目进行了评估,而不仅仅是j

【讨论】:

    【解决方案2】:

    原线 J(theta) 表示逻辑回归的成本函数。

    您展示的代码grad = ... 是J(theta) 相对于参数的梯度;也就是说,grad 是 d/dtheta J(theta) 的实现。导数很重要,因为它在梯度下降中用于将参数移向其最佳值(以最小化成本 J(theta))。

    下面是渐变的公式,用红色标出,取自下面的第一个link。请注意,J(theta) 与上面的公式相同,h(x) 表示 sigmoid 函数。

    所有训练示例的总梯度需要对 m 求和。在上面grad 的代码中,由于省略了求和,您正在计算一个训练示例的梯度;因此,您的代码可能正在计算 stochastic gradient descent 的梯度,而不是完全梯度下降。

    有关更多信息,您可以谷歌搜索“逻辑回归成本函数导数”,这导致这些链接:

    1. 这个特别有你需要的一切:http://feature-space.com/2011/10/28/logistic-cost-function-derivative/

    2. 这些显然是 Andrew Ng 关于机器学习和梯度下降逻辑回归课程的一些讲义:http://www.holehouse.org/mlclass/06_Logistic_Regression.html

    3. 如何逐步计算导数的说明:https://math.stackexchange.com/questions/477207/derivative-of-cost-function-for-logistic-regression

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2013-11-22
      • 2016-09-25
      • 2014-03-14
      • 2012-05-22
      • 2021-02-20
      相关资源
      最近更新 更多