假设有1个样本,其中每个样本中的特征为2个,分别为X1,X2
z=w^Tx+b
a=sigmoid(z ) 预测概率
成本函数为L=-(y*loga+(1-y)*log(1-a))
反向更新:
w1:=w1-learn_rate*dw1
w2:=w2-learn_rate*dw2
b:=b-learn_rate*db
其中dw1,dw2,db 分别是L(a,y)的导数
剩下的任务就是求上面三个变量的导数了
过程省略
dw1=x1*dz
dw2=x2*dz
db=dz
其中dz=a-y
接下来,我们利用上面的原理对m个样本进行梯度下降算法
刚开始令所有变量为0
L=0,dw1=0,dw2=0,db=0
for i in m:
z(i)=w^Tx(i)+b
a(i)=1/(1+e^z(i))
L+=-(y(i)*loga(i)+(1-y(i))*log(1-a(i)) #累加所有损失和变化量
dw1+=x1(i)*dz(i)
dw2+=x2(i)*dz(i)
db+=dz(i)
L/=m dw1/=m dw2/=m db/=m #求每个变量的均值
w1:=w1-learn_rate*dw1 #最后更新每个参数
w2:=w2-learn_rate*dw2
b:=b--learn_rate*db
这只是针对一个样本的例子,如果需要用到多个样本,就需要写两个循环,外循环遍历特征。内循环累加各个变量。
所以 我们可是使用python or matlab进行批量的矩阵计算,这种速度效率比for 循环是高的
进行一个向量化改进:
L=0,dw1=0,dw2=0,db=0 #向量化W=np.zeros((m,1))
for i in m:
z(i)=w^Tx(i)+b
a(i)=1/(1+e^z(i))
L+=-(y(i)*loga(i)+(1-y(i))*log(1-a(i)) #累加所有损失和变化量
dw1+=x1(i)*dz(i) #向量化 dw+=x(i)*dz(i)
dw2+=x2(i)*dz(i)
db+=dz(i)
L/=m dw1/=m dw2/=m db/=m #求每个变量的均值 向量化dw/=m
w1:=w1-learn_rate*dw1 #最后更新每个参数
w2:=w2-learn_rate*dw2
b:=b--learn_rate*db