最大似然估计(MLE)与最大后验估计(MAP)原理及对比
最大似然估计(MLE)的基本思想
最大似然估计的核心目标是寻找一组参数,使得在该参数下观测到当前样本数据的概率最大化。假设样本之间相互独立且服从相同分布(i.i.d.),则似然函数可表示为:
L(θ) = ∏i=1n P(xi∣θ)
为了便于计算,通常对似然函数取对数,转化为对数似然形式:
log L(θ) = ∑i=1n log P(xi∣θ)
通过优化方法(如梯度下降)求解使对数似然最大的参数 θ。
适用场景
- 当训练数据量较大时,MLE估计值趋于真实参数值。
- 适用于模型结构简单、不依赖先验知识的场景,例如频率学派框架下的参数推断。
- 广泛应用于线性回归和逻辑回归等经典模型中的参数学习过程。
交叉熵损失函数的由来
在逻辑回归中,输出服从伯努利分布,即每次预测只有两种结果:成功(1)或失败(0)。此时,极大似然估计的目标函数可写为:
max log L(θ) = ∑i=1n log P(xi∣θ) = ∑i=1n log [p(xi)yi (1p(xi))(1yi)] = ∑i=1n [yi log(pi) + (1yi) log(1pi)]
将其转换为最小化问题,得到负对数似然函数,也即交叉熵损失:
min L(w) = ∑i=1n [yi log(pi) + (1yi) log(1pi)]
其中 pi = σ(z),z = wx + b,σ(z) 是 sigmoid 函数,定义如下:
σ(z) = 1 / (1 + ez)
xi 表示第 i 个样本的特征向量,yi 为其对应标签(0 或 1),w 为待优化的权重参数(含偏置项)。
损失函数对参数的导数推导
首先计算 sigmoid 函数的导数:
σ(z)/z = σ(z)(1 σ(z))
进一步求其对 w 和 b 的偏导:
σ(z)/w = (σ(z)/z) x,σ(z)/b = σ(z)/z
于是损失函数关于 w 的梯度为:
L(w)/w = ∑i=1n xi [ yi (σ′(z)/σ(z)) + (1yi) (σ′(z)/(1σ(z))) ] = ∑i=1n xi [ yi(1σ(z)) (1yi)σ(z) ] = ∑i=1n xi [ yi σ(z) ]
最大后验估计(MAP)原理
与 MLE 不同,MAP 引入了参数的先验分布,将参数视为具有某种概率分布的随机变量。其目标是最大化后验概率 P(θ∣D),根据贝叶斯公式:
P(θ∣D) ∝ P(D∣θ) P(θ)
取对数后得:
log P(θ∣D) = log P(D∣θ) + log P(θ) + const = log L(θ) + log P(θ) + const
因此,MAP 相当于在对数似然的基础上增加了一个先验项 log P(θ),起到了正则化的作用。例如,若假设参数服从高斯先验,则对应 L2 正则;若为拉普拉斯先验,则对应 L1 正则。
MLE 与 MAP 的比较及选择建议
- 数据充足时:MLE 表现良好,估计结果稳定,收敛性好。
- 数据稀疏或易过拟合时:推荐使用 MAP,因其引入先验信息,有助于控制模型复杂度。
- 是否需要领域知识引导:若已有对参数分布的经验判断,MAP 更具优势;否则可优先采用 MLE。
- 哲学立场差异:MLE 属于频率学派方法,强调数据本身的统计特性;MAP 则属于贝叶斯学派,强调参数的不确定性建模。
[此处为图片1]
对逻辑回归中的损失函数 \( L(w) \) 关于参数 \( w \) 求偏导,过程如下:
\[ \frac{\partial L(w)}{\partial w} = -\sum_{i=1}^{n} x_i \left[ y_i \frac{\sigma'(z)}{\sigma(z)} + (1 - y_i) \frac{-\sigma'(z)}{1 - \sigma(z)} \right] \] \[ = -\sum_{i=1}^{n} x_i \left[ y_i (1 - \sigma(z)) - (1 - y_i) \sigma(z) \right] \] \[ = -\sum_{i=1}^{n} x_i \left[ y_i - \sigma(z) \right] \]当模型包含多个参数时,\( w \) 以向量形式表示,此时梯度可表示为:
\[ \frac{\partial L}{\partial w} = X^T (\sigma(Xw) - y) \] [此处为图片1]逻辑回归中的梯度下降实现
import numpy as np
np.random.seed(0)
# Sigmoid 函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 交叉熵损失函数
def cross_entropy_loss(y_true, y_pred):
return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))
# 梯度计算
def compute_gradients(X, y_true, y_pred):
m = len(y_true)
dw = np.dot(X.T, (y_pred - y_true))
return dw / m
# 梯度下降算法
def gradient_descent(X, y, learning_rate=0.001, epochs=50000):
m, n = X.shape
weights = np.ones((n, 1)) # 初始化权重
losses = [] # 存储每轮的损失值
for epoch in range(epochs):
logits = np.dot(X, weights)
y_pred = sigmoid(logits)
accurate_rate = (((y_pred > 0.5).astype(int) == y).sum()) / m
loss = cross_entropy_loss(y, y_pred)
losses.append(loss)
gradients = compute_gradients(X, y, y_pred)
weights -= learning_rate * gradients
if epoch % 5000 == 0:
print(f'Epoch {epoch}, Loss: {loss:.4f}, accurate: {accurate_rate*100:.2f}%')
return weights, losses
# 数据生成部分
X = np.random.randn(100, 2)
X_with_bias = np.column_stack([X, np.ones(X.shape[0])])
true_weights = np.array([[2], [-1], [0.5]])
logits = np.dot(X_with_bias, true_weights)
probabilities = sigmoid(logits)
y = (probabilities > 0.5).astype(int)
learned_weights, losses = gradient_descent(X_with_bias, y)
print("True weights:", true_weights)
print("Learned weights:", learned_weights)
[此处为图片2]
线性回归相关函数实现
定义损失函数与梯度计算函数如下:
def cost_func(X, y, w, bias):
y_pred = np.dot(X, w) + bias
return np.mean((y_pred - y) ** 2)
def gradient_func(X, y, w, bias):
n = X.shape[0]
y_pred = np.dot(X, w) + bias
dw = 2 / n * np.dot(X.T, (y_pred - y))
db = 2 / n * np.sum(y_pred - y)
return dw, db
[此处为图片3]def gradient_descent(X, y, lr=1e-3, max_iter=10000, tolerance=1e-6):
w = np.zeros((X.shape[1], 1))
b = np.zeros((1, 1))
for _ in range(max_iter):
loss = cost_func(X, y, w, b)
if loss < tolerance:
return w, b
dw, db = gradient_func(X, y, w, b)
w -= lr * dw
b -= lr * db
return w, b
np.random.seed(0)
X = np.random.randn(100, 2)
true_w = np.array([[3.0], [-2.0]])
true_b = 5.0
y = np.dot(X, true_w) + true_b + 0.1 * np.random.rand(100, 1)
w_learned, b_learned = gradient_descent(X, y)
print(f'预测值w:\n{w_learned}')
print(f'预测值b:{b_learned}')
MAP(最大后验估计)的基本原理
最大后验估计(MAP)是在极大似然估计(MLE)的基础上,引入了参数的先验分布 P(θ)。其核心目标是最大化参数在给定数据下的后验概率:
P(θ | X) ∝ P(X | θ) P(θ)
取对数后,转化为优化问题:
log P(θ | X) = log P(X | θ) + log P(θ) + constant
因此,优化过程不仅依赖于数据的似然性,还需考虑参数的先验信息。例如,L2正则化可视为对权重施加高斯先验的一种体现。
适用场景分析
- 在训练数据较少或稀疏的情况下,MAP能够借助先验知识有效防止模型过拟合。
- 适用于需要融合经验数据与领域先验知识的任务,如贝叶斯网络构建、文本分类中的概率平滑处理等。
- 典型应用包括贝叶斯线性回归、主题模型(如LDA)中超参数的学习与调整。
MLE 与 MAP 的对比及选择建议
极大似然估计(MLE)旨在寻找使观测数据出现概率最大的参数值,即最大化似然函数 f(x|θ) 中的 θ。
而最大后验估计(MAP)假设参数本身服从某个先验分布 g(θ)。由于后验分布的分母为归一化常数且不依赖于 θ,因此只需最大化联合概率 f(x|θ)g(θ),所得结果即为后验分布的众数。
特别地,当参数的先验分布为均匀分布时,g(θ) 为常数,此时 MAP 的解与 MLE 完全一致。
主要区别
- 数据量影响: 在大数据条件下,MLE 与 MAP 的估计结果趋于一致;而在小样本情况下,MAP 凭借先验信息表现出更强的鲁棒性。
- 先验可用性: 若存在可靠的领域知识或物理约束作为先验,应优先采用 MAP 方法。
- 计算复杂度: MLE 通常计算更高效;而 MAP 需额外设计和处理先验分布,实现成本较高。


雷达卡




京公网安备 11010802022788号







