介绍

在训练时,我们需要提供许多样本,在同一特征值和偏置下,我们需要对这些样本依次求损失率和梯度,然后求出在此特征值和偏置下的平均损失率和平均梯度,用于梯度下降算法的更新。

平均梯度计算

计算参数的梯度为:d(w1)i,d(w2)i,d(b)i,提供了n个样本,求最终的dw1,dw2,db,如何去设计一个算法计算?使用伪代码

需要用到的概念

1.线性回归计算

用到的公式为:WTXi+b

2.逻辑回归计算

y=11+e(wTx+b)

3.损失率计算

L(y^,y)=[ylog(y^)+(1y)log(1y^)]

4.逻辑回归函数的求导

开始编写代码

有了上述的概念,我们可以进行伪代码的编写,我们的思路是:求出线性回归z->通过线性回归z求出逻辑回归σ(z)->通过逻辑回归计算损失率->求出逻辑回归函数σ关于线性回归函数的导数dz->通过得到的dz分别与dw1,dw2,db求偏导数->将每次的损失率,dw1,dw2,db累加,求出平均损失率和平均梯度

有了思路之后我们可以着手编写代码了,以至于编写时产生混乱。

//首先,我们初始化
J=0,dw1=0,dw2=0,b=0
//这里我们使用循环去对每个样本做运算
for i in n:
	//计算当次线性回归
	zi = WT * xi + b
	//计算逻辑回归,计算预测值
	ji = sigmoid(zi)
	//计算总损失率,这里ji代表逻辑回归的预测值,yi代表结果值
	J+= -[yi*log(ji)+(1-yi)*log(1-ji)]
	
	//计算梯度的总和,由于我们讲梯度是偏导,这里涉及复合函数偏导
	//针对损失率对w1,w2,b求偏导,那么我们首先要计算j(w1,w2,b)关于zi的导数
	//首先求出逻辑回归关于线性回归的导数
	dzi = ji(1-ji)
	//使用复合函数求偏导,求出偏导数并累加
	dw1 += x1i * dzi
	dw2 += x2i * dzi
	db += b * dzi

//计算平均值
//损失率平均值
j /= n
//梯度平均值
dw1 /= n
dw2 /= n
db /= n

梯度更新

还是下面这张图片,我们上面的平均梯度计算就是下图的蓝色区域。

image-rupa.png