【问题标题】:Implementing gradient descent for multiple variables in Octave using "sum"使用“sum”在 Octave 中实现多个变量的梯度下降
【发布时间】:2016-06-27 00:09:37
【问题描述】:

我正在学习 Andrew Ng 的机器学习课程,我正在尝试围绕多个变量的梯度下降的矢量化实现,这是课程中的一个可选练习。

这是有问题的算法(取自here):

我只是不能使用sum 在八度音阶中执行此操作,但我不确定如何将 x(i) - y(i) 的假设之和乘以所有变量 xj(i)。我尝试了以下代码的不同迭代但无济于事(尺寸不正确或答案错误):

theta = theta - alpha/m * sum(X * theta - y) * X;

然而,正确的答案是完全不明显的(无论如何,对于像我这样的线性代数初学者,来自here):

theta = theta - (alpha/m *  (X * theta-y)' * X)';

对于涉及sum 的情况,是否有经验法则来管理上述转换?

如果是这样,是否存在上述相反的版本(即从基于sum 的解决方案到一般乘法的解决方案),因为我能够使用sum 为梯度下降提出正确的实现单个变量(虽然不是很优雅):

temp0 = theta(1) - (alpha/m * sum(X * theta - y));
temp1 = theta(2) - (alpha/m * sum((X * theta - y)' * X(:, 2)));

theta(1) = temp0;
theta(2) = temp1;

请注意,这仅涉及矢量化实现,尽管关于如何完成此操作有几个问题,但我的问题主要涉及使用 sum 在 Octave 中实现算法。

【问题讨论】:

标签: machine-learning octave gradient-descent


【解决方案1】:

一般的“经验法则”如下,如果你遇到以下形式的东西

SUM_i f(x_i, y_i, ...) g(a_i, b_i, ...)

然后您可以通过

轻松对其进行矢量化(这就是上面所做的)
f(x, y, ...)' * g(a, b, ...)

因为这只是一个典型的点积,在数学中(在有限维欧几里得空间中)看起来像

<A, B> = SUM_i A_i B_i = A'B

因此

(X * theta-y)' * X)

只是

<X * theta-y), X> = <H_theta(X) - y, X> = SUM_i (H_theta(X_i) - y_i) X_i

正如您所见,这两种方式都适用,因为这只是点积的数学定义。

【讨论】:

    【解决方案2】:

    具体参考您问题的这一部分 - “我不确定如何将 x(i) - y(i) 的假设之和乘以所有变量 xj(i)。”

    在 Octave 中,您可以使用“.”将 xj(i) 与所有预测相乘,因此可以写为:

    m = size(X, 1);
    predictions = X * theta;
    sqrErrors = (predictions-y).^2;
    J = 1 / (2*m) * sum(sqrErrors);
    

    【讨论】:

      【解决方案3】:

      向量乘法自动包括计算乘积的总和。所以你不必指定 sum() 函数。通过使用 sum() 函数,您将向量转换为标量,这很糟糕。

      【讨论】:

        【解决方案4】:

        您实际上不想在这里使用求和,因为您尝试计算的是所有 thetas 的单个值,而不是总成本 J。当您在一行代码中执行此操作时,如果您将其相加您最终得到一个值(所有 theta 的总和)。 当您在上一个练习中逐个计算 theta 的值时,求和是正确的,尽管没有必要。这同样适用:

        temp0 = theta(1) - (alpha/m * (X * theta - y)' * X(:, 1));
        temp1 = theta(2) - (alpha/m * (X * theta - y)' * X(:, 2));
        
        theta(1) = temp0;
        theta(2) = temp1;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-25
          • 2013-10-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-28
          相关资源
          最近更新 更多