吴恩达老师DeepLearning系列课程最详细学习笔记之16—m个样本的梯度下降

教程是本人学习吴恩达老师DeepLearing系列课程中整理的最为详细的学习笔记。学习视频主要来自B站[双语字幕]吴恩达深度学习deeplearning.ai_哔哩哔哩_bilibili?,以及DeepLearning官方网站Deep Learning by deeplearning.ai | Coursera。该系列课程总共有180多个,我会将学习笔记陆续分享出来,为有兴趣深度学习的同仁提供便利。再次由衷感谢吴恩达老师的精彩讲解和无私奉献!

特别说明:图片来源于吴恩达老师视频截图。

 

 

 

 

 

 附文本:

 
在之前的视频中,你已经看到如何计算导数,和把梯度下降法应用到logistic回归的一个训练样本上。现在我们想把它应用在m个训练样本上。首先,时刻记住有关于成本函数J(w,b)的定义,它是这样一个平均值:
 
我们在前面的幻灯片中展示的是对于任意单个训练样本如何计算导数。从上面成本函数J(w,b)的定义可以看出,全局成本函数是一个求和,实际上是1到m项损失函数之和的平均,它表明,全局成本函数对w1的导数也是各项损失函数对w1导数的平均。
 
之前我们已经演示了如何计算这项 ,也就是我写的,即之前幻灯片演示的如何对单个训练样本进行计算,所以你真正需要做的是计算这些导数 。如我们在之前的训练样本上做的,并且求平均,这就会得到全局梯度值 ,你能够把它直接应用到梯度下降算法中。所以,这里有很多细节,让我们把这些装进一个具体的算法,同时你需要一起应用的就是logistic回归和梯度下降法。 因此你能做的,让我们初始化:J=0, dw1, dw2=0,db=0。
 
我们要做的是使用一个for循环遍历训练集,同时计算相应的每个训练样本的导数,然后把它们加起来。好了,如我们所做的让i等于1到m,m是训练样本的个数 。我们计算z^((i) )=w^T x^((i) )+b  【备注:w=[■(■(w_1@w_2 )@■(⋮@w_(n_x ) ))]   w^T=[■(■(w_1&w_2 )&■(…&w_(n_x ) ))]    x^((i) )=[■(|@x^((1) )@|)]=[■(■(x_1^((1) )@x_2^((1) ) )@■(⋮@x_(n_x)^((1) ) ))]】, 
,a^((i) )(相当于y ̂^((i) ))为样本i的预测值,等于〖σ(z〗^((i) )) 。然后,你知道,让我们加上J 。我们之前见过,我们有dz^((i) )它等于a^((i) )减去y^((i) ),即dz^((i) )=a^((i) )-y^((i) ) 。dw1加等于〖x_1〗^((i) )乘以dz^((i) ) dw_1+=〖x_1〗^((i) )∙dz^((i) ),dw2加等于〖x_2〗^((i) )乘以dz^((i) )   dw_2+=〖x_2〗^((i) )∙dz^((i) )。假设你只有两个特征,所以n等于2,否则你做这个从dw_1   dw_2   dw_3一直下去到dw_n。同时,db加等于dz^((i) )  db+=dz^((i) )。 
最终,对所有的m个训练样本都进行了这个计算,你还需要除以m,因为我们计算平均值。因此,dw_1=(dw_1)/m  dw_2=(dw_2)/m    db=db/m 可以计算平均值 。
随着所有这些计算,你已经计算了损失函数J对各个参数w1,w2和b的导数。回顾我们正在做的细节,我们使用dw1,dw2和db作为累加器,所以在这些计算之后,你知道dw1等于你的全局成本函数对w1的导数 。对dw2和db也是一样,同时注意dw1和dw2没有上标i,因为我们在这代码中把它们作为累加器,去求取整个训练集上的和。相反地, dz^((i) )这是对应于单个训练样本的dz  ,上标i指的是对应第i个训练样本的计算。完成所有这些计算后,应用一步梯度下降,使得w1获得更新,即w1减去学习率乘以dw1   w_1=w1-∝*dw_1。w2更新,即w2减去学习率乘以dw2   w_2=w2-∝*dw_2。同时更新b,b减去学习率乘以db   b=b-∝*db。 这里dw1,dw2和db正如你知道的前面已经计算出来了 。最终这里的J也会是你成本函数的正确值 。所以幻灯片上的所有东西,只应用了一次梯度下降法。因此你需要重复以上内容很多次,以应用多次梯度下降。看起来这些细节似乎很复杂,但目前不要担心太多,只要你在编程作业里实现这些之后,这些会清晰起来的。
但它表明计算中有两个缺点,当应用在这里的时候,就是说应用此方法到logistic回归,你需要编写两个for循环,第一个for循环是遍历m个训练样本的小循环 ,第二个for循环是遍历所有特征的for循环,在这个例子中,我们只有2个特征,所以n等于2,即n_x等于2, 但如果你有更多特征,你开始编写的dw1 dw2 类似地计算dw3,一直到dwn, 看来你需要一个for循环,遍历所有n个特征。当你应用深度学习算法,你会发现在代码中显示地使用for循环会使算法很低效。同时,在深度学习领域,会有越来越大的数据集,所以能够应用你的算法完全不用显示for循环的话会是重要的,会帮助你处理更大的数据集。有一门向量化技术,帮助你的代码摆脱这些显示的for循环,我想在深度学习时代的早期也就是深度学习兴起之前,向量化是很棒的,有时候用来加速运算,但有时候也未必能够加速运算。但是在深度学习时代,用向量化来摆脱for循环已经变得相当重要,因为我们越来越多地训练非常大的数据集,你的代码便需要非常高效。接下来的几个视频,我们将会谈到向量化,以及如何应用这些做到一个for循环都不需要使用。
 
我希望你理解了如何应用logistic回归。对logistic回归应用梯度下降法,在你进行编程练习之后应该会掌握地更清楚。但在编程练习之前,让我们先谈谈“向量化”,然后你可以做到全部这些实现一个梯度下降法的迭代而不使用for循环。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值