1

当使用完全相同的数据时,我正在尝试运行梯度下降并且无法获得与内置 fminunc 八度音程相同的结果

我的代码是

%for 5000 iterations
for iter = 1:5000

%%Calculate the cost and the new gradient
[cost, grad] = costFunction(initial_theta, X, y);


%%Gradient = Old Gradient - (Learning Rate * New Gradient)
initial_theta = initial_theta - (alpha * grad);

end 

当给定示例 (X,y) 和参数 (theta) 时,costFunction 计算成本和梯度。

一个内置的 octave 函数 fminunc 也调用 costFunction 并使用相同的数据在更少的迭代中找到更好的答案。

鉴于 octave 使用相同的成本函数,我假设 costFunction 是正确的。

我已经尝试降低学习率,以防我达到局部最小值并增加迭代次数,成本停止下降,所以我认为它似乎找到了最小值,但最终的 theta 仍然有更大的成本并且是没有准确的地方

即使 fminunc 使用更好的 alogoritm,梯度下降最终是否应该通过足够的迭代和更小的学习率找到相同的答案?

或者谁能​​看到我做错了什么?

感谢您的任何帮助。

4

1 回答 1

2

您的评论是错误的,但算法很好。

在梯度下降中很容易陷入数值问题,那么我建议进行特征归一化。

此外,如果您不确定自己的学习率,请尝试动态调整它。就像是:

best_cost = Inf;
best_theta = initial_theta;
alpha = 1;

for iter = 1:500
  [cost, grad] = costFunction(best_theta, X_reg, y);

  if (cost < best_cost)
    best_theta = best_theta - alpha * grad;
    best_cost = cost;
  else
    alpha = alpha * 0.99
  end
end

此外请记住,不同的答案可以给出相同的决策边界。例如对于假设 h(x) = x(0) + theta(1) * x(1) + theta(2) * x(2) 这些答案给出了相同的边界:

theta = [5, 10, 10];
theta = [10, 20, 20];
于 2012-09-23T20:46:58.383 回答