对于一个参数,梯度下降比另一个参数收敛得更快

时间:2017-10-18 08:18:19

标签: javascript machine-learning linear-regression

我在JavaScript中使用渐变下降实现了我的第一个(单变量)线性回归。

const LEARNING_RATE = 0.000001;

let m = 0;
let b = 0;

const hypothesis = x => m * x + b;

const learn = (alpha) => {
  if (x.length <= 0) return;

  let sum1 = 0;
  let sum2 = 0;

  for (var i = 0; i < x.length; i++) {
    sum1 += hypothesis(x[i]) - y[i];
    sum2 += (hypothesis(x[i]) - y[i]) * x[i];
  }

  b = b - alpha * sum1 / (x.length);
  m = m - alpha * sum2 / (x.length);
}

// repeat until convergence learn(LEARNING_RATE);

假设中m的斜率很快调整,但y轴的交点需要调整年龄。我不得不使用不同的学习率来使其发挥作用。

const learn = (alpha) => {
  if (x.length <= 0) return;

  let sum1 = 0;
  let sum2 = 0;

  for (var i = 0; i < x.length; i++) {
    sum1 += hypothesis(x[i]) - y[i];
    sum2 += (hypothesis(x[i]) - y[i]) * x[i];
  }

  b = b - 100000 * alpha * sum1 / (x.length);
  m = m - alpha * sum2 / (x.length);
}

有人能指出我对算法的错误方向吗?它可以在GitHub repositorythis article中找到。

1 个答案:

答案 0 :(得分:0)

首先,你必须考虑收敛速度到全局最小值而不是偏见变化的速度。模型中没有错误(也许您只是忘记2 / N系数,但对于m和b系数,此参数将为1。)。

如您所知,梯度下降法使用预测误差来更新每次迭代的权重。因此,如果您的偏见得到小错误,那么更新将获得小的更改。这是模型的正常行为。

There are示例有很好的解释。

PS。学习率的自定义更改可能会导致异常行为和问题,降低到最小值。建议this courselink for course I have posted above