这一节讨论怎么计算偏导数来实现逻辑回归的梯度下降法,它的核心关键点是其中有几个重要法公式用于实现逻辑回归的梯度下降法。
这里将使用导数流程图来计算梯度,必须承认,用导数流程图来计算逻辑回归的梯度下降有点大材小用了。但以这种方式来讲解可以更好地理解梯度下降,从而在讨论神经网络时,可以更深刻全面地理解神经网络。
回想一下逻辑回归的公式,如下图所示,现在只考虑单个样本的损失函数,现在写出该样本的偏导数流程图,假设样本只有两个特征,分别为
x
1
x_1
x1和
x
2
x_2
x2,为了计算z,我们需要输入参数
w
1
w_1
w1、
w
2
w_2
w2和b,还有样本特征值
x
1
x_1
x1和
x
2
x_2
x2,用这些值来计算z。z的计算公式为
z
=
w
1
∗
x
1
+
w
2
∗
x
2
+
b
z = w_1*x_1+w_2*x_2+b
z=w1∗x1+w2∗x2+b,然后计算
y
^
\hat {y}
y^,即
a
=
s
i
g
m
a
(
z
)
a=sigma(z)
a=sigma(z),也就是偏导数流程图的下一步,最后计算
L
o
s
s
(
a
,
y
)
Loss(a,y)
Loss(a,y)。
因此在逻辑回归中,需要做的是变换参数w和b的值,来最小化损失函数。在前面我们已经将前向传播步骤在单个训练样本上计算损失函数。
现在讨论怎么向后计算偏导数,以下是整洁版本的图,要想计算损失函数L的导数,首先要向前一步,计算损失函数的导数,即
d
L
o
s
s
(
a
,
y
)
d
a
\frac{dLoss(a,y)}{da}
dadLoss(a,y)。在代码中只需要用da来表示这个变量,即
d
a
=
d
L
o
s
s
(
a
,
y
)
d
a
=
−
y
a
+
1
−
y
1
−
a
da = \frac{dLoss(a,y)}{da}=-\frac{y}{a}+\frac{1-y}{1-a}
da=dadLoss(a,y)=−ay+1−a1−y。损失函数导数的计算公式就是这样,如果你熟悉微积分,你计算的关于变量a的导数就是这个式子。
现在计算出 d a da da,最终结果关于变量a的导数,现在可以再往后一步,计算 d z dz dz, d z dz dz是代码中的变量名, d z dz dz是损失函数关于z的导数, d z = d L d z = d L d a ∗ d a d z = a − y dz=\frac{dL}{dz}=\frac{dL}{da}*\frac{da}{dz}=a-y dz=dzdL=dadL∗dzda=a−y。因为 d L d a = − y a + 1 − y 1 − a \frac{dL}{da}=-\frac{y}{a}+\frac{1-y}{1-a} dadL=−ay+1−a1−y,同时 d a d z = a ( 1 − a ) \frac{da}{dz}=a(1-a) dzda=a(1−a),所以 d z = a − y dz=a-y dz=a−y。
现在是向后传播的最后一步,看看w和b需要如何变化。特别地,关于 w 1 w_1 w1的导数 d w 1 = d L d w 1 = x 1 ∗ d z dw_1=\frac{dL}{dw_1}=x_1*dz dw1=dw1dL=x1∗dz,同理有 d w 2 = x 2 ∗ d z dw_2=x_2*dz dw2=x2∗dz, d b = d z db = dz db=dz。
因此关于单个样本的梯度下降法所需要做的就是这些事情。