没有标准化的梯度下降不起作用,为什么?

时间:2016-06-06 11:33:31

标签: machine-learning gradient-descent

我的问题是基于Coursera课程的数据 - https://www.coursera.org/learn/machine-learning/,但在搜索后似乎是一个常见问题。

梯度下降完全适用于归一化数据(pic.1),但在原始数据(pic.2)上方向错误,J(成本函数)向无穷大增长非常快。参数值之间的差异大约是10 ^ 3.

我认为为了更好的执行速度需要规范化,即使经过大量搜索,我也无法看到成本函数增长的原因。减少' alpha'使其为0.001或0.0001也无济于事。

如果您有任何想法,请发布!

P.S。 (我手动为函数提供了矩阵,其中X_buf - 规范化版本和X_basic - 原始; Y - 所有考试的矢量Q - theta矢量,alpha - 倾斜率。)

function [theta, J_history] = gradientDescentMulti(X, Y, theta, alpha, num_iters)

m = length(Y); 
J_history = zeros(num_iters, 1);

for iter = 1:num_iters
theta = theta - (alpha/m)*X'*(X*theta-Y);
J_history(iter) = computeCostMulti(X, Y, theta);
end

end

第二个功能:

function J = computeCostMulti(X, Y, theta)

m = length(Y); % number of training examples
J = 0;
J = (1/(2*rows(X)))*(X*theta-Y)'*(X*theta-Y);

end

Screenshots

1 个答案:

答案 0 :(得分:0)

在这种情况下,将alpha的值减小到非常小的值并不是很有帮助,因为它需要很多迭代才能收敛。

归一化用于更快的收敛,但它也影响alpha的选择,因为成本函数的导数取决于X的值。

我第一次遇到同样的问题。但在我对X进行标准化后,Cost函数和θ会收敛所有小于1的alpha值。