
视频元信息
- 课程来源:吴恩达深度学习专项课程(Deep Learning Specialization)
- 所属模块:神经网络与深度学习 / 逻辑回归与梯度下降
- 本节主题:在 m 个训练样本上实现逻辑回归的梯度下降
- 视频时长:约 8 分钟
- 语言:官方中英字幕
内容摘要(TL;DR)
本节讲解如何把"单样本梯度下降"扩展到 m 个训练样本。核心结论是:整体代价函数的导数等于各个样本损失函数导数的平均值。据此给出逻辑回归梯度下降的完整实现算法——先用 for 循环累加每个样本的 dw1、dw2、db,再除以 m 求平均,最后用学习率更新参数。视频最后指出该实现存在两个 for 循环(样本循环 + 特征循环)的弱点,引出下一节的向量化(Vectorization)技术。
一、回顾:从单样本到 m 样本 [00:00]
1.1 代价函数 J 的定义
逻辑回归的代价函数 J(w, b) 定义为所有训练样本损失的平均值:
J(w, b) = (1/m) · Σ(i=1 到 m) L(a^(i), y^(i))
其中:
- a^(i) 是第 i 个样本的预测值,等于 σ(z^(i)) = σ(wᵀx^(i) + b)
- L 是单个样本的损失函数(对数损失/交叉熵损失)
- m 是训练样本总数
理解:代价函数是"整体"指标,衡量模型在整个训练集上的表现;而损失函数 L 是"局部"指标,只看一个样本。
1.2 上一节的结论(单样本)
上一节已经证明:对于单个训练样本 (x^(i), y^(i)),可以计算出:
- dw₁^(i):J 对 w₁ 的偏导(仅由第 i 个样本贡献)
- dw₂^(i):J 对 w₂ 的偏导
- db^(i):J 对 b 的偏导
注意上标 (i) 的含义:带上标 i 的
dw1^(i)、dz^(i)表示"仅由第 i 个样本计算出的梯度分量",是一个中间量,不是最终要用的梯度。
二、核心推导:整体梯度 = 各样本梯度的平均 [01:17]
2.1 关键数学结论
由于整体代价函数 J 是各个样本损失的平均:
J(w, b) = (1/m) · Σ L^(i)
因此,J 对 w₁ 的导数也等于各样本导数的平均:
∂J/∂w₁ = (1/m) · Σ(i=1 到 m) ∂L^(i)/∂w₁ = (1/m) · Σ dw₁^(i)
推导:求导是线性运算,可以穿过求和符号。常数 1/m 在求导后依然保留。所以"先对每个样本求导,再取平均"和"先求平均代价再求导"结果相同。
2.2 实现思路
- 对每个训练样本,用上一节的方法计算
dw1^(i)、dw2^(i)、db^(i) - 把它们累加起来
- 最后除以 m,得到整体梯度
- 用这个整体梯度执行梯度下降
三、完整算法实现 [02:21]
3.1 初始化
J = 0
dw1 = 0
dw2 = 0
db = 0
易错点:累加变量不带下标 i
dw1、dw2、db是累加器,用来累积整个训练集的梯度贡献,因此不带上标 (i)。而dz^(i)是单样本中间量,必须带上标 (i)。这个命名区别非常关键,编程作业中经常混淆。
3.2 对每个样本循环(for i = 1 to m)
第 1 步:前向传播
z^(i) = wᵀx^(i) + b a^(i) = σ(z^(i))
第 2 步:累加代价函数
J += -[ y^(i)·log(a^(i)) + (1 - y^(i))·log(1 - a^(i)) ]
注意前面的负号要加到整个方括号外。
第 3 步:反向传播(计算单样本梯度)
dz^(i) = a^(i) - y^(i) dw1 += x₁^(i) · dz^(i) dw2 += x₂^(i) · dz^(i) db += dz^(i)
理解:dz^(i) = a^(i) - y^(i) 是逻辑回归反向传播中最漂亮的一个公式——预测值减真实值。这是 Sigmoid + 交叉熵组合求导后的简化结果。
本节假设只有 2 个特征(n = 2)。如果有 n 个特征,就需要对 dw₁、dw₂、…、dwₙ 分别做同样的累加,这里就埋下了"第二个 for 循环"的伏笔。
3.3 循环结束后:求平均
dw1 /= m dw2 /= m db /= m J /= m
3.4 参数更新(梯度下降一步)
w₁ := w₁ - α · dw1 w₂ := w₂ - α · dw2 b := b - α · db
其中 α 是学习率(learning rate)。
本节所有代码只实现"一步"梯度下降。要完成整个训练,需要把上述全部过程重复多次(每次迭代用更新后的参数重新计算)。
四、命名规范小结(易混淆点) [04:15]
| 变量 | 含义 | 是否带 (i) |
|---|---|---|
dz^(i) |
单个样本的中间梯度 | 带 |
dw1^(i) |
单个样本对 w₁ 的梯度贡献 | 带(推导时用) |
dw1 |
整个训练集累加后的梯度 | 不带 |
dw2 |
整个训练集累加后的梯度 | 不带 |
db |
整个训练集累加后的梯度 | 不带 |
思考:吴恩达特别强调这一点,是因为初学者很容易把"累加器"和"单样本梯度"混淆,导致除以 m 时出错或上标混乱。
五、当前实现的两大弱点 [05:50]
5.1 弱点一:样本循环(for i = 1 to m)
需要显式遍历 m 个训练样本。
5.2 弱点二:特征循环(for j = 1 to n)
当特征数 n > 2 时,需要写 dw1、dw2、dw3、…、dwn,本质上是对 n 个特征再做一次循环。
5.3 为什么显式 for 循环是问题?
- 代码运行效率低:Python 等解释型语言中,显式 for 循环比向量化运算慢得多
- 无法扩展:深度学习时代数据量越来越大(m 可能上百万、上亿)
- 工程需求:需要算法能 scale 到超大规模数据集
考点:深度学习时代 vs 前深度学习时代
- 前深度学习时代:向量化是"锦上添花"(nice to have),做不做都行
- 深度学习时代:向量化是"必需品",因为数据规模爆炸式增长,必须消除显式 for 循环
六、引出向量化(Vectorization) [07:30]
6.1 什么是向量化
向量化技术允许消除代码中的显式 for 循环,用矩阵/向量运算一次性处理所有样本和所有特征。
6.2 下节预告
吴恩达预告后续视频将讲解:
- 如何用向量化实现整个逻辑回归梯度下降
- 如何做到不使用任何一个 for 循环
- 实现"单次梯度下降迭代"的完全向量化版本
思考:向量化不仅能去掉显式循环,还能利用底层 BLAS 库、SIMD 指令、GPU 并行,带来数十倍甚至上百倍的加速。这是深度学习工程的核心基本功。
七、本节要点速查
- 核心公式:∂J/∂w = (1/m) · Σ ∂L^(i)/∂w,整体梯度 = 各样本梯度的平均
- 实现三步:① 循环累加 ② 除以 m 求平均 ③ 参数更新
- 命名规范:累加器不带 (i),单样本中间量带 (i)
- 两大弱点:样本循环 + 特征循环
- 解决方向:向量化(下节内容)
关键标签 / 关键词
深度学习 #吴恩达 #逻辑回归 #梯度下降 #代价函数 #m个训练样本 #向量化 #Vectorization #反向传播 #交叉熵损失 #Sigmoid #for循环优化 #学习率 #参数更新 #DeepLearning #LogisticRegression #GradientDescent
生成时间:2026-10-10 21:33:01 生成平台:VideoNote www.xygy.top