mllib是怎么计算梯度的

how did mllib calculate gradient

求mllib专家帮忙讲解线性回归代码。在LeastSquaresGradient.compute

override def compute(
    data: Vector,
    label: Double,
    weights: Vector,
    cumGradient: Vector): Double = {
  val diff = dot(data, weights) - label
  axpy(diff, data, cumGradient)
  diff * diff / 2.0
}

cumGradient 是使用 axpy 计算的,它只是 y += a * x,或者这里 cumGradient += diff * 数据

我想了很久,但可以联系到梯度下降文档中定义的梯度计算。理论上,梯度是在一个特定的加权参数中损失对 delta 的斜率。我在这个 axpy 实现中看不到任何类似的东西。

有人可以解释一下吗?

这不是一个真正的编程问题,而是为了让您了解最小二乘回归的成本函数定义为

其中 theta 是权重向量。

上述代价函数的偏导数为:

如果对所有 theta 进行计算:

很明显,以上等同于 cumGradient += diff * data 计算所有数据点并引用 Wikipedia

in a rectangular coordinate system, the gradient is the vector field whose components are the partial derivatives of f