2012-09-23 88 views
0

我試圖運行梯度下降和八度內置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梯度下降最終找到相同的答案足夠的迭代和較小的學習率?

或任何人都可以看到我是否做錯了什麼?

謝謝你的任何和所有幫助。

+0

只是想指向那麼降低學習速度將無法阻止你的算法達到局部最優值。較大的學習速度可能會成功跳過一個很小的學習速度,但這不太可能。 您需要確保您正在優化的功能的差異是凸面的,所以它只有一個optima(全球一個) –

回答

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]; 
+0

謝謝你的幫助 – wjamie2340