本节我们讨论怎样通过计算偏导数来实现逻辑回归的梯度下降算法。它的关键点是几个 重要公式,其作用是用来实现逻辑回归中梯度下降算法。但是在本节中,我将使用计算图对梯度下降算法进行计算。使用计算图来计算逻辑回归的梯度下降算法有点大材小用了。但是,我认为以这个例子作为开始来讲解,可以使你更好的理解背后的思想。从而在讨论神经网络时,你可以更深刻而全面地理解神经网络。接下来让我们开始学习逻辑回归的梯度下降算法。

单个样本的梯度下降

假设样本只有两个特征𝑥1和𝑥2,为了计算𝑧,我们需要输入参数𝑤1、𝑤2 和𝑏,除此之外 还有特征值𝑥1和𝑥2。因此𝑧的计算公式为: 𝑧 = 𝑤1𝑥1 + 𝑤2𝑥2 + 𝑏。
逻辑回归的公式回忆,需要准确的说出每个符号的含义及名称,例如,𝜎(𝑧),𝐿(𝑦^, 𝑦),𝐽(𝑤,𝑏)…..
image.png
image.png
然后求𝑑𝐿/𝑑𝑧, image.png
这里记得利用sigmoid函数的导数特性:image.png
最后计算得到:𝑑𝐿/𝑑𝑧=𝑎 − 𝑦,也就是𝑑𝑧。
image.png
然后: 更新𝑤1 =𝑤1 −𝑎𝑑𝑤1,更新𝑤2 =𝑤2 −𝑎𝑑𝑤2,更新𝑏=𝑏−𝛼𝑑𝑏。 这就是关于单个样本实例的梯度下降算法中参数更新一次的步骤。

m个样本的梯度下降

image.png
image.png
上述只应用了一步梯度下降。因此你需要重复以上内容很多次,以应用多次梯度下 降。看起来这些细节似乎很复杂,但目前不要担心太多。希望你明白,当你继续尝试并应用 这些在编程作业里,所有这些会变的更加清楚。
但这种计算中有两个缺点,也就是说应用此方法在逻辑回归上你需要编写两个 for 循环。第一个 for 循环是一个小循环遍历𝑚个训练样本,第二个 for 循环是一个遍历所有特征的 for循环。这个例子中我们只有2个特征,所以𝑛等于2并且𝑛𝑥 等于2。但如果你有更多特征,你开始编写你的因此𝑑𝑤1 ,𝑑𝑤2 ,你有相似的计算从𝑑𝑤3 一直下去到𝑑𝑤n 。所以你需要一个 for 循环遍历所有𝑛个特征。
当你应用深度学习算法,你会发现在代码中显式地使用 for 循环使你的算法很低效,同时在深度学习领域会有越来越大的数据集。所以能够应用你的算法且没有显式的 for 循环会是重要的,并且会帮助你适用于更大的数据集。所以这里有一些叫做向量化技术,它可以允许你的代码摆脱这些显式的 for 循环。
我想在先于深度学习的时代,也就是深度学习兴起之前,向量化是很棒的。可以使你有时候加速你的运算,但有时候也未必能够。但是在深度学习时代向量化,摆脱 for 循环已经变得相当重要。因为我们越来越多地训练非常大的数据集,因此你真的需要你的代码变得非常高效。所以在接下来的几个视频中,我们会谈到向量化,以及如何应用向量化而连一个 for 循环都不使用。所以学习了这些,我希望你有关于如何应用逻辑回归,或是用于逻辑回归的 梯度下降,事情会变得更加清晰。当你进行编程练习,但在真正做编程练习之前让我们先谈谈向量化。然后你可以应用全部这些东西,应用一个梯度下降的迭代而不使用任何 for 循环。

Vectorization(向量化)

向量化是非常基础的去除代码中 for 循环的艺术,否则如果在大数据集上,你的代码可能花费很长时间去运行,你将 要等待非常长的时间去得到结果。所以在深度学习领域,运行向量化是一个关键的技巧,
image.png

Vectorizing Logistic Regression(向量化逻辑回归)

image.png
𝑍 = [𝑧(1) 𝑧(2) …𝑧(m) ]=𝑤𝑇𝑋+[𝑏𝑏…𝑏]=[𝑤𝑇 𝑥(1) +𝑏,𝑤𝑇 𝑥(2) + 𝑏…𝑤𝑇𝑥(𝑚) +𝑏]
𝐴 = [𝑎(1) 𝑎(2) . . . 𝑎(𝑚) ] = 𝜎(𝑍)
概括一下,你刚刚看到如何利用向量化在同一时间内高效地计算所有的激活函数的所有 𝑎值。接下来,可以证明,你也可以利用向量化高效地计算反向传播并以此来计算梯度。让我们在下一个视频中看该如何实现。

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

image.png
此处需要注意为什么dw的计算为什么没有np.sum(),dz 为什么转置,因为矩阵相乘本来就是一种求和。X的维度(nx,m),dZ维度是(1*m),dw的维度是(nx,1),W 的维度是(nx,m)。
总结:
前向传播的伪代码:
image.png
后向传播的伪代码:
image.png