2.10 m 个样本的梯度下降(Gradient Descent on m Examples)
在之前的视频中,你已经看到如何计算导数,以及应用梯度下降在逻辑回归的一个训练样本上。现在我们想要把它应用在𝑚个训练样本上。
首先,让我们时刻记住有关于损失函数𝐽(𝑤, 𝑏)的定义。
J
(
w
,
b
)
=
1
m
∑
i
=
1
m
L
(
a
(
i
)
,
y
(
i
)
)
J(w,b)=\frac{1}{m}\sum\nolimits_{i=1}^{m}{L({{a}^{(i)}},{{y}^{(i)}})}
J(w,b)=m1∑i=1mL(a(i),y(i))
当你的算法输出关于样本𝑦的
a
(
i
)
{{a}^{(i)}}
a(i),
a
(
i
)
{{a}^{(i)}}
a(i)是训练样本的预测值,即:𝜎(
z
(
i
)
{{z}^{(i)}}
z(i)) = 𝜎(
w
T
x
(
i
)
{{w}^{T}}{{x}^{(i)}}
wTx(i)+ 𝑏)。 所以我们在前面的幻灯中展示的是对于任意单个训练样本,如何计算微分当你只有一个训练样本。因此𝑑
w
1
{{w}_{1}}
w1,𝑑
w
2
{{w}_{2}}
w2和𝑑𝑏 添上上标𝑖表示你求得的相应的值。如果你面对的是我们在之前的幻灯中演示的那种情况,但只使用了一个训练样本(
x
(
i
)
{{x}^{(i)}}
x(i),
y
(
i
)
{{y}^{(i)}}
y(i))。
现在你知道带有求和的全局代价函数,实际上是 1 到𝑚项各个损失的平均。 所以它表明全局代价函数对
w
1
{{w}_{1}}
w1的微分,对
w
1
{{w}_{1}}
w1的微分也同样是各项损失对
w
1
{{w}_{1}}
w1微分的平均。
但之前我们已经演示了如何计算这项,即之前幻灯中演示的如何对单个训练样本进行计算。所以你真正需要做的是计算这些微分,如我们在之前的训练样本上做的。并且求平均,这会给你全局梯度值,你能够把它直接应用到梯度下降算法中。
所以这里有很多细节,但让我们把这些装进一个具体的算法。同时你需要一起应用的就是逻辑回归和梯度下降。
我们初始化𝐽 = 0, 𝑑
w
1
{{w}_{1}}
w1 = 0, 𝑑
w
2
{{w}_{2}}
w2 = 0, 𝑑𝑏 = 0
代码流程:
幻灯片上只应用了一步梯度下降。因此你需要重复以上内容很多次,以应用多次梯度下降。看起来这些细节似乎很复杂,但目前不要担心太多。希望你明白,当你继续尝试并应用这些在编程作业里,所有这些会变的更加清楚。
但这种计算中有两个缺点,也就是说应用此方法在逻辑回归上你需要编写两个 for 循环。第一个 for 循环是一个小循环遍历𝑚个训练样本,第二个 for 循环是一个遍历所有特征的 for循环。这个例子中我们只有 2 个特征,所以𝑛等于 2 并且
n
x
{{n}_{x}}
nx 等于 2。 但如果你有更多特征,你开始编写你的因此𝑑
w
1
{{w}_{1}}
w1,𝑑
w
2
{{w}_{2}}
w2,你有相似的计算从𝑑
w
3
{{w}_{3}}
w3一直下去到𝑑
w
n
{{w}_{n}}
wn。所以看来你需要一个 for 循环遍历所有𝑛个特征。
当你应用深度学习算法,你会发现在代码中显式地使用 for 循环使你的算法很低效,同时在深度学习领域会有越来越大的数据集。所以能够应用你的算法且没有显式的 for 循环会是重要的,并且会帮助你适用于更大的数据集。所以这里有一些叫做向量化技术,它可以允许你的代码摆脱这些显式的 for 循环。
我想在先于深度学习的时代,也就是深度学习兴起之前,向量化是很棒的。可以使你有时候加速你的运算,但有时候也未必能够。但是在深度学习时代向量化,摆脱 for 循环已经变得相当重要。因为我们越来越多地训练非常大的数据集,因此你真的需要你的代码变得非常高效。所以在接下来的几个视频中,我们会谈到向量化,以及如何应用向量化而连一个 for循环都不使用。所以学习了这些,我希望你有关于如何应用逻辑回归,或是用于逻辑回归的梯度下降,事情会变得更加清晰。当你进行编程练习,但在真正做编程练习之前让我们先谈谈向量化。然后你可以应用全部这些东西,应用一个梯度下降的迭代而不使用任何 for 循环。
吴恩达视频-第一门课第2周2.10节-m 个样本的梯度下降(Gradient Descent on m Examples)
于 2022-05-10 14:45:13 首次发布