簡單的介紹一下什麼是隨機梯度下降,為什麼要用隨機梯度下降這個方法。
在我們進行深度學習的時候,對於神經網路的輸出結果,我們需要知道結果對不對,以及每個神經元的閾值和權重對不對,對於以及我調整一下權重和閾值,神經網路的輸出結果和我們預期的輸出結果會更接近還是誤差更大。如果更接近,那麼我們可以繼續調整權重和閾值,讓神經網路的輸出結果等於預期。那麼我們如何進行定量的分析呢?不能只依靠感覺,這個時候,我們引入函式 c(
w,b)
≡12n
∑x∥y
(x)−
a∥2.
(1) 其中y
(x) 代表我們預期的輸出結果,比如說,乙個識別手寫阿拉伯數字的神經網路,我們網路的輸出就是乙個10維的向量,比如(1
,0,0
,0,0
,0,0
,0,0
,0) 代表0,(0
,1,0
,0,0
,0,0
,0,0
,0)代
表1,而a代表乙個神經網路實際輸出的結果,w 和
b就分別代表了權重和閾值。也就是說,我們如果想要讓乙個神經網路的結果更準確,就需要找到合適的w ,
b,讓c更小。即求函式c的最小值。
也就是說,我們現在是要求乙個函式的最小值,讓我們僅僅從數學方面思考,如何求解乙個函式的最小值。假設有乙個函式c(
v),而這個函式有兩個變數v1
,v2 ,首先想到的就是微積分,假如只有2個變數,我們就要求出函式的二階偏導,然後再令二階偏導等於0,算出幾個點,再判斷這幾個點哪個是最大值,哪個是最小值,哪個是鞍點。可是問題是,我們處理的資料大部分都是多維的,甚至達到百萬級別,所以用微積分的話,那就很難算出來了。因此我們就需要梯度下降的方法
我們先假設在求乙個二元函式的最小值,它的影象如圖所示:
假設我們在這個影象曲面上放置乙個小球,它受到重力影響,肯定會往下滑落,而最終停止的地方,就是整個函式的最小值,這個就是梯度下降的大致思想。為了更清楚的說明這個問題, 我們把v1
在v1 方向移動δv
1 ,在v2
在v2 方向移動δv
2 ,根據微積分,我們可以得到: δc
≈∂c∂
v1δv
1+∂c
∂v2δ
v2.(2) v
1 和v2
,可以讓δc
小於0,這樣我們才能讓小球一直往最低點前進。因為函式c的梯度為: ∇c
≡(∂c
∂v1,
∂c∂v
2)t.
(3)
因此(3)可以改寫成 δc
≈∇c⋅
δv.(4) δ
v 令∇c
為負數呢?我們可以選擇令: δv
=−η∇
c(5)
原式可變為 δc
≈−η∇
c⋅∇c
=−η∥
∇c∥2
∥∇c∥2≥0
, 這就保證了 δc
≤0。 那麼−η
怎麼求呢?因為δv
=−η∇
c ,因此−η
=∥δv
∥∥∇c
|∥,我們可以事先規定∥δ
v∥的大小,然後求出 ∥∇
c∥。那麼−η
的值就求出來了。
根據前面的介紹,我們已經可以算出最小點在**了(理論上),但是隨機梯度下降還有一些問題,我在這裡說兩個: (1)容易陷入區域性極小值,在前面的圖中,我們只畫出了乙個全域性極小值點,所以梯度下降可以直接找到最小點,但是在實際中,函式會有很多區域性極小值,因此梯度下降可能會停止在區域性極小值中,而不是全域性極小值。 (2)計算量太大,注意到式(1),我們計算所有輸入影象的cost function,然後取平均,這樣計算量太大了。 因此,我們可以通過計算乙個小樣本裡的∇c
x 來估計 ∇c
的值。 我們隨機選取輸入 x1
,x2,
…,xm
, 把它們看做是乙個迷你批(mini-batch). 樣本數
m 要足夠大以致於我們可以估計出∇c
xj如下式所示:∑m
j=1∇
cxjm
≈∑x∇
cxn=
∇c,(6) ∇
c≈1m
∑j=1
m∇cx
j,(7) wk
bl→→
w′k=
wk−η
m∑j∂
cxj∂
wkb′
l=bl
−ηm∑
j∂cx
j∂bl
,(8)
(9) 其中w
和b分別代表權值和閾值。當我們遍歷完所有迷你批以後,接著在剩下的樣本中選取第二個迷你批,直到窮盡所有樣本,此時稱為完成一次epoch。然後繼續上述過程。
梯度下降 隨機梯度下降 批梯度下降
下面的h x 是要擬合的函式,j 損失函式,theta是引數,要迭代求解的值,theta求解出來了那最終要擬合的函式h 就出來了。其中m是訓練集的記錄條數,j是引數的個數。梯度下降法流程 1 先對 隨機賦值,可以是乙個全零的向量。2 改變 的值,使j 按梯度下降的方向減少。以上式為例 1 對於我們的...
stanford 梯度 梯度下降,隨機梯度下降
一 梯度gradient 在標量場f中的一點處存在乙個向量g,該向量方向為f在該點處變化率最大的方向,其模也等於這個最大變化率的數值,則向量g稱為標量場f的梯度。在向量微積分中,標量場的梯度是乙個向量場。標量場中某一點上的梯度指向標量場增長最快的方向,梯度的長度是這個最大的變化率。更嚴格的說,從歐氏...
梯度下降 隨機梯度下降和批量梯度下降
對比梯度下降和隨機梯度下降和批量梯度下降 之前看的知識比較零散,沒有乙個系統的解釋說明,看了一些網上的博主的分析,總結了一下自己的理解。例子這裡我參照其他博主的例子做了一些修改,首先是梯度下降 coding utf 8 import random this is a sample to simula...