文章

12 逻辑回归的梯度下降(Gradient Descent for Logistic Regression)

12 逻辑回归的梯度下降(Gradient Descent for Logistic Regression)

1. 逻辑回归模型回顾

  对于一个样本 $(x, y)$,其中:

  • 输入特征向量:$\mathbf{x} = \begin{bmatrix} x_1 \ x_2 \end{bmatrix} \in \mathbb{R}^2$(为简化,假设只有两个特征)
  • 参数:权重 $\mathbf{w} = \begin{bmatrix} w_1 \ w_2 \end{bmatrix}$,偏置 $b \in \mathbb{R}$
  • 真实标签:$y \in {0, 1}$

  逻辑回归的前向传播过程如下:

\[\begin{aligned} z &= \mathbf{w}^\top \mathbf{x} + b = w_1 x_1 + w_2 x_2 + b \\ \hat{y} = a &= \sigma(z) = \frac{1}{1 + e^{-z}} \\ \mathcal{L}(a, y) &= -y \log a - (1 - y) \log(1 - a) \end{aligned}\]

  其中:

  • $a$ 是模型预测的概率输出(即 $\hat{y}$)
  • $\mathcal{L}(a, y)$ 是单个样本的损失函数(Loss) ,也称为交叉熵损失(Cross-Entropy Loss)

2. 反向传播:计算梯度(使用计算图)

  目标:通过反向传播计算损失 $\mathcal{L}$ 对参数 $\mathbf{w}$ 和 $b$ 的偏导数,用于梯度下降更新。

步骤 1:计算 $\frac{\partial \mathcal{L}}{\partial a}$

\[\frac{\partial \mathcal{L}}{\partial a} = -\frac{y}{a} + \frac{1 - y}{1 - a}\]

  记作:da = -y/a + (1 - y)/(1 - a)


步骤 2:计算 $\frac{\partial \mathcal{L}}{\partial z}$

  利用链式法则:

\[\frac{\partial \mathcal{L}}{\partial z} = \frac{\partial \mathcal{L}}{\partial a} \cdot \frac{\partial a}{\partial z}\]

  由于 $a = \sigma(z)$,其导数为:

\[\frac{\partial a}{\partial z} = a(1 - a)\]

  因此:

\[\frac{\partial \mathcal{L}}{\partial z} = \left( -\frac{y}{a} + \frac{1 - y}{1 - a} \right) \cdot a(1 - a) = a - y\]

  记作:dz = a - y

✅ 这是一个非常简洁且重要的结果:dz = a - y


步骤 3:计算参数梯度

  根据 $z = w_1 x_1 + w_2 x_2 + b$,可得:

\[\begin{aligned} \frac{\partial \mathcal{L}}{\partial w_1} &= \frac{\partial \mathcal{L}}{\partial z} \cdot \frac{\partial z}{\partial w_1} = dz \cdot x_1 \\ \frac{\partial \mathcal{L}}{\partial w_2} &= dz \cdot x_2 \\ \frac{\partial \mathcal{L}}{\partial b} &= dz \cdot 1 = dz \end{aligned}\]

  记作:

  • dw1 = x1 * dz
  • dw2 = x2 * dz
  • db = dz

3. 梯度下降更新规则(单个样本)

  设学习率为 $\alpha$,则参数更新为:

\[\begin{aligned} w_1 &:= w_1 - \alpha \cdot dw_1 = w_1 - \alpha \cdot x_1 (a - y) \\ w_2 &:= w_2 - \alpha \cdot x_2 (a - y) \\ b &:= b - \alpha \cdot (a - y) \end{aligned}\]

  这是一次基于单个训练样本的梯度下降步骤。


4. 扩展到整个训练集(预告)

  在实际训练中,我们有 $m$ 个样本 ${(\mathbf{x}^{(i)}, y^{(i)})}_{i=1}^m$。
此时需计算总损失(Cost Function)

\[J(\mathbf{w}, b) = \frac{1}{m} \sum_{i=1}^m \mathcal{L}(a^{(i)}, y^{(i)})\]

  对应的梯度为各样本梯度的平均值:

\[\begin{aligned} d\mathbf{w} &= \frac{1}{m} \sum_{i=1}^m \mathbf{x}^{(i)} (a^{(i)} - y^{(i)}) \\ db &= \frac{1}{m} \sum_{i=1}^m (a^{(i)} - y^{(i)}) \end{aligned}\]

  然后进行批量更新:

\[\begin{aligned} \mathbf{w} &:= \mathbf{w} - \alpha \cdot d\mathbf{w} \\ b &:= b - \alpha \cdot db \end{aligned}\]

🔜 这部分内容将在下一节课中详细讲解(向量化与批量梯度下降)。


5. 关键公式总结(必须记住)

表达式
预测值$a = \sigma(\mathbf{w}^\top \mathbf{x} + b)$
单样本损失$\mathcal{L}(a, y) = -y \log a - (1 - y)\log(1 - a)$
关键中间梯度$dz = a - y$
权重梯度$d\mathbf{w} = \mathbf{x} \cdot dz$
偏置梯度$db = dz$

6. 为什么用计算图?

  虽然对逻辑回归而言,直接求导更简单,但吴恩达使用计算图(Computation Graph) 是为了:

  • 建立反向传播(Backpropagation)的直观理解
  • 为后续深度神经网络的梯度计算打下基础
  • 强调链式法则(Chain Rule) 在自动微分中的核心作用

  ✅ 学习建议

  • 动手推导一次 $\frac{\partial \mathcal{L}}{\partial z} = a - y$,加深理解
  • 尝试用 Python 实现单样本和批量的逻辑回归梯度下降
  • 注意区分 Loss(单样本)Cost(全体样本平均)
本文由作者按照 CC BY 4.0 进行授权