需要一個「隨機梯度下降」的詳細教程?

本人數學基礎薄弱,最近在自學關於隨機梯度下降的知識。希望有前輩能教教我。看了一些網上的教程,感覺毫無頭緒。為什麼叫隨機梯度?隨機性體現在哪呢?我在嘗試用python實現演算法,在網上找了一些例子,感覺和梯度下降沒有區別啊?可能是我水平太差。求各位前輩教我。謝謝!


謝邀。

推薦一個Andrew NG的教程

Machine Learning

應該是前面兩章有隨機梯度下降的例子,很容易理解。

另外一本書叫《convex optimization》

https://web.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf

裡面有一章專門講這個


謝邀。哈,僅這個問題題主就不需要去翻書了,題主既然懂梯度下降,那就沒有難度理解隨機梯度下降。

假設我們有 10000 個數據點,而且這 10000 個數據點就是整個數據空間。咱電腦好,內存顯存都夠意思,10000 個數據全丟進去都不爆,一次 batch 就是一個 epoch。這叫(不隨機的)梯度下降。

假設電腦爛,二十年前的 CPU 拖著百兆不到內存,別說把數據全遞進去了,參數就佔了 99%+ 的內存,額外的內存開銷得拉到在一塊嘎吱嘎吱響的硬碟上劃拉出的虛擬區。計算哪怕只有 10 個數據點的一個 batch, 咱都要等上一支煙的功夫。但是也沒辦法,10 個就 10 個,於是,咱每個 batch 都從 10000 個數據點裡隨機採樣 10 個,然後計算、更新,再隨機採樣 10 個,再一個 batch 。。。這裡的更新,叫隨機梯度下降,隨機是指你每個 batch 的數據是對整個數據空間的隨機採樣

問題來了,我每次只用 10 個數據,10 個數據產生的平均梯度,variance,或者說不確定性,肯定比人家用 10000 個數據平均出來的大,也就是說,計算出的梯度沒人家准啊。

隨機梯度下降的理論(其實算不上理論。。。很直觀的一個式子)告訴你,只要你的採樣夠隨機,隨機梯度的期望和真實梯度是相等的。用人話說,放在模型訓練里,哪怕一個 batch 就一個數據點,你只要辛苦多迭代幾個 batch,最終效果一定是一樣的。

最後還有一個重點,嚴格來說,現實里,基本極少有(不隨機的)梯度下降。我開頭加粗的部分,特彆強調我們的數據集是整個數據空間,然而我們手頭沒有啥數據集是整個數據空間的。就算數據空間里數據點不是無窮多,也是個天文數字。比方說,32x32像素的所有圖片,三色通道,每通道有 0 到 255 共 256 個離散取值,組合一下,有多少中可能的圖片?所以說,我們的數據集其實也是對數據空間的隨機採樣。

同樣道理,也沒有真正的隨機梯度下降。第一個 epoch 還勉強能算,第二個 epoch 一開始,你見到的數據就和第一個 epoch 的數據一樣了,或者說,採樣不獨立了。隨機梯度下降的隨機也只是理論中的隨機。我們能做的,就是把模型做更好,爭取能榨乾數據集中的每一點信息,同時把錯誤信息撇除,不過這顯然是有理論上限的。還有,就是把數據集做好是真正的好,人家怎麼說,garbage in, garbage out, 數據輸入垃圾,模型再牛,結果輸出也是垃圾。


隨機取樣本


推薦閱讀:

RNN神經網路訓練過程中weight幾乎不更新,只有bias更新?
如何評價《Tensorflow實戰》和《Tensorflow:實戰Google深度學習框架》這兩本書?
Udacity 深度學習的作業有人真運行過嗎?
深度學習系統相比較傳統的機器學習系統,針對常見的分類問題,精度究竟能有多大提升?
如何看待Tencent AI 人臉檢測結果在FDDB上的逆天表現?

TAG:數學 | 應用數學 | 機器學習 | 數理統計學 | 深度學習DeepLearning |