正向傳播推導
第i個樣本
輸入x(i),通過計算得到z(i),然後再使用sigmoid函數得到預測值y^(i),我們需要判斷y^(i)與實際值y的關係。
第一,先判斷維度,x(i)(nx1),w(nx1),z(i)(1x1),y^(i)(1x1)。
接着,我們來計算z(i)=(x1(i)w1+x2(i)w2+⋯+xn(i)wn)+b=(w1,w2,…,wm)⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛x1(i)x2(i)...xn(i)⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞+b。
其中,b是實數,python中有廣播功能,能使b擴展到與前式相同的維度並計算。
向量化(從個別到整體)
爲了與上面做區別,字母大寫。
Z=(w1,w2,…,wm)⎝⎜⎜⎜⎜⎜⎜⎛x11x12...x1nx21x22...x2n………xm1xm2...xmn⎠⎟⎟⎟⎟⎟⎟⎞+b=wTX+b
Y^=δ(Z)=sigmoid(Z)=(y^(1),y^(2),…,y^(m))
此處使用sigmoid函數將預測值y^分佈在0~1之間,即二分法。
判斷向量維度
上面的維度是單個樣本的維度,下面的維度是m個樣本中向量的維度;在矩陣運算中,維度尤其重要,後面判斷轉置和累和都是基於矩陣維度。
X(nxm),其中n是特徵,m是樣本,w(nx1),b實數(1x1),Z(1xm),Y^(1xm)。
將原始數據進行整合
吳恩達老師提供了訓練集和測試集,其中,train_data_org=(129,64,64,3)–>(129,64x64x3)–>(129,12288)->(129,12288)T−>(12288,129)。
其中,給出的訓練集數據格式是129個樣本,64x64的寬高,3原色(紅、綠、藍),我們需要將後面三位數相乘作爲特徵,然後再轉置得到特徵x樣本即nxm。
接下來處理標籤,train_labels_org=(129,)–>(1,129)。
其中,給出的訓練集數據格式是129個樣本,我們需要使用numpy庫將其轉換爲需要的格式。
反向傳播推導
第i個樣本
依舊使用這幅圖片,我們令a=y^(i)=δ(z(i))=1+e−z(i)1。其中,xi(nx1),w(nx1),z(i)(1x1),y^(i)(1x1),b實數(1x1)。
由前向傳播函數得,Z=wTX+b。其中,X(nxm),w(nx1),b(1x1),Z(1xm),Y^(1xm),A(1xm)。
損失函數
loss function:對一個樣本中計算預測值和實際值的差距。L(a,y)=−ylog10a−(1−y)log10(1−a)。
代價函數
costs function:對m個樣本中的w和b累加和後求均值。J(a,y)=J(w,b)=−m1∑i=1m[y∗loga+(1−y)∗log(1−a)]。
梯度下降法(實則是多元函數求微分)
∂w∂L(a,y)=∂a∂L(a,y)∂z∂a∂w∂z
∂b∂L(a,y)=∂a∂L(a,y)∂z∂a∂b∂z
其中,
∂a∂L(a,y)=−ay−1−a(1−y)(−1)
∂z∂a=−(1+ez)2e−z(−1)=(1+ez)2e−z=1+ez11+ez1+ez−1=a(1−a)
所以,
∂a∂L(a,y)∂z∂a=a−y
最後,
∂w∂L(a,y)=(a−y)x−−>x(a−y);∂b∂L(a,y)=a−y−−>np.sum(a−y)
做點解釋,前面採用微積分中的鏈式求導法則來算,後面根據維度做變換,∂w∂L(a,y)維度是nx1,∂b∂L(a,y)維度是1x1,a-y維度是1x1。
向量化(從個別到整體)
∂w∂L(A,Y)=X(A−Y)−−>X(A−Y)T
∂b∂L(A,Y)=A−Y−−>np.sum(A−Y)
其中,A-Y的維度是1xm。
W=W−αm1X(A−Y)
b=b−αm1np.sum(A−Y)
J(w,b)=−m1np.sum[YlogA+(1−Y)log(1−A)]
其中,J(w,b)維度是1xm,裏面均是點乘(矩陣對應位置相乘)。