2.14 向量化 Logistic 回归的梯度输出-深度学习-Stanford吴恩达教授

向量化 Logistic 回归的梯度输出 (Vectorizing Logistic Regression’s Gradient Computation)

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

上节课已经学习了如何通过向量化计算预测,同时计算出整个训练集的激活值a,在这个视频你将会看到如何计算全部m个训练样本的梯度(强调是同时计算) ,并结合前面所学在结尾会展示如何非常高效地实现逻辑回归。

之前我们在讲梯度计算的时候,列举过几个例子,dz^{(1)} = a^{(1)} - y^{(1)},dz^{(2)} = a^{(2)} -y^{(2)},.......等等一系列类似公式。现在,对所有 m  个训练数据做同样的计算,我们可以定义一个新的变量 dZ = [ dz^{(1)},dz^{(2)},......,dz^{(m)} ]  ,即这是一个1xm 的矩阵(或说是一个m维行向量)。在之前的幻灯片中,我们已经知道如何计算A = [ a^{(1)},a^{(2)},......,a^{(m)} ]Y = [ y^{(1)},y^{(2)},......,y^{(m)} ]  。

基于这些定义,我们可以这样计算 dZ = A -Y = [a^{(1)} - y^{(1)}, a^{(2)} - y^{(2)},......,a^{(m)} - y^{(m)}]  。不难发现第一个元素就是 dz^{(1)},以此类推。所以我们现在仅需一行代码,就可以同时完成这所有的计算。

 

在之前的实现中,我们已经去掉了一个for循环,但我们仍有一个遍历训练集的循环,如下所示:

之前消除一个for的伪代码:

 


 

上述(伪)代码就是我们在之前实现中做的,我们已经去掉了一个for循环,但用上述方法计算dw仍然需要一个循环遍历训练集,我们现在要做的就是将其向量化!

在这里插入图片描述 

首先我们来看 db ,不难发现db = \frac{1}{m} \sum_{i=1}^{m} dz^{(i)} , 之前的讲解中,我们知道所有的dz^{(i)}  已经组成一个行向量dZ了,所以在Python中,我们很容易地想到db = \frac{1}{m} \cdot np.sum(dZ) ,实现对db的向量化计算。

dw呢?我们先写出它的公式 dw = \frac{1}{m} \cdot X \cdot dZ^{T} = \frac{1}{m} \cdot ( x^{(1)}dz^{(1)},x^{(2)}dz^{(2)},......,x^{(m)}dz^{(m)})    ,展开如上图。   因此我们可以仅用两行代码进行计算:

db = \frac{1}{m} \cdot np.sum(dZ)

dw = \frac{1}{m} \cdot X \cdot dZ^{T}

这样,我们就避免了在训练集上使用for循环。

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

在这里插入图片描述

 (其中np.dot(w.T,x)+b是代码写法)

 现在我们利用前五个公式完成了前向和后向传播,也实现了对所有训练样本进行预测和求导,再利用后两个公式,梯度下降更新参数。我们的目的是不使用for循环,所以我们就通过一次迭代实现一次梯度下降,但如果你希望多次迭代进行梯度下降,那么仍然需要for循环,放在最外层。不过我们还是觉得一次迭代就进行一次梯度下降,避免使用任何循环比较舒服一些。
 

最后,我们得到了一个高度向量化的、非常高效的逻辑回归的梯度下降算法,我们将在下次视频中讨论Python中的Broadcasting技术。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值