相同點
在GD和SGD中,都會在每次迭代中更新模型的參數,使得代價函數變小。
不同點
GD
在GD中,每次迭代都要用到全部訓練數據。
假設線性模型
Paste_Image.png
θ是參數
代價函數 :
Paste_Image.png
那么每次GD的更新算法為:
Paste_Image.png
由此算法可知,在對代價函數求偏導時,是需要用到全部的訓練數據的。
SGD
在SGD中,每次迭代可以只用一個訓練數據來更新參數。
回到GD的更新算法,假設此時我們此時訓練數據就只有一條(x,y),
Paste_Image.png
所以此時的更新參數的算法變為:
Paste_Image.png
此時更新的算法,只用到了一個樣本。
其實具象的理解下,就是來了一條訓練數據,算下此時根據模型算出的值和實際值的差距,如果差距大,那么參數更新的幅度大,反之則小。
總結
當訓練數據過大時,用GD可能造成內存不夠用,那么就可以用SGD了,SGD其實可以算作是一種online-learning。另外SGD收斂會比GD快,但是對于代價函數求最小值還是GD做的比較好,不過SGD也夠用了。