WARNING
🧪 Beta公测版本提示:教程主体已完成,正在优化细节,欢迎大家提Issue反馈问题或建议。
s03 逻辑回归 — exercise.py 练习指南
练习目标
通过实现逻辑回归的四个核心数学函数,深刻理解 Sigmoid、交叉熵损失、梯度计算以及 Softmax 的数学原理和代码表达。这些函数是几乎所有现代神经网络分类器的基础组件。
预备知识
在开始练习前,确保你已经理解了以下概念(参见 demo.py 代码详解 中的详细解释):
- Sigmoid 函数的定义与性质:
,值域 ,导数 - 交叉熵损失的设计动机:为什么分类问题用交叉熵而不是 MSE
- Sigmoid + 交叉熵的"黄金梯度":
(Sigmoid 导数项在链式法则中被约掉) - Softmax 的数值稳定技巧:每行减去该行的最大值再计算指数
任务清单
任务1:实现 Sigmoid 函数 sigmoid(z)
- 用到的公式:
- 提示:
- 使用
np.exp()计算指数函数 - 使用
np.clip(z, -500, 500)限制的范围,防止 溢出(当 过大时 会变成无穷大) - 返回
1.0 / (1.0 + np.exp(-z_clipped))
- 使用
- 验证:
, ,
任务2:实现交叉熵损失 cross_entropy_loss(y_pred, y_true)
- 用到的公式:
- 实现步骤:
- 用
np.clip(y_pred, eps, 1-eps)裁剪预测概率(eps = 1e-15),防止 - 套用公式计算损失
- 用
- 需要调用的函数:
np.clip()、np.log()、np.sum()、np.mean()或其等价写法 - 验证:完美预测时损失接近于 0(例如
y_pred=[0.99, 0.01],y_true=[1, 0]),完全错误时损失很大
任务3:实现交叉熵梯度 compute_gradients(X, y_true, y_pred)
- 用到的公式:
- 实现步骤:
- 计算预测误差
errors = y_pred - y_true(这就是!) ——矩阵乘法 ——求和
- 计算预测误差
- 需要调用的函数:
@运算符或np.dot()、np.sum() - 关键理解:
errors就是,这是 Sigmoid + 交叉熵"黄金组合"的精髓——梯度等于预测误差,极其简洁
任务4(Bonus):实现 Softmax 函数 softmax(z)
- 用到的公式:
- 数值稳定技巧:
z_stable = z - np.max(z, axis=1, keepdims=True)(每行减去该行的最大值)exp_z = np.exp(z_stable)(计算稳定后的指数)return exp_z / np.sum(exp_z, axis=1, keepdims=True)(归一化)
- 需要调用的函数:
np.max()、np.exp()、np.sum() - 验证:每行之和应等于 1,每个值在
之间,得分最高的类别概率也最高
验证标准
运行 python exercise.py,如果你的实现正确:
test_sigmoid():基本值正确,test_cross_entropy():错误预测的损失 > 正确预测的损失- 只有完成 Softmax 部分后,
test_softmax()才会通过:每行和为 1,概率值在内,最大概率对应最大得分
源码位置
clone 后打开(相对仓库根目录):
docs/ml/foundations/logistic-regression/code/exercise.py