2

我開始研究機器學習並陷入一個問題。用於線性迴歸的梯度下降花費太長的時間來收斂

我的這種方法(在MATLAB和C++中)的實現在1 500 000次迭代中收斂,我不明白爲什麼。我找到了方法implementation in Python,算法在2000次迭代中收斂。在融合之下,我明白他給出了幾乎相同的答案,顯然是正確的方法。

初步數據不以任何方式處理。你能解釋我嗎,這是正常的迭代次數,還是我在算法中犯了一個錯誤?

中使用的成本函數和它的偏導數:

cost

MATLAB代碼

%y=t0+t1*x 
learningRate = 0.0001; 
curT0 = 0; 
curT1 = 0; 
i  = 1; 

while (i < 1500000) 
    derT0 = 0; 
    derT1 = 0; 
    for j=1:1:N 
     derT0 = derT0 + (-1/N)*(Y(j) - (curT1*X(j) + curT0)); 
     derT1 = derT1 + (-1/N)*X(j)*(Y(j) - (curT1*X(j) + curT0)); 
    end 
    curT0 = curT0 - (learningRate*derT0); 
    curT1 = curT1 - (learningRate*derT1); 
    %sprintf('Iteration %d, t0=%f, t1=%f',i,curT0,curT1) 
    i = i+1; 
end 

P.S.我試圖增加「學習率」變量,但在這種情況下,算法發散並且數量龐大。

+0

除了'while(我<1500000)'''你沒有別的停止條件'所以當然這將運行在'1500000'迭代,因爲你沒有告訴它不要...... – Dan

+0

謝謝。看起來我並沒有被問到。我的意思是爲什麼在更少的迭代中,它不會收斂到確切的解決方案(或非常接近它)。例如像一個的Python爲2000 – Alex

+0

發佈Python代碼比較... – Dan

回答

2

gradient descent取決於三兩件事:

  • 初始解[curT0,curT1]
  • 學習率(一個步驟有多大采取的方向(從開始搜索的起點)梯度)
  • 迭代次數

如果啓動遙遠,使小步驟它會帶你多次迭代,達到日e解決方案。如果這些步驟太大,則可能會錯過解決方案。還取決於你從搜索空間..

你也可以指定其他終止標準像的公差開始搜索可能陷入局部極小(這要是超過閾值,停止迭代)。您當前的代碼將始終循環迭代的最大次數(1500000)。