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

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


一、 模型设定与符号定义

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

  • 样本与标签:设有 $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$,从数值计算上验证了梯度的等价性,从而保证了使用梯度下降法进行优化时,两种视角会引导参数收敛到相同的值。


参考来源

 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