视频封面

视频元信息

  • 课程来源:吴恩达深度学习专项课程(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 实现思路

  1. 对每个训练样本,用上一节的方法计算 dw1^(i)、dw2^(i)、db^(i)
  2. 把它们累加起来
  3. 最后除以 m,得到整体梯度
  4. 用这个整体梯度执行梯度下降

三、完整算法实现 [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