【转载】深度学习数学基础(二)~随机梯度下降(Stochastic Gradient Descent, SGD)
Source:?
作者:Evan
鏈接:https://www.zhihu.com/question/264189719/answer/291167114
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
?
目錄
1. 梯度下降法
梯度下降
2. 優缺點比較
2.1 批量梯度下降
2.2 隨機梯度下降
2.3 mini-batch梯度下降
3. 隨機梯度下降可視化
理解隨機梯度下降,首先要知道梯度下降法,故先介紹梯度下降法:
1. 梯度下降法
? 大多數機器學習或者深度學習算法都涉及某種形式的優化。?優化本質指的是改變以最小化或最大化某個函數的任務。我們通常以最小化指代大多數最優化問題。 最大化可經由最小化算法最小化來實現。
我們把要最小化或最大化的函數稱為目標函數或準則。 當我們對其進行最小化時,我們也把它稱為代價函數、損失函數或誤差函數。?
下面,我們假設一個損失函數為?,其中?h_{\theta }(x)=\theta_{0} +\theta_{1}x_{1}+\theta_{2}x_{2}+......+\theta_{n}x_{n}?然后要使得最小化它。
注意:這里只是假設,不用知道這個目標函數就是平方損失函數等等,然后肯定有人問既然要最小化它,那求個導數,然后使得導數等于0求出不就好了嗎?Emmmm...是的,有這樣的解法,可以去了解正規方程組求解。說下這里不講的原因,主要是那樣的方式太難求解,然后在高維的時候,可能不可解,但機器學習或深度學習中,很多都是超高維的,所以也一般不用那種方法。總之,梯度下降是另一種優化的不錯方式,比直接求導好很多。梯度下降
我們知道曲面上方向導數的最大值的方向就代表了梯度的方向,??【擴展知識:如何直觀形象的理解方向導數與梯度以及它們之間的關系?】
因此我們在做梯度下降的時候,應該是沿著梯度的反方向進行權重的更新(因為梯度指的是增長最快的方向,而往下滑是減小最快的方向),可以有效地找到全局的最優解。這個?更新過程可以描述為
[a表示的是步長或者說是學習率(learning rate)]
好了,怎么理解?在直觀上,我們可以這樣理解,看下圖,一開始的時候我們隨機站在一個點,把他看成一座山,每一步,我們都以下降最多的路線來下山,那么,在這個過程中我們到達山底(最優點)是最快的,而上面的,它決定了我們“向下山走”時每一步的大小,過小的話收斂太慢----梯度消失,過大的話可能錯過最小值----梯度爆炸。??【擴展知識:詳解機器學習中的梯度消失、爆炸原因及其解決方法】)。這是一種很自然的算法,每一步總是尋找使J下降最“陡”的方向(就像找最快下山的路一樣)。
當然了,我們直觀上理解了之后,接下來肯定是從數學的角度,我們可以這樣想,先想在低維的時候,比如二維,我們要找到最小值,其實可以是這樣的方法,具體化到1元函數中時,梯度方向首先是沿著曲線的切線的,然后取切線向上增長的方向為梯度方向,2元或者多元函數中,梯度向量為函數值f對每個變量的導數,該向量的方向就是梯度的方向,當然向量的大小也就是梯度的大小。現在假設我們要求函數的最值,采用梯度下降法,結合如圖所示:
如圖所示,我們假設函數是?,那么如何使得這個函數達到最小值呢,簡單的理解,就是對x求導,得到?,然后用梯度下降的方式,如果初始值是(0的左邊)負值,那么這是導數也是負值,用梯度下降的公式,使得x更加的靠近0,如果是正值的時候同理。注意:這里的梯度也就是一元函數的導數,高維的可以直接類推之2. 優缺點比較
這里比較對象是批量梯度(Batch Gradient Descent)和mini-batch梯度下降,先看下他們三者:
2.1 批量梯度下降
- 批量梯度下降:在每次更新時用所有樣本,要留意,在梯度下降中,對于?的更新,所有的樣本都有貢獻,也就是參與調整.其計算得到的是一個標準梯度,對于最優化問題,凸問題,也肯定可以達到一個全局最優。因而理論上來說一次更新的幅度是比較大的。如果樣本不多的情況下,當然是這樣收斂的速度會更快啦。但是很多時候,樣本很多,更新一次要很久,這樣的方法就不合適啦。下圖是其更新公式
2.2 隨機梯度下降
- 隨機梯度下降:在每次更新時用1個樣本,可以看到多了隨機兩個字,隨機也就是說我們用樣本中的一個例子來近似我所有的樣本,來調整θ,因而隨機梯度下降是會帶來一定的問題,因為計算得到的并不是準確的一個梯度,對于最優化問題,凸問題,雖然不是每次迭代得到的損失函數都向著全局最優方向, 但是大的整體的方向是向全局最優解的,最終的結果往往是在全局最優解附近。但是相比于批量梯度,這樣的方法更快,更快收斂,雖然不是全局最優,但很多時候是我們可以接受的,所以這個方法用的也比上面的多。下圖是其更新公式:
2.3 mini-batch梯度下降
- mini-batch梯度下降:在每次更新時用b個樣本,其實批量的梯度下降就是一種折中的方法,他用了一些小樣本來近似全部的,其本質就是我1個指不定不太準,那我用個30個50個樣本那比隨機的要準不少了吧,而且批量的話還是非常可以反映樣本的一個分布情況的。在深度學習中,這種方法用的是最多的,因為這個方法收斂也不會很慢,收斂的局部最優也是更多的可以接受!
}
了解之后,總的來說,隨機梯度下降一般來說效率高,收斂到的路線曲折,但一般得到的解是我們能夠接受的,在深度學習中,用的比較多的是mini-batch梯度下降。
?
最后是收斂性,能收斂嗎?收斂到什么地方?
對于收斂性的問題,知乎上就有這個問題:為什么隨機梯度下降方法能夠收斂?,我比較贊賞李文哲博士的回答(推薦一看),總的來說就是從expected loss用特卡洛(monte carlo)來表示計算,那batch GD, mini-batch GD, SGD都可以看成SGD的范疇。因為大家都是在一個真實的分布中得到的樣本,對于分布的擬合都是近似的。那這個時候三種方式的梯度下降就都是可以看成用樣本來近似分布的過程,都是可以收斂的!
?
對于收斂到什么地方:
能到的地方:最小值,極小值,鞍點。這些都是能收斂到的地方,也就是梯度為0的點。
當然,幾乎不存在找到鞍點的可能,除非很碰巧,因為梯度下降是對損失函數每個維度分別求極小值,即分別求?關于?極小值。
然后是最小值和極小值,如果是凸函數,梯度下降會收斂到最小值,因為只有一個極小值,它就是最小值。
至于什么是凸函數,詳見我的專欄文章:掌握機器學習數學基礎之凸優化。?
對于理論支持:
Optimization Methods for Large-Scale Machine Learning:這論文之前的問答也看到了,貼下知友的翻譯。為什么我們更寵愛“隨機”梯度下降?
ROBUST STOCHASTIC APPROXIMATION APPROACH TO STOCHASTIC PROGRAMMING
An Introduction to optimization
以上三個關于優化的文章,一切問題,自然隨之而解。值得一看!
3. 隨機梯度下降可視化
作者:量子位
鏈接:https://www.zhihu.com/question/264189719/answer/649129090
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
?
下面的這張動圖演示,乍看就像就像是在復雜地形中作戰的沙盤推演,其實揭示的是隨機梯度下降(SGD)算法的本質。
讓小球滾下山坡,找到它們分別落在哪個山谷里,原來梯度下降算法還能變得像游戲視頻一樣酷炫。
谷歌大腦東京研究員hardmaru轉發了視頻對應的文章,評價它“像極了即時戰略游戲”。
可別光顧著好玩,視頻還得配合文章一起“服用”才有效果。上面的熱門視頻就是摘自fast.ai成員Javier Ideami寫的一篇科普文。
如果代碼和公式讓你感到枯燥,那么不妨從這段酷炫的SGD視頻入手,再讀一讀這篇文章,它會幫你更直觀地理解深度學習。
?
到底什么是梯度?
深度學習的架構和最新發展,包括CNN、RNN、造出無數假臉的GAN,都離不開梯度下降算法。
梯度可以理解成山坡上某一點上升最快的方向,它的反方向就是下降最快的方向。想要以最快的方式下山,就沿著梯度的反方向走。
看起來像沙盤推演的東西,其實是我們撒出的小球,它們會沿著梯度下降的方向滾到谷底。
而梯度下降算法的最終目的,是找到整個“地形”中的最低點(全局最小值),也就是海拔最低的山谷。
但在這片地形中,山谷可能不止一處(局部最小值),所以我們需要撒很多球,讓它們分別落入不同山谷,最后對比高度找到其中的海拔最低點。
以上就是隨機梯度下降(SGD)算法的基本思想。
總結
以上是生活随笔為你收集整理的【转载】深度学习数学基础(二)~随机梯度下降(Stochastic Gradient Descent, SGD)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac~终端安装Homebrew pac
- 下一篇: 深度学习~图神经网络GNN