내 질문은 Coursera 과정의 데이터 (https://www.coursera.org/learn/machine-learning/)를 기반으로하지만 검색 후에는 일반적인 문제로 보입니다.정규화없이 그라디언트 디센트가 작동하지 않는 이유는 무엇입니까?
그래디언트 디센트는 데이터 정규화 (pic.1)에서 완벽하게 작동하지만 J (비용 함수)가 무한대로 매우 빠르게 증가하면서 원래 데이터 (그림 2)에서 잘못된 방향으로 이동합니다. 매개 변수 값의 차이는 약 10^3입니다.
더 나은 실행 속도를 위해서는 정규화가 필요하다고 생각했는데, 많은 검색을 한 후에도 비용 기능에서 이러한 성장의 이유를 실제로 볼 수 없습니다. 'alpha'를 줄입니다. 0.001 또는 0.0001로 설정하면 도움이되지 않습니다.
아이디어가 있으면 게시 해주세요.
P. (나는 X_buf - 정규화 된 버전과 X_basic - original; Y - vector의 모든 Q-theta 벡터, 알파 - leaning rate)를 함수에 수동으로 제공했다.
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
코스 게시판을 사용하여 도움을 받았습니까? TA는 꽤 반응 적입니다. 귀하의 코드에 문제가 보이지 않지만 ML 기능 내부에서 작업 한 지 1 년이 지났습니다. – Prune
학습 속도 1e-10 시도 (비표준 데이터의 스케일에 따라 다름) – lejlot
참조하는 사진의 위치가 명확하지 않습니다. – etov