Deep learning - Neural Network & Deep learning .04

2 Basics of Neural Network programming
2.7 Computation graph

正向傳播(forward pass) 前向計(jì)算 (forward propagation) 來(lái)計(jì)算損失函數(shù),代價(jià)函數(shù)及優(yōu)化J
反向傳播(backward pass) 后向計(jì)算(back propagation) 來(lái)計(jì)算梯度or微分
計(jì)算圖解釋為什么使用正向傳播和反向傳播的組織形式
2.8 Derivatives with a computation graph

反向傳播:如果你想要計(jì)算最終輸出變量對(duì)于v的導(dǎo)數(shù),而這也是你通常最關(guān)心的變量,這就是一步反向傳播
在微積分中叫做鏈?zhǔn)椒▌t,即a影響v,v影響J ?dJ/da = dJ/dv * dv/da
FinalOutputVar最終輸出變量
d(FinalOutputVar) / dvar 在編碼中使用dvar表示,對(duì)于各種中間量使用dv表示dJ/dv、da表示dJ/da

在編碼中du代表dJ/du,db代表dJ/db,dc代表dJ/dc
計(jì)算導(dǎo)數(shù)最有效率的方式就是按紅色箭頭從右向左,即反向傳播,先計(jì)算對(duì)v的導(dǎo)數(shù), 然后計(jì)算J對(duì)a的導(dǎo)數(shù)和J對(duì)u的導(dǎo)數(shù),然后計(jì)算J對(duì)b的導(dǎo)數(shù)和J對(duì)c的導(dǎo)數(shù)
2.9 Logistic Regression gradient descent

a是邏輯回歸的輸出 y是真實(shí)值
在邏輯回歸中,我們要做的就是修改參數(shù)w和b,來(lái)減少損失函數(shù)L(a,y)
向前傳播的步驟中, 演示了單個(gè)樣本如何計(jì)算損失函數(shù)

在單個(gè)訓(xùn)練樣本情況下實(shí)現(xiàn)邏輯回歸的梯度
此部分為計(jì)算過(guò)程,需要微積分基礎(chǔ)
我們要計(jì)算損失函數(shù)L(a,y)的導(dǎo)數(shù),反向傳播時(shí),需要先計(jì)算出損失函數(shù)L(a,y)對(duì)于a的導(dǎo)數(shù),編碼中使用da代表dL(a,y)/da,可以通過(guò)微積分得出來(lái),就是對(duì)損失函數(shù)二元交叉熵進(jìn)行求導(dǎo),得出da=-y/a+(1-y)/(1-a),就可以計(jì)算出da的值;然后就可以算出來(lái)dz=dL(a,y)/dz,根據(jù)微積分的鏈?zhǔn)椒▌tdz=dL/da*da/dz,可得dz=a-y,其中da/dz是sigmoid函數(shù),求導(dǎo)可用自身表示即a(1-a);然后計(jì)算w1=dL(a,y)/dw1=x1*dz,w2=dL(a,y)/dw2=x2*dz,db=dz;然后就可以使用梯度下降進(jìn)行循環(huán)更新,w1:=w1-a*dw1,w2:=w2-adw2,b:=b-a*db