神经网络入门篇:神经网络的梯度下降(Gradient descent for neural networks)
神經(jīng)網(wǎng)絡的梯度下降
- 在這篇博客中,講的是實現(xiàn)反向傳播或者說梯度下降算法的方程組
單隱層神經(jīng)網(wǎng)絡會有\(W^{[1]}\),\(b^{[1]}\),\(W^{[2]}\),\(b^{[2]}\)這些參數(shù),還有個\(n_x\)表示輸入特征的個數(shù),\(n^{[1]}\)表示隱藏單元個數(shù),\(n^{[2]}\)表示輸出單元個數(shù)。
在這個例子中,只介紹過的這種情況,那么參數(shù):
矩陣\(W^{[1]}\)的維度就是(\(n^{[1]}, n^{[0]}\)),\(b^{[1]}\)就是\(n^{[1]}\)維向量,可以寫成\((n^{[1]}, 1)\),就是一個的列向量。
矩陣\(W^{[2]}\)的維度就是(\(n^{[2]}, n^{[1]}\)),\(b^{[2]}\)的維度就是\((n^{[2]},1)\)維度。
還有一個神經(jīng)網(wǎng)絡的成本函數(shù),假設(shè)在做二分類任務,那么的成本函數(shù)等于:
Cost function:
公式:
\(J(W^{[1]},b^{[1]},W^{[2]},b^{[2]}) = {\frac{1}{m}}\sum_{i=1}^mL(\hat{y}, y)\)
loss function和之前做logistic回歸完全一樣。
訓練參數(shù)需要做梯度下降,在訓練神經(jīng)網(wǎng)絡的時候,隨機初始化參數(shù)很重要,而不是初始化成全零。當參數(shù)初始化成某些值后,每次梯度下降都會循環(huán)計算以下預測值:
\(\hat{y}^{(i)},(i=1,2,…,m)\)
公式1.28:
\(dW^{[1]} = \frac{dJ}{dW^{[1]}},db^{[1]} = \frac{dJ}{db^{[1]}}\)
公式1.29:
\(ozvdkddzhkzdW^{[2]} = \frac{{dJ}}{dW^{[2]}},ozvdkddzhkzdb^{[2]} = \frac{dJ}{db^{[2]}}\)
其中
公式1.30:
\(W^{[1]}\implies{W^{[1]} - adW^{[1]}},b^{[1]}\implies{b^{[1]} -adb^{[1]}}\)
公式1.31:
\(W^{[2]}\implies{W^{[2]} - \alpha{\rm d}W^{[2]}},b^{[2]}\implies{b^{[2]} - \alpha{\rm d}b^{[2]}}\)
正向傳播方程如下(之前講過):
forward propagation:
(1)
\(z^{[1]} = W^{[1]}x + b^{[1]}\)
(2)
\(a^{[1]} = \sigma(z^{[1]})\)
(3)
\(z^{[2]} = W^{[2]}a^{[1]} + b^{[2]}\)
(4)
\(a^{[2]} = g^{[2]}(z^{[z]}) = \sigma(z^{[2]})\)
反向傳播方程如下:
back propagation:
公式1.32:
$ dz^{[2]} = A^{[2]} - Y , Y = \begin{bmatrix}y^{[1]} & y^{[2]} & \cdots & y^{[m]}\ \end{bmatrix} $
公式1.33:
$ dW^{[2]} = {\frac{1}{m}}dz{[2]}A $
公式1.34:
$ {\rm d}b^{[2]} = {\frac{1}{m}}np.sum(ozvdkddzhkzdz^{[2]},axis=1,keepdims=True)$
公式1.35:
$ dz^{[1]} = \underbrace{W^{[2]T}{\rm d}z{[2]}}_{(n,m)}\quad\underbrace{{g{[1]}}{'}}_{activation ; function ; of ; hidden ; layer}\quad\underbrace{(z{[1]})}_{(n,m)} $
公式1.36:
\(dW^{[1]} = {\frac{1}{m}}dz^{[1]}x^{T}\)
公式1.37:
\({\underbrace{db^{[1]}}_{(n^{[1]},1)}} = {\frac{1}{m}}np.sum(dz^{[1]},axis=1,keepdims=True)\)
上述是反向傳播的步驟,注:這些都是針對所有樣本進行過向量化,\(Y\)是\(1×m\)的矩陣;這里np.sum是python的numpy命令,axis=1表示水平相加求和,keepdims是防止python輸出那些古怪的秩數(shù)\((n,)\),加上這個確保陣矩陣\(db^{[2]}\)這個向量輸出的維度為\((n,1)\)這樣標準的形式。
目前為止,計算的都和Logistic回歸十分相似,但當開始計算反向傳播時,需要計算,是隱藏層函數(shù)的導數(shù),輸出在使用sigmoid函數(shù)進行二元分類。這里是進行逐個元素乘積,因為\(W^{[2]T}dz^{[2]}\)和\((z^{[1]})\)這兩個都為\((n^{[1]},m)\)矩陣;
還有一種防止python輸出奇怪的秩數(shù),需要顯式地調(diào)用reshape把np.sum輸出結(jié)果寫成矩陣形式。
以上就是正向傳播的4個方程和反向傳播的6個方程,這里是直接給出的。
總結(jié)
以上是生活随笔為你收集整理的神经网络入门篇:神经网络的梯度下降(Gradient descent for neural networks)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构与算法 | 图(Graph)
- 下一篇: Kubernetes Gateway A