MENU

Vectorizing Logistic Regression's Gradient

March 30, 2019 • Read: 225 • Deep Learning

注:本节中大写字母表示向量,小写字母表示元素

在本节中我们将学习如何向量化地计算$m$个训练数据的梯度,实现一个非常高效的逻辑回归算法

之前我们在将梯度计算的时候,列举过几个例子,$dz^{(1)}=a^{(1)}-y^{(1)},dz^{(2)}=a^{(2)}-y^{(2)},...$现在,我们定义一个新的变量$dZ=[dz^{(1)}\ dz^{(2)}\ ...\ dz^{(m)}]$,$dZ$是一个$1 \times m$的矩阵,并且$dZ=A-Y=[a^{(1)}-y^{(1)}\ a^{(2)}-y^{(2)}\ ...\ a^{(m)}-y^{(m)}]$,那么$dZ$的向量化计算就解决了

接着我们来看$db$,因为$db=\frac{1}{m}\sum_{i=1}^{m}dz^{(i)}$,上面的讲解中,我们已经将所有的$dz^{(i)}$组成一个行向量$dZ$了,所以在Python中,我们很容易地想到$db=\frac{1}{m}*np.sum(dZ)$

接下来看看$d\omega$,我们先写出它的公式$d\omega=\frac{1}{m}*X*dZ^T$,展开得$d\omega=\frac{1}{m}*(x^{(1)}dz^{(1)}+x^{(2)}dz^{(2)}+...+x^{(m)}dz^{(m)})$,在Python中,只需要使用$d\omega=\frac{1}{m}*X*dZ^T$

现在,让我们回顾一下之前怎么实现得逻辑回归,可以发现,没有向量化是非常低效的,如下图所示代码

现在我们的代码是

$$ Z=w^TX+b=np.dot(w.T, x) + b \\ A=\sigma(Z) \\ dZ=A-Y \\ dw=\frac{1}{m}XdZ^T \\ db=\frac{1}{m}np.sum(dZ) \\ w:=w-\alpha dw \\ b:=b-\alpha db $$

我们利用前五个公式完成了前向和后向传播,也实现了对所有训练样本进行预测和求导,再利用后两个公式,梯度下降更新参数,这里我们仅梯度下降一次,但如果你希望多次迭代进行梯度下降,那么仍然需要for循环

Archives Tip
QR Code for this page
Tipping QR Code