向量化logistics回歸
Z = wTx + b
a = σ (z) = 1 / ( 1 + e-z )
L ( a , y ) = —( y log(a) + ( 1 - y ) log(1-a) )
dz(i) = a(i) - y(i)
dw = xdz
db = dz
如何向量化計算m個訓練數據的梯度:
梯度計算時dz(i) = a(i) - y(i)
定義 Z = { z1 , z2 , z3 ................zm }
A = { a1 , a2 ,a3 ................ am }
Y = { y1 , y2 , y3 ................ym
則:
dz = A - Y = { a1 - y1 , a2 - y2 , a3 - y3 ....................am - ym }
對於傳統方法需要用for循環來重復更新dw和db的值
如: dw = 0 db = 0
dw += x1dz1 db += dz1
dw += x2
: :
: :
: :
dw += xmdzm db += dzm
dw /= m db / = m
深度學習中使用方法為:
Z = np.dot(w.T,X)+b
A = sigmoid(Z)
dz = A - Y
dw = 1/m X dzT (其中X為x1 , x2 ......... xm組成的n*m階矩陣 ,dz為z1 ,z2 .......... zm組成的1*m階矩陣,則dzT為m*1階矩陣 )
db = 1 / m * np.sum ( dz )
到這裏就完成了正向和反向傳播,確實實現了對所有訓練樣本進行預測和求導,而且沒有用一個for循環,然後梯度下降更新參數
w = w - α * dw
b = b - α * db
其中α是學習率
上述所有標黃的部分就實現了logistic回歸的梯度下降一次叠代
如果需要多洗進行叠代梯度下降,如:要求1000次導數進行梯度下降,在最外層需要一次for循環
for i in range (1000) :
Z = np.dot(w.T,X)+b
A = sigmoid(Z)
dz = A - Y
dw = 1/m X dzT
db = 1 / m * np.sum ( dz )
w = w - α * dw
b = b - α * db
向量化logistics回歸