前言
计算图是一个很重要的概念。在上一篇笔记里面,我们把公式写进小格子里面看作图的一个结点,通过图结点的前驱和后继完成对于参数的更新,以及数值的运算,这就是计算图的用法。为了更好地在神经网络中利用计算图做点事情,这篇笔记会告诉你如何使用计算图计算梯度下降(梯度下降光讲是啥了,还没说怎么算呢)
计算图计算梯度下降
本节我们讨论怎样通过计算偏导数来实现逻辑回归的梯度下降算法。
它的关键点是几个重要公式,其作用是用来实现逻辑回归中梯度下降算法。
但是在本节中,将使用计算图对梯度下降算法进行计算。必须要承认的是,使用计算图来计算逻辑回归的梯度下降算法有点大材小用了。但是,以这个例子作为开始来讲解,可以使你更好的理解背后的思想。从而在讨论神经网络时,你可以更深刻而全面地理解神经网络。
接下来让我们开始学习逻辑回归的梯度下降算法。
假设样本只有两个特征x_1和x_2,为了计算z,我们需要输入参数w_1、w_2 和b,除此之外还有特征值x_1和x_2。因此z的计算公式为: z=w_1 x_1+w_2 x_2+b
回想一下逻辑回归的公式定义如下:
^y=a=σ(z) 其中z=w^T x+b , σ(z)=1/(1+e^(-z) )
损失函数:

代价函数:

假设现在只考虑单个样本的情况,单个样本的代价函数定义如下:

其中a是逻辑回归的输出,y是样本的标签值。
现在让我们画出表示这个计算的计算图。 这里先复习下梯度下降法,w和b的修正量可以表达如下:


如图:在这个公式的外侧画上长方形。
然后计算: ^y=a=σ(z) 也就是计算图的下一步。最后计算损失函数L(a,y)。
有了计算图,我就不需要再写出公式了。
因此,为了使得逻辑回归中最小化代价函数L(a,y),我们需要做的仅仅是修改参数w和b的值。前面我们已经讲解了如何在单个训练样本上计算代价函数的前向步骤。
现在让我们来讨论通过反向计算出导数。 因为我们想要计算出的代价函数L(a,y)的导数,首先我们需要反向计算出代价函数L(a,y)关于a的导数,在编写代码时,你只需要用da 来表示(dL(a,y))/da 。
通过微积分得到:

如果你不熟悉微积分,也不必太担心,我会列出本课程涉及的所有求导公式。那么如果你非常熟悉微积分,我们鼓励你主动推导前面介绍的代价函数的求导公式,使用微积分直接求出L(a,y)关于变量a的导数。如果你不太了解微积分,也不用太担心。现在我们已经计算出da,也就是最终输出结果的导数。 现在可以再反向一步,在编写Python代码时,你只需要用dz来表示代价函数L关于z 的导数dL/dz,也可以写成(dL(a,y))/dz,这两种写法都是正确的。 dL/dz=a-y 。
因为

并且da/dz=a⋅(1-a), 而

因此将这两项相乘

为了简化推导过程,假设n_x这个推导的过程就是我之前提到过的链式法则。
如果你对微积分熟悉,放心地去推导整个求导过程,如果不熟悉微积分,你只需要知道dz=(a-y)已经计算好了。
现在进行最后一步反向推导,也就是计算w和b变化对代价函数L的影响,特别地,可以用:

视频中, dw_1 表示∂L/(∂w_1 )=x_1⋅dz, dw_2 表示∂L/(∂w_2 )=x_2⋅dz, db=dz。
因此,
计算图与梯度下降

本文深入探讨了计算图的概念及其在神经网络中梯度下降算法的应用。通过详细解析逻辑回归中的梯度计算过程,展示了如何利用计算图进行高效的参数更新。此外,还提供了一个简单的代码示例,演示了梯度下降在实际问题中的实现。
最低0.47元/天 解锁文章
924





