吴恩达视频-第一门课第2周2.9节-逻辑回归中的梯度下降(Logistic Regression Gradient Descent)

2.9 逻辑回归中的梯度下降(Logistic Regression Gradient Descent)
  本节我们讨论怎样通过计算偏导数来实现逻辑回归的梯度下降算法。它的关键点是几个重要公式,其作用是用来实现逻辑回归中梯度下降算法。但是在本节视频中,我将使用计算图对梯度下降算法进行计算。我必须要承认的是,使用计算图来计算逻辑回归的梯度下降算法有点大材小用了。但是,我认为以这个例子作为开始来讲解,可以使你更好的理解背后的思想。从而在讨论神经网络时,你可以更深刻而全面地理解神经网络。接下来让我们开始学习逻辑回归的梯度下降算法。
  假设样本只有两个特征 x 1 {{x}_{1}} x1 x 2 {{x}_{2}} x2,为了计算𝑧,我们需要输入参数 w 1 {{w}_{1}} w1 w 2 {{w}_{2}} w2 和𝑏,除此之外还有特征值 x 1 {{x}_{1}} x1 x 2 {{x}_{2}} x2。因此𝑧的计算公式为: 𝑧 = w 1 x 1 {{w}_{1}}{{x}_{1}} w1x1 + w 2 x 2 {{w}_{2}}{{x}_{2}} w2x2 + 𝑏
  回想一下逻辑回归的公式定义如下: y ^ \hat{y} y^ = 𝑎 = 𝜎(𝑧) 其中𝑧 = w T x {{w}^{T}}x wTx + 𝑏 , 𝜎(𝑧) = 1 1 + e − z \frac{1}{1+{{e}^{-z}}} 1+ez1
  损失函数: L ( y ^ ( i ) , y ( i ) ) = − y ( i ) log ⁡ y ^ ( i ) − ( 1 − y ( i ) ) log ⁡ ( 1 − y ^ ( i ) ) L({{\hat{y}}^{(i)}},{{y}^{(i)}})=-{{y}^{(i)}}\log {{\hat{y}}^{(i)}}-(1-{{y}^{(i)}})\log (1-{{\hat{y}}^{(i)}}) L(y^(i),y(i))=y(i)logy^(i)(1y(i))log(1y^(i))
  代价函数: J ( w , b ) = 1 m ∑ i m L ( y ^ ( i ) , y ( i ) ) J(w,b)=\frac{1}{m}\sum\nolimits_{i}^{m}{L({{{\hat{y}}}^{(i)}},{{y}^{(i)}})} J(w,b)=m1imL(y^(i),y(i))
  假设现在只考虑单个样本的情况,单个样本的代价函数定义如下:
  𝐿(𝑎, 𝑦) = −(𝑦log(𝑎) + (1 − 𝑦)log(1 − 𝑎))
  其中𝑎是逻辑回归的输出,𝑦是样本的标签值。现在让我们画出表示这个计算的计算图。这里先复习下梯度下降法,𝑤和𝑏的修正量可以表达如下:
  𝑤: = 𝑤 − a ∂ J ( w , b ) ∂ w a\frac{\partial J(w,b)}{\partial w} awJ(w,b) ,𝑏: = 𝑏 − a ∂ J ( w , b ) ∂ b a\frac{\partial J(w,b)}{\partial b} abJ(w,b)
