1. 问题背景
在逻辑回归中,我们预测输入 $\mathbf{x}^{(i)}$ 的输出为 $y^{(i)} \in {0, 1}$,模型定义如下:
- 模型函数: $$
f_{\mathbf{w}, b}(\mathbf{x}^{(i)}) = g(z^{(i)}) \tag{3}
$$ - 线性组合: $$
z^{(i)} = \mathbf{w} \cdot \mathbf{x}^{(i)} + b \tag{4}
$$ - Sigmoid 函数: $$
g(z^{(i)}) = \frac{1}{1 + e^{-z^{(i)}}} \tag{5}
$$
2. 损失函数
我们采用逻辑回归的对数似然损失函数(交叉熵损失):
$$
J(\mathbf{w}, b) = -\frac{1}{m} \sum_{i=1}^{m} \left[y^{(i)} \log(f_{\mathbf{w}, b}(\mathbf{x}^{(i)})) + (1 – y^{(i)}) \log(1 – f_{\mathbf{w}, b}(\mathbf{x}^{(i)})) \right]
$$
其中,$m$ 是样本数量。
3. 目标
求损失函数 $J(\mathbf{w}, b)$ 对参数 $\mathbf{w}$ 和 $b$ 的偏导数,即计算 $\frac{\partial J}{\partial w_j}$ 和 $\frac{\partial J}{\partial b}$。
4. 推导步骤
(a)对 $w_j$ 求偏导数
首先,计算损失函数对 $w_j$ 的偏导数:
$$
\frac{\partial J}{\partial w_j} = -\frac{1}{m} \sum_{i=1}^{m} \left[y^{(i)} \frac{\partial}{\partial w_j} \log(f^{(i)}) + (1 – y^{(i)}) \frac{\partial}{\partial w_j} \log(1 – f^{(i)}) \right] \tag{6}
$$
其中,$f^{(i)} = f_{\mathbf{w}, b}(\mathbf{x}^{(i)})$。
(b)计算 $\log(f^{(i)})$ 和 $\log(1 – f^{(i)})$ 的偏导数
首先,我们需要计算 $f^{(i)}$ 对 $w_j$ 的偏导数。
- 计算 $f^{(i)}$ 对 $z^{(i)}$ 的偏导数: $$
\frac{\partial f^{(i)}}{\partial z^{(i)}} = g'(z^{(i)}) = f^{(i)} (1 – f^{(i)}) \tag{7}
$$ - 计算 $z^{(i)}$ 对 $w_j$ 的偏导数: $$
\frac{\partial z^{(i)}}{\partial w_j} = x_j^{(i)} \tag{8}
$$ - 应用链式法则计算 $f^{(i)}$ 对 $w_j$ 的偏导数: $$
\frac{\partial f^{(i)}}{\partial w_j} = \frac{\partial f^{(i)}}{\partial z^{(i)}} \cdot \frac{\partial z^{(i)}}{\partial w_j} = f^{(i)} (1 – f^{(i)}) x_j^{(i)} \tag{9}
$$ - 计算 $\log(f^{(i)})$ 对 $w_j$ 的偏导数: $$
\frac{\partial}{\partial w_j} \log(f^{(i)}) = \frac{1}{f^{(i)}} \cdot \frac{\partial f^{(i)}}{\partial w_j} = \frac{f^{(i)} (1 – f^{(i)}) x_j^{(i)}}{f^{(i)}} = (1 – f^{(i)}) x_j^{(i)} \tag{10}
$$ - 计算 $\log(1 – f^{(i)})$ 对 $w_j$ 的偏导数: $$
\frac{\partial}{\partial w_j} \log(1 – f^{(i)}) = \frac{1}{1 – f^{(i)}} \cdot \left(-\frac{\partial f^{(i)}}{\partial w_j} \right) = -\frac{f^{(i)} (1 – f^{(i)}) x_j^{(i)}}{1 – f^{(i)}} = -f^{(i)} x_j^{(i)} \tag{11}
$$
(c)代入偏导数回到损失函数的偏导
将 (10) 和 (11) 代入 (6) 式:\begin{equation}
\frac{\partial J}{\partial w_j} = -\frac{1}{m} \sum_{i=1}^{m} \left[y^{(i)} (1 – f^{(i)}) x_j^{(i)} – (1 – y^{(i)}) f^{(i)} x_j^{(i)} \right] \tag{12}
\end{equation}
\begin{equation}
\frac{\partial J}{\partial w_j} = -\frac{1}{m} \sum_{i=1}^{m} \left[y^{(i)} x_j^{(i)} – y^{(i)} f^{(i)} x_j^{(i)} – f^{(i)} x_j^{(i)} + y^{(i)} f^{(i)} x_j^{(i)} \right] \tag{13}
\end{equation}
\begin{equation}
\frac{\partial J}{\partial w_j} = -\frac{1}{m} \sum_{i=1}^{m} \left[y^{(i)} x_j^{(i)} – f^{(i)} x_j^{(i)} \right] \tag{14}
\end{equation}
\begin{equation}
\frac{\partial J}{\partial w_j} = \frac{1}{m} \sum_{i=1}^{m} \left[f^{(i)} – y^{(i)} \right] x_j^{(i)} \tag{15}
\end{equation}
解释:
- 在 (13) 式中,$- y^{(i)} f^{(i)} x_j^{(i)}$ 和 $+ y^{(i)} f^{(i)} x_j^{(i)}$ 相互抵消。
- 在 (14) 式中,合并同类项得到 $y^{(i)} x_j^{(i)} – f^{(i)} x_j^{(i)}$。
- 在 (15) 式中,改变符号并调整顺序。
(d)对 $b$ 求偏导数
类似地,计算损失函数对 $b$ 的偏导数:
- 计算 $f^{(i)}$ 对 $b$ 的偏导数: $$
\frac{\partial z^{(i)}}{\partial b} = 1 \tag{16}
$$ $$
\frac{\partial f^{(i)}}{\partial b} = \frac{\partial f^{(i)}}{\partial z^{(i)}} \cdot \frac{\partial z^{(i)}}{\partial b} = f^{(i)} (1 – f^{(i)}) \tag{17}
$$ - 计算 $\log(f^{(i)})$ 和 $\log(1 – f^{(i)})$ 对 $b$ 的偏导数:
- 对于 $\log(f^{(i)})$:$$
\frac{\partial}{\partial b} \log(f^{(i)}) = \frac{1}{f^{(i)}} \cdot \frac{\partial f^{(i)}}{\partial b} = (1 – f^{(i)}) \tag{18}
$$ - 对于 $\log(1 – f^{(i)})$:$$
\frac{\partial}{\partial b} \log(1 – f^{(i)}) = -\frac{f^{(i)}}{1 – f^{(i)}} \tag{19}
$$
- 代入损失函数的偏导数: $$
\frac{\partial J}{\partial b} = -\frac{1}{m} \sum_{i=1}^{m} \left[y^{(i)} (1 – f^{(i)}) – (1 – y^{(i)}) f^{(i)} \right] \tag{20}
$$ - 化简偏导数表达式: $$\frac{\partial J}{\partial b} = -\frac{1}{m} \sum_{i=1}^{m} \left[y^{(i)} – y^{(i)} f^{(i)} – f^{(i)} + y^{(i)} f^{(i)} \right] \tag{21}$$
- $$\frac{\partial J}{\partial b} = -\frac{1}{m} \sum_{i=1}^{m} \left[y^{(i)} – f^{(i)} \right] \tag{22}$$
- $$\frac{\partial J}{\partial b} = \frac{1}{m} \sum_{i=1}^{m} \left[f^{(i)} – y^{(i)} \right] \tag{23}$$
5. 最终结果
(a)参数 $\mathbf{w}$ 的梯度:
$$
\frac{\partial J}{\partial w_j} = \frac{1}{m} \sum_{i=1}^{m} \left[f_{\mathbf{w}, b}(\mathbf{x}^{(i)}) – y^{(i)} \right] x_j^{(i)} \tag{24}
$$
(b)偏置 $b$ 的梯度:
$$
\frac{\partial J}{\partial b} = \frac{1}{m} \sum_{i=1}^{m} \left[f_{\mathbf{w}, b}(\mathbf{x}^{(i)}) – y^{(i)} \right] \tag{25}
$$
6. 总结
通过以上推导,我们得到了逻辑回归损失函数对参数 $\mathbf{w}$ 和 $b$ 的偏导数表达式。这些梯度用于更新参数,以最小化损失函数:
- 更新规则(梯度下降法): $$
w_j := w_j – \alpha \frac{\partial J}{\partial w_j}
$$ $$
b := b – \alpha \frac{\partial J}{\partial b}
$$ 其中,$\alpha$ 是学习率。
7. 注释
- 直观理解: 梯度的形式表明,每个参数的更新取决于预测值与实际值的差异 $(f^{(i)} – y^{(i)})$,以及对应的输入特征 $x_j^{(i)}$。
- 向量化表示: 可以将梯度表示为向量形式,方便计算:
- 对于 $\mathbf{w}$:$$
\nabla_{\mathbf{w}} J = \frac{1}{m} \mathbf{X}^\top (\mathbf{f} – \mathbf{y})
$$ 其中,$\mathbf{X}$ 是输入数据矩阵,$\mathbf{f}$ 是预测值向量,$\mathbf{y}$ 是实际标签向量。 - 对于 $b$:$$
\frac{\partial J}{\partial b} = \frac{1}{m} \sum_{i=1}^{m} (f^{(i)} – y^{(i)})
$$