深度學習-反向傳播與梯度下降

首先讓我們來回顧一下有關邏輯迴歸的知識。如下圖所示,在邏輯迴歸的前向傳播過程中,第一步我們要先計算出z,第二步計算出預測值y^\hat{y},最後計算出損失函數L。

         z = wTw^Tx+b

         y^\hat{y} = 11+ez\frac{1}{1 + e^{-z}}

         L(y^\hat{y}, y) = -(ylog(y^\hat{y}) + (1-log)(1-y^\hat{y}))

上面是前向傳播,那麼反向傳播應該如何計算呢?
我們最終的目的是要計算出w和d關於L的偏導數,也就是dLdw\frac{dL}{dw}dLdb\frac{dL}{db},然後更新w,b以使損失函數L越來越小,使預測越來越精準。

通常我們會將最終函數(在這裏是L)的偏導數的符號進行簡化,例如dLdw\frac{dL}{dw}可以寫成dw,將dLdb\frac{dL}{db}寫成db,所以當你看到db時你會知道它是 dLdb\frac{dL}{db}而不是 dy^db\frac{d\hat{y}}{db}

爲了計算出dw和db,第一步需要計算出 dy^(dLdy^d\hat{y}(\frac{dL}{d\hat{y}}),dy^\hat{y} 的計算公式是 (yy^+1y1y^)-(\frac{y}{\hat{y}}+\frac{1-y}{1-\hat{y}}),下一步我們需要求出dz,根據鏈式法則dz可以通過 dLdy^dy^dz\frac{dL}{d\hat{y}}\frac{d\hat{y}}{dz} 求出,dLdy^\frac{dL}{d\hat{y}}上面我們已經求出來了,dy^dz\frac{d\hat{y}}{dz}的計算公式是y^(1y^)\hat{y}(1-\hat{y})

         dy^dz=(1+ez)2ez(1)\frac{d\hat{y}}{dz}=-(1+e^{-z})^{-2}e^{-z}(-1)

           =ez(1+ez)2=\frac{e^{-z}}{(1+e^{-z})^2}

           =ez+11(1+ez)2=\frac{e^{-z}+1-1}{(1+e^{-z})^2}

           =11+ez1(1+ez)2=\frac{1}{1 + e^{-z}}-\frac{1}{(1 + e^{-z})^2}

           =y^y^2=\hat{y}-\hat{y}^2

經過計算後 dz=y^ydz=\hat{y}-y。同理,我們可以計算出dw=xdz,db=dz。如下所示:

得到dw,db後,就可以更新這些參數值進行梯度下降,例如w=w-rdw,然後用新的參數值再次進行前向傳播然後再反向傳播,
通過這樣不停的前向反向傳播來訓練參數,使損失函數值越來越小。

上面講述的是單個訓練樣本時如何計算邏輯迴歸的偏導數,下面我給大家介紹多個訓練樣本時如何計算偏導數。

對於多個訓練樣本,成本其實就是多個樣本的損失的平均值——m個樣本的損失累加起來然後除以m就是成本。同理,多個樣本時的偏導數等於每個樣本的偏導數的平均值。

下圖給出m個樣本時計算偏導數的僞碼。

Z = np.dot(w.T, X) + b
A = 1 / (1 + np.exp(-Z))
L = np.sum(-(Y*np.log(A) + (1-Y)*np.log(1-A))) / m
dZ = A - Y
dw = np.dot(X,dZ.t) / m
db = np.sum(dZ) / m
w = w - r * dw
b = b - r * db

利用上面的計算過程我們實現了邏輯迴歸的前向傳播、反向傳播,對參數進行梯度下降,一步一步的更新參數,使預測越來越精準。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章