在这里插入图片描述
  如图:在这个公式的外侧画上长方形。然后计算: y ^ \hat{y} y^ = 𝑎 = 𝜎(𝑧) 也就是计算图的下一步。最后计算损失函数𝐿(𝑎, 𝑦)。 有了计算图,我就不需要再写出公式了。因此,为了使得逻辑回归中最小化代价函数𝐿(𝑎, 𝑦),我们需要做的仅仅是修改参数𝑤和𝑏的值。前面我们已经讲解了如何在单个训练样本上计算代价函数的前向步骤。现在让我们来讨论通过反向计算出导数。 因为我们想要计算出的代价函数𝐿(𝑎, 𝑦)的导数,首先我们需要反向计算出代价函数𝐿(𝑎, 𝑦)关于𝑎的导数,在编写代码时,你只需要用𝑑𝑎 来表示 d L ( a , y ) d a \frac{dL(a,y)}{da} dadL(a,y)
  通过微积分得到: d L ( a , y ) d a \frac{dL(a,y)}{da} dadL(a,y)= −𝑦/𝑎 + (1 − 𝑦)/(1 − 𝑎)
  如果你不熟悉微积分,也不必太担心,我们会列出本课程涉及的所有求导公式。那么如果你非常熟悉微积分,我们鼓励你主动推导前面介绍的代价函数的求导公式,使用微积分直接求出𝐿(𝑎, 𝑦)关于变量𝑎的导数。如果你不太了解微积分,也不用太担心。现在我们已经计算出𝑑𝑎,也就是最终输出结果的导数。 现在可以再反向一步,在编写 Python 代码时,你只需要用𝑑𝑧来表示代价函数𝐿关于𝑧 的导数 d L d z \frac{dL}{dz} dzdL,也可以写成 d L ( a , y ) d z \frac{dL(a,y)}{dz} dzdL(a,y),这两种写法都是正确的。 d L d z \frac{dL}{dz} dzdL= 𝑎 − 𝑦 。
  因为 d L ( a , y ) d z \frac{dL(a,y)}{dz} dzdL(a,y) d L d z \frac{dL}{dz} dzdL ( d L d a ) . ( d a d z ) (\frac{dL}{da}).(\frac{da}{dz}) (dadL).(dzda),并且 d a d z \frac{da}{dz} dzda= 𝑎 ⋅ (1 − 𝑎),而 d L d a = ( − y a + ( 1 − y ) ( 1 − a ) ) \frac{dL}{da}=(-\frac{y}{a}+\frac{(1-y)}{(1-a)}) dadL=(ay+(1a)(1y)),因此将这两项相乘,得到:
在这里插入图片描述
  视频中为了简化推导过程,假设 n x {{n}_{x}} nx这个推导的过程就是我之前提到过的链式法则。如果你对微积分熟悉,放心地去推导整个求导过程,如果不熟悉微积分,你只需要知道𝑑𝑧 = (𝑎 − 𝑦)已经计算好了。
  现在进行最后一步反向推导,也就是计算𝑤和𝑏变化对代价函数𝐿的影响,特别地,可以用:
在这里插入图片描述
  因此,关于单个样本的梯度下降算法,你所需要做的就是如下的事情:
  使用公式𝑑𝑧 = (𝑎 − 𝑦)计算𝑑𝑧,
  使用𝑑 w 1 {{w}_{1}} w1 = x 1 {{x}_{1}} x1 ⋅ 𝑑𝑧 计算𝑑 w 1 {{w}_{1}} w1, 𝑑 w 2 {{w}_{2}} w2 = x 2 {{x}_{2}} x2 ⋅ 𝑑𝑧计算𝑑 w 2 {{w}_{2}} w2, 𝑑𝑏 = 𝑑𝑧 来计算𝑑𝑏,
  然后: 更新 w 1 {{w}_{1}} w1= w 1 {{w}_{1}} w1 − 𝑎𝑑 w 1 {{w}_{1}} w1, 更新 w 2 {{w}_{2}} w2 = w 2 {{w}_{2}} w2 − 𝑎𝑑 w 2 {{w}_{2}} w2, 更新𝑏 = 𝑏 − 𝛼𝑑𝑏。
  这就是关于单个样本实例的梯度下降算法中参数更新一次的步骤。
在这里插入图片描述
  现在你已经知道了怎样计算导数,并且实现针对单个训练样本的逻辑回归的梯度下降算法。但是,训练逻辑回归模型不仅仅只有一个训练样本,而是有𝑚个训练样本的整个训练集。因此在下一节视频中,我们将这些思想应用到整个训练样本集中,而不仅仅只是单个样本上。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

越努力越幸运@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值