我試圖運行梯度下降和八度內置fminunc,使用完全相同的數據梯度下降VS 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
哪裏costFunction calucates不能得到相同的結果給出一個例子(X,y)和參數(theta)時的成本和梯度。
內置的八度函數fminunc也調用costFunction並使用相同的數據在更少的迭代中找到更好的答案。
鑑於倍頻程使用相同的成本函數,我假設costFunction是正確的。
我試圖降低學習率,以防我打到局部最小值和增加迭代次數,成本停止減少,所以我認爲它似乎已經找到了最小值,但最終的theta仍然有很多成本較高,並沒有接近準確
即使fminunc使用更好的alogoritm hould梯度下降最終找到相同的答案足夠的迭代和較小的學習率?
或任何人都可以看到我是否做錯了什麼?
謝謝你的任何和所有幫助。
只是想指向那麼降低學習速度將無法阻止你的算法達到局部最優值。較大的學習速度可能會成功跳過一個很小的學習速度,但這不太可能。 您需要確保您正在優化的功能的差異是凸面的,所以它只有一個optima(全球一個) –