当前位置: 首页 > news >正文

交叉熵与最大似然的数学等价性,概率论在机器学习中的应用(附实战代码)

逻辑回归的交叉熵损失函数与最大似然估计的严格等价性,源于两者在数学上是对同一优化目标的不同表述:最大似然估计是从概率建模角度出发,寻找最可能产生观测数据的参数;而交叉熵损失函数则是从信息论角度出发,衡量模型预测分布与真实分布之间的差异。

对于二分类逻辑回归模型,最小化交叉熵损失函数等价于最大化观测数据的似然函数。以下是严格的推导和论证过程。


一、 模型设定与符号定义

首先,我们形式化地定义二分类逻辑回归模型:

  • 样本与标签:设有 $m$ 个独立同分布的样本,第 $i$ 个样本的特征向量为 $x^{(i)} \in \mathbb{R}^{n}$,对应的二分类标签为 $y^{(i)} \in {0, 1}$。
  • 模型参数:模型参数为权重向量 $w \in \mathbb{R}^{n}$ 和标量偏置 $b$。为简化表示,常将 $b$ 并入 $w$,即令 $\theta = [w; b]$,并将特征向量扩充为 $x^{(i)} \leftarrow [x^{(i)}; 1]$。为清晰起见,下文仍区分 $w$ 和 $b$。
  • 条件概率模型:逻辑回归假设给定特征 $x$ 下,标签 $y=1$ 的概率由 Sigmoid 函数(即逻辑函数)给出:
    [
    P(y=1 \mid x; w, b) = \hat{y} = \sigma(w^T x + b) = \frac{1}{1 + e^{-(w^T x + b)}}
    ]
    相应地,$y=0$ 的概率为:
    [
    P(y=0 \mid x; w, b) = 1 - \hat{y}
    ]
  • 预测输出:模型的预测值 $\hat{y}^{(i)}$ 即为 $P(y^{(i)}=1 \mid x^{(i)}; w, b)$。

二、 最大似然估计 (Maximum Likelihood Estimation, MLE) 推导

最大似然估计的核心思想是:寻找一组参数 $(w, b)$,使得在当前参数下,观测到整个数据集 $D = {(x^{(i)}, y^{(i)})}_{i=1}^{m}$ 的概率(即似然)最大

  1. 构建似然函数
    由于样本独立,数据集的联合似然函数是所有样本条件概率的乘积:
    [
    L(w, b) = \prod_{i=1}^{m} P(y^{(i)} \mid x^{(i)}; w, b)
    ]
    利用伯努利分布,可以将单个样本的概率写成一个紧凑形式(这是关键一步):
    [
    P(y^{(i)} \mid x^{(i)}; w, b) = (\hat{y}^{(i)})^{y^{(i)}} (1 - \hat{y}^{(i)})^{(1 - y^{(i)})}
    ]
    验证:当 $y^{(i)}=1$ 时,上式等于 $\hat{y}^{(i)}$;当 $y^{(i)}=0$ 时,上式等于 $1 - \hat{y}^{(i)}$。因此,似然函数为:
    [
    L(w, b) = \prod_{i=1}^{m} (\hat{y}^{(i)})^{y^{(i)}} (1 - \hat{y}^{(i)})^{(1 - y^{(i)})}
    ]

  2. 转为对数似然函数
    连乘运算在数学上不便处理,且容易导致数值下溢。通常取自然对数,将连乘转化为连加,得到对数似然函数 $\ell(w, b)$,且最大化 $L(w, b)$ 等价于最大化 $\ell(w, b)$。
    [
    \begin{aligned}
    \ell(w, b) &= \log L(w, b) \
    &= \sum_{i=1}^{m} \log \left[ (\hat{y}^{(i)})^{y^{(i)}} (1 - \hat{y}^{(i)})^{(1 - y^{(i)})} \right] \
    &= \sum_{i=1}^{m} \left[ y^{(i)} \log(\hat{y}^{(i)}) + (1 - y^{(i)}) \log(1 - \hat{y}^{(i)}) \right]
    \end{aligned}
    ]
    我们的 MLE 目标就是:
    [
    \hat{w}{MLE}, \hat{b}{MLE} = \arg\max_{w, b} \ell(w, b) = \arg\max_{w, b} \sum_{i=1}^{m} \left[ y^{(i)} \log(\hat{y}^{(i)}) + (1 - y^{(i)}) \log(1 - \hat{y}^{(i)}) \right]
    ]


三、 交叉熵损失函数 (Cross-Entropy Loss) 定义

交叉熵是信息论中衡量两个概率分布 $p$ 和 $q$ 之间差异的度量。对于真实的标签分布 $p$(这里是 one-hot 形式的真实分布)和模型预测分布 $q$,其交叉熵定义为 $H(p, q) = -\mathbb{E}_p[\log q]$。

在二分类问题中:

  • 真实分布 $p$:对于样本 $i$,若 $y^{(i)}=1$,则 $p=[1, 0]$;若 $y^{(i)}=0$,则 $p=[0, 1]$。
  • 预测分布 $q$:模型输出 $[\hat{y}^{(i)}, 1-\hat{y}^{(i)}]$。

因此,单个样本的交叉熵为:
[
H(p^{(i)}, q^{(i)}) = - \left[ 1 \cdot \log(\hat{y}^{(i)}) + 0 \cdot \log(1-\hat{y}^{(i)}) \right] = -\log(\hat{y}^{(i)}), \quad \text{if } y^{(i)}=1
]
[
H(p^{(i)}, q^{(i)}) = - \left[ 0 \cdot \log(\hat{y}^{(i)}) + 1 \cdot \log(1-\hat{y}^{(i)}) \right] = -\log(1-\hat{y}^{(i)}), \quad \text{if } y^{(i)}=0
]
可以将这两种情况合并为与 MLE 中完全相同的紧凑形式:
[
H(p^{(i)}, q^{(i)}) = - \left[ y^{(i)} \log(\hat{y}^{(i)}) + (1 - y^{(i)}) \log(1 - \hat{y}^{(i)}) \right]
]

那么,在整个数据集上的平均交叉熵损失函数定义为:
[
J(w, b) = \frac{1}{m} \sum_{i=1}^{m} H(p^{(i)}, q^{(i)}) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(\hat{y}^{(i)}) + (1 - y^{(i)}) \log(1 - \hat{y}^{(i)}) \right]
]
我们的优化目标是最小化这个损失:
[
\hat{w}{CE}, \hat{b}{CE} = \arg\min_{w, b} J(w, b) = \arg\min_{w, b} -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(\hat{y}^{(i)}) + (1 - y^{(i)}) \log(1 - \hat{y}^{(i)}) \right]
]


四、 等价性证明

现在对比 MLE 的目标函数 $\ell(w, b)$ 和交叉熵损失函数 $J(w, b)$:

[
\ell(w, b) = \sum_{i=1}^{m} \left[ y^{(i)} \log(\hat{y}^{(i)}) + (1 - y^{(i)}) \log(1 - \hat{y}^{(i)}) \right]
]
[
J(w, b) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(\hat{y}^{(i)}) + (1 - y^{(i)}) \log(1 - \hat{y}^{(i)}) \right] = -\frac{1}{m} \cdot \ell(w, b)
]

因此,两者关系为:
[
J(w, b) = -\frac{1}{m} \ell(w, b)
]
即,平均交叉熵损失函数 $J(w, b)$ 是对数似然函数 $\ell(w, b)$ 取负并除以样本数 $m$ 的线性变换

  • 线性变换不影响极值点:对于函数 $f(x)$,$\arg\max f(x)$ 与 $\arg\max [k_1 \cdot f(x) + k_2]$ (其中 $k_1 > 0$)的解相同;$\arg\min f(x)$ 与 $\arg\min [k_1 \cdot f(x) + k_2]$ (其中 $k_1 > 0$)的解也相同。这里 $k_1 = -1/m < 0$,它连接了 $\max$ 和 $\min$ 问题。
  • 严格等价
    [
    \begin{aligned}
    \hat{w}{MLE}, \hat{b}{MLE} &= \arg\max_{w, b} \ell(w, b) \
    &= \arg\max_{w, b} \left[ -m \cdot J(w, b) \right] \quad \text{(因为 } \ell = -mJ \text{)} \
    &= \arg\min_{w, b} J(w, b) \quad \text{(乘以负常数,最大值问题变为最小值问题)} \
    &= \hat{w}{CE}, \hat{b}{CE}
    \end{aligned}
    ]

结论:对于二分类逻辑回归模型,最大化对数似然函数 $\ell(w, b)$ 与最小化平均交叉熵损失函数 $J(w, b)$ 在数学上是完全等价的优化问题,它们会得到完全相同的参数最优解 $(w^, b^)$。常数因子 $1/m$ 不影响优化结果,它只是将总损失缩放为平均损失,使得损失值在不同规模的数据集间具有可比性。


五、 梯度的一致性

这种等价性不仅体现在优化目标上,也体现在优化过程中。两种视角下计算出的参数梯度是相同的(差一个常数因子),这保证了使用梯度下降法会得到相同的更新路径。

根据 MLE 视角,我们求对数似然函数 $\ell(w, b)$ 关于参数 $w_j$ 的偏导数。令 $z^{(i)} = w^T x^{(i)} + b$,$\hat{y}^{(i)} = \sigma(z^{(i)})$,且已知 $\frac{d\sigma(z)}{dz} = \sigma(z)(1-\sigma(z))$。

[
\begin{aligned}
\frac{\partial \ell}{\partial w_j} &= \sum_{i=1}^{m} \frac{\partial}{\partial w_j} \left[ y^{(i)} \log(\hat{y}^{(i)}) + (1 - y^{(i)}) \log(1 - \hat{y}^{(i)}) \right] \
&= \sum_{i=1}^{m} \left[ \frac{y^{(i)}}{\hat{y}^{(i)}} - \frac{1-y^{(i)}}{1-\hat{y}^{(i)}} \right] \frac{\partial \hat{y}^{(i)}}{\partial w_j} \quad \text{(链式法则)} \
&= \sum_{i=1}^{m} \left[ \frac{y^{(i)} - \hat{y}^{(i)}}{\hat{y}^{(i)}(1-\hat{y}^{(i)})} \right] \cdot \hat{y}^{(i)}(1-\hat{y}^{(i)}) \cdot x_j^{(i)} \quad \text{(因为 } \frac{\partial \hat{y}^{(i)}}{\partial w_j} = \hat{y}^{(i)}(1-\hat{y}^{(i)}) x_j^{(i)} \text{)} \
&= \sum_{i=1}^{m} (y^{(i)} - \hat{y}^{(i)}) x_j^{(i)}
\end{aligned}
]
因此,对数似然函数关于权重向量 $w$ 的梯度为:
[

abla_w \ell(w, b) = \sum_{i=1}^{m} (y^{(i)} - \hat{y}^{(i)}) x^{(i)}
]
关于偏置 $b$ 的梯度为:
[
\frac{\partial \ell}{\partial b} = \sum_{i=1}^{m} (y^{(i)} - \hat{y}^{(i)})
]

根据交叉熵损失视角,损失函数 $J(w, b) = -\frac{1}{m}\ell(w, b)$,因此其梯度为:
[

abla_w J(w, b) = -\frac{1}{m}
abla_w \ell(w, b) = -\frac{1}{m} \sum_{i=1}^{m} (y^{(i)} - \hat{y}^{(i)}) x^{(i)}
]
[
\frac{\partial J}{\partial b} = -\frac{1}{m} \frac{\partial \ell}{\partial b} = -\frac{1}{m} \sum_{i=1}^{m} (y^{(i)} - \hat{y}^{(i)})
]

在梯度下降更新中:

  • MLE(梯度上升):$w := w + \alpha
    abla_w \ell$
  • 最小化交叉熵损失(梯度下降):$w := w - \alpha‘
    abla_w J = w - \alpha’ (-\frac{1}{m}
    abla_w \ell) = w + \frac{\alpha’}{m}
    abla_w \ell$

只要设置学习率 $\alpha = \frac{\alpha‘}{m}$,两种更新规则完全一致。这从优化动力学角度再次证实了二者的等价性。


六、 代码验证

以下 Python 代码从数值计算上验证两者给出相同的梯度和优化结果。

import numpy as np def sigmoid(z): return 1 / (1 + np.exp(-z)) def log_likelihood_grad(X, y, w, b): """计算对数似然函数的梯度 (MLE视角)""" m = len(y) z = X.dot(w) + b y_hat = sigmoid(z) error = y - y_hat # y^{(i)} - \hat{y}^{(i)} dw = X.T.dot(error) # 公式: sum_i (y_i - y_hat_i) * x_i db = np.sum(error) # 公式: sum_i (y_i - y_hat_i) return dw, db def cross_entropy_grad(X, y, w, b): """计算交叉熵损失函数的梯度 (损失最小化视角)""" m = len(y) z = X.dot(w) + b y_hat = sigmoid(z) error = y_hat - y # 注意符号:这里是 y_hat_i - y_i,与上面差一个负号 dw = X.T.dot(error) / m # 公式: (1/m) * sum_i (y_hat_i - y_i) * x_i db = np.sum(error) / m # 公式: (1/m) * sum_i (y_hat_i - y_i) return dw, db # 生成模拟数据 np.random.seed(42) m = 100 n = 2 X = np.random.randn(m, n) true_w = np.array([1.5, -2.0]) true_b = 0.5 z_true = X.dot(true_w) + true_b prob = sigmoid(z_true) y = (np.random.rand(m) < prob).astype(np.float32) # 根据概率生成伯努利样本 # 初始化参数 w_init = np.random.randn(n) b_init = 0.0 # 计算两种视角下的梯度 dw_mle, db_mle = log_likelihood_grad(X, y, w_init, b_init) dw_ce, db_ce = cross_entropy_grad(X, y, w_init, b_init) print("MLE视角梯度 (dw, db):") print(f" dw: {dw_mle}") print(f" db: {db_mle}") print(" 交叉熵损失视角梯度 (dw, db):") print(f" dw: {dw_ce}") print(f" db: {db_ce}") print(" 验证等价关系: dw_ce 应等于 - (1/m) * dw_mle") print(f" - (1/{m}) * dw_mle = {-dw_mle / m}") print(f" dw_ce = {dw_ce}") print(f" 两者是否相等 (数值误差内)? {np.allclose(-dw_mle / m, dw_ce)}") print(f" 验证等价关系: db_ce 应等于 - (1/m) * db_mle") print(f" - (1/{m}) * db_mle = {-db_mle / m}") print(f" db_ce = {db_ce}") print(f" 两者是否相等 (数值误差内)? {np.allclose(-db_mle / m, db_ce)}")

注释:代码中log_likelihood_grad函数直接计算了对数似然函数的梯度 $
abla \ell$,而cross_entropy_grad函数计算了平均交叉熵损失的梯度 $
abla J$。运行结果将显示 $
abla J = -\frac{1}{m}
abla \ell$,从数值计算上验证了梯度的等价性,从而保证了使用梯度下降法进行优化时,两种视角会引导参数收敛到相同的值。


参考来源

  • 深入理解交叉熵损失 CrossEntropyLoss - 最大似然估计_交叉熵 最大似然估计-CSDN博客
  • Logistic回归 - 损失函数推导(最大似然&交叉熵)_最大似然和损失函数-CSDN博客
  • 逻辑回归中交叉熵损失函数的梯度推导 - C-Alen - 博客园
http://www.cnnetsun.cn/news/2424006.html

相关文章:

  • DIY智能电机推子:从闭环控制到MIDI交互的硬件实战
  • Subconscious:构建团队集体记忆中枢,破解代码协作中的隐性知识管理难题
  • Adafruit心愿单与报价单:硬件项目物料管理与采购协作全攻略
  • API文档协作中心构建指南:从工程化实践到团队效能提升
  • 极限竞速:地平线6 顶级版 2026最新破解版加修改器免费下载 一键转存 永久更新 (看到速转存 资源随时走丢)
  • 泰拉瑞亚风灵月影修改器下载分享2026最新版(增强工具使用指南)
  • AI-Git-Narrator:用大语言模型自动生成Git项目演进报告
  • Go语言构建轻量级API网关:clawgate核心架构与实战指南
  • 基于ESP32-S3与ADXL345的拳击训练物联网追踪器开发实战
  • 开源信号处理框架OpenClaw:模块化设计与自定义算法集成实战
  • openpisci嵌入式框架:从硬件抽象到驱动开发实践
  • WinDirStat:Windows磁盘空间管理神器,让存储问题无处遁形
  • 基于Discord与OpenClaw构建语音控制自动化系统
  • 1999-2025年上市公司内部薪酬差距数据
  • 告别VS!用VSCode + MinGW搭建轻量级C++开发环境(附完整配置流程)
  • 备战蓝桥杯国赛【Day 14】
  • Next.js全栈开发实战:基于ace-next-ts模板构建现代化Web应用
  • OBS WebSocket 5.x 终极配置指南:快速实现远程控制与自动化直播
  • gRPC 负载均衡详解:从原理到最佳实践
  • Android性能优化:Streamline工具深度解析与应用
  • Midjourney Ash印相参数白皮书(含Adobe RGB/ProPhoto RGB双色域适配矩阵及ICC Profile嵌入规范)
  • 从Claw框架迁移到现代技术栈:自动化工具链设计与工程实践
  • 如何一键智能激活Windows和Office:KMS_VL_ALL_AIO终极指南
  • Draft:云原生开发加速器,实现Kubernetes应用“保存即部署”
  • 从ZZULIOJ 1127题出发,手把手教你用C语言实现矩阵乘法(附完整代码与调试技巧)
  • OpenClaw自动化框架实战:从Web交互到数据抓取的工作流构建
  • 量子奇异值变换(QSVT)无块编码方案的技术突破
  • ARM Cortex-A720AE/A725集群架构与缓存优化指南
  • 小红书自动化工具xhs-skill:接口逆向与数据采集实战指南
  • 基于Sho框架的AI应用开发:从流式响应到生产部署