AI 算法数学怎么练?用 NumPy 核对逻辑回归损失与梯度

学习 AI 算法数学时,可以先检查逻辑回归的损失和梯度是否写对。下面用 NumPy 计算二分类交叉熵,并用有限差分近似逐项核对解析梯度;通过检查只表示当前实现与数值近似相符,不代表模型已经训练好。

学习 AI 算法数学时,可以先检查逻辑回归的损失和梯度是否写对。下面用 NumPy 计算二分类交叉熵,并用有限差分近似逐项核对解析梯度;通过检查只表示当前实现与数值近似相符,不代表模型已经训练好。

环境与运行方法

本文代码在 Windows、Python 3.11 的本地独立环境执行通过。以下数据全部为人为构造的教学样本,不是客户数据,也不是业务效果测试。

AI 算法数学怎么练?用 NumPy 核对逻辑回归损失与梯度

新建一个空目录,在终端执行安装命令,把后面的完整代码保存为 demo.py,再执行 python demo.py。文件输出均保存在运行目录,请先在空目录练习。

python -m pip install numpy==2.4.6

把损失写成稳定的形式

令 z=Xw,概率 p=sigmoid(z),不带正则的平均二分类损失可写为 mean(logaddexp(0,z)-y*z)。logaddexp 避免先算 exp(z) 再取 log 时容易出现的溢出;本例 z 很小,主要用来展示这个写法。

梯度为 X.T@(p-y)/n。下面给 X 添加恒为1的第一列,把截距作为 w 的第一项;否则你比较的参数维度会少一项。标签必须是0或1,本文只校验这组数据,没有处理样本权重或多类别损失。

用有限差分检查每个参数

对第 j 个参数分别增加和减少 epsilon,再用两次损失差除以2*epsilon,得到中心差分近似。它不用于大模型高效训练,而是调试小型数学实现的方法。

epsilon 太大有截断误差,太小则受浮点误差影响。本文使用1e-6,并比较最大绝对差;若检查失败,先核对是否对平均损失除以样本数、是否包含同样的正则项以及截距的处理,而不是盲目放宽误差阈值。

可复制的完整代码

import numpy as np
X = np.array([[1., -1.], [1., 0.], [1., 1.], [1., 2.]])
y = np.array([0., 0., 1., 1.])
w = np.array([0.2, -0.3])
def loss(weights):
    z = X @ weights
    return np.mean(np.logaddexp(0., z) - y * z)
z = X @ w
p = 1 / (1 + np.exp(-z))
analytic = X.T @ (p - y) / len(y)
numeric = np.zeros_like(w)
eps = 1e-6
for j in range(len(w)):
    step = np.zeros_like(w); step[j] = eps
    numeric[j] = (loss(w + step) - loss(w - step)) / (2 * eps)
error = float(np.max(np.abs(analytic - numeric)))
print("loss", round(float(loss(w)), 6))
print("analytic_gradient", analytic.round(6).tolist())
print("finite_difference_gradient", numeric.round(6).tolist())
print("maximum_absolute_error", f"{error:.2e}")
assert error < 1e-6

运行结果与核对方法

下面是本文教学代码在上述本地环境中的实际输出。浮点数末位可能随依赖版本变化。

loss 0.857407
analytic_gradient [0.012157, -0.586203]
finite_difference_gradient [0.012157, -0.586203]
maximum_absolute_error 4.72e-11

比较 analytic_gradient 与 finite_difference_gradient 的两项值,maximum_absolute_error 应小于1e-6。把 loss 函数里的 np.mean 改为 np.sum 而梯度仍除以样本数,再重复检查,应能发现实现口径不一致;改回一致口径后才继续训练代码。

使用边界与常见问题

本例仅验证无正则、四条教学样本和两个参数的二分类损失,没有训练或评测业务模型。直接写 exp(-z) 也不适合任意极端 z;正式实现应使用稳定 sigmoid 或成熟库并扩大数值检查范围。

有限差分通过,为什么训练结果还不好?

梯度实现正确不等于数据、模型和优化设置合适。还要检查标签、特征、学习率、初始化和独立验证结果;这个检查只排除当前小例子的一类数学实现错误。

官方资料

接口与参数依据以下官方资料核对(2026年10月1日)。示例验证只覆盖本文输入和步骤。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30761.html

赞 (0)
AI小管家的头像AI小管家
Real-ESRGAN 怎么放大图片?安装、分块推理与细节对照
上一篇 11小时前
用 ChatGPT 理解数据相关性:本地核对相关系数与混杂因素
下一篇 11小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部