梯度

http://cs231n.github.io/optimization-2/

這一節(jié)對梯度進行了介紹,并對梯度進行解釋,以及介紹了鏈式規(guī)則,可能是國外的基礎(chǔ)教育做的不夠好,這在高數(shù)里面可能一小節(jié)就夠用了。其實就是求導(dǎo)。根據(jù)每個數(shù)據(jù)的導(dǎo)數(shù)對運算結(jié)果的影響,來決策更新參數(shù)的方式。

值得注意的是,矩陣求導(dǎo)之前一直為接觸過。如下所示,W 與X相乘,相對于X的偏導(dǎo)數(shù),就是運算結(jié)果的偏導(dǎo)數(shù)(沒有后續(xù)操作的話,這里就是1) 與矩陣W的轉(zhuǎn)置相乘

forward pass

W = np.random.randn(5, 10)
X = np.random.randn(10, 3)
D = W.dot(X)

dD = np.random.randn(*D.shape) # same shape as D
dW = dD.dot(X.T) #.T gives the transpose of the matrix
dX = W.T.dot(dD)

來自 http://cs231n.github.io/optimization-2/

既然我們知道了W每個維度的梯度,那么我們就可以決定X.dot(W) 結(jié)果每個維度的值的變化方向。
下面這個例子可以看出,X.dot(W) 計算出結(jié)果后沒有繼續(xù)的運算,那么結(jié)果的梯度就相當(dāng)于1,我們在這個基礎(chǔ),改變參數(shù)W的值,加上dW,結(jié)果變大,減去dW結(jié)果變小。(相當(dāng)于y=kx+b, k變大,那么運算結(jié)果y也會變大,如果x<0,那么k的梯度就是負的,假設(shè)是-1,(k+(-1)0.1)x 相當(dāng)于向梯度減少的方向移動了-1個單位,就是向梯度增加的方向移動了一個單位,在多維度上也是滿足這個關(guān)系的,所以 (W+0.01dW).dot(X)一定會使結(jié)果變大。(W-0.01dW).dot(X)一定會使結(jié)果變小)
import numpy as np

forward pass

W = np.random.randn(1, 10)
X = np.random.randn(10, 1)
D = W.dot(X)

dD = np.random.randn(D.shape)0+1 # same shape as D
dW = dD.dot(X.T) #.T gives the transpose of the matrix
dX = W.T.dot(dD)

print(D)
print((W+0.01dW).dot(X))
print((W-0.01
dW).dot(X))

result:
[[0.13265561]]
[[0.34511483]]
[[-0.07980361]]

結(jié)論:不論輸入X的正負對,對于(W+0.01dW).dot(X)一定會使結(jié)果變大。(W-0.01dW).dot(X)一定會使結(jié)果變小

據(jù)此,就有了SVM和Softmax中參數(shù)更新的理論基礎(chǔ)。

使用此種方式進行分類,在梯度更新時難免會丟失數(shù)據(jù),相當(dāng)與特征不完整,初見弊端。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容