简介
在统计学和机器学习中,负对数似然(NLL) 是一个用于参数估计和优化问题中常用的概念。它是概率理论和优化的桥梁,帮助我们通过找到使观测数据最有可能的参数来拟合模型。
1. 似然函数
似然函数(Likelihood Function) 用来衡量在不同的模型参数下,观测到给定数据的可能性有多大。假设我们有:
- 一个数据集 D = { x 1 , x 2 , … , x n } \mathcal{D} = \{x_1, x_2, \dots, x_n\} D={x1,x2,…,xn}。
- 一个由概率密度(或质量)函数 P ( x ∣ θ ) P(x|\theta) P(x∣θ) 定义的统计模型,其中 θ \theta θ 代表模型的参数。
似然函数 L ( θ ) L(\theta) L(θ) 定义为给定参数下观测到数据的联合概率(或密度):
L ( θ ) = P ( D ∣ θ ) = ∏ i = 1 n P ( x i ∣ θ ) L(\theta) = P(\mathcal{D}|\theta) = \prod_{i=1}^{n} P(x_i|\theta) L(θ)=P(D∣θ)=i=1∏nP(xi∣θ)
注意:我们假设数据点是独立同分布(i.i.d.),因此联合概率可以表示为各个数据点概率的乘积。
2. 对数似然函数
直接处理似然函数在数值上可能会不稳定,特别是当数据量很大时,因为会涉及到很多概率的乘积(这些概率可能是非常小的数)。为了简化计算,我们取似然函数的自然对数,得到对数似然函数(log-likelihood function):
ℓ ( θ ) = log L ( θ ) = ∑ i = 1 n log P ( x i ∣ θ ) \ell(\theta) = \log L(\theta) = \sum_{i=1}^{n} \log P(x_i|\theta) ℓ(θ)=logL(θ)=i=1∑nlogP(xi∣θ)
对数将乘积转换为和,这在计算上和分析上都更容易处理。
3. 负对数似然(NLL)
在参数估计中,我们的目标是找到能够最大化似然函数的参数值。这种方法被称为最大似然估计(MLE)。然而,在机器学习中的优化算法通常涉及的是最小化而非最大化。为了与这些算法保持一致,我们定义了负对数似然(NLL):
NLL ( θ ) = − ℓ ( θ ) = − ∑ i = 1 n log P ( x i ∣ θ ) \text{NLL}(\theta) = -\ell(\theta) = -\sum_{i=1}^{n} \log P(x_i|\theta) NLL(θ)=−ℓ(θ)=−i=1∑nlogP(xi∣θ)
最小化NLL等价于最大化对数似然,从而间接地最大化了似然函数。
4. NLL的推导
为了理解NLL是如何推导出来的,我们可以通过一个通用的例子来说明。
步骤1:定义似然函数
对于独立同分布的观测数据 x i x_i xi:
L ( θ ) = ∏ i = 1 n P ( x i ∣ θ ) L(\theta) = \prod_{i=1}^{n} P(x_i|\theta) L(θ)=i=1∏nP(xi∣θ)
步骤2:取对数,得到对数似然
ℓ ( θ ) = log L ( θ ) = ∑ i = 1 n log P ( x i ∣ θ ) \ell(\theta) = \log L(\theta) = \sum_{i=1}^{n} \log P(x_i|\theta) ℓ(θ)=logL(θ)=i=1∑nlogP(xi∣θ)
步骤3:定义负对数似然
NLL ( θ ) = − ℓ ( θ ) = − ∑ i = 1 n log P ( x i ∣ θ ) \text{NLL}(\theta) = -\ell(\theta) = -\sum_{i=1}^{n} \log P(x_i|\theta) NLL(θ)=−ℓ(θ)=−i=1∑nlogP(xi∣θ)
步骤4:构建优化问题
为了找到最佳的参数 θ ∗ \theta^* θ∗,我们最小化NLL:
θ ∗ = arg min θ NLL ( θ ) \theta^* = \arg\min_{\theta} \text{NLL}(\theta) θ∗=argθminNLL(θ)
5. NLL的例子
例子1:高斯分布
假设每个数据点 x i x_i xi 来自一个均值为 μ \mu μ,方差为 σ 2 \sigma^2 σ2 的高斯分布:
P ( x i ∣ μ , σ 2 ) = 1 2 π σ 2 exp ( − ( x i − μ ) 2 2 σ 2 ) P(x_i|\mu, \sigma^2) = \frac{1}{\sqrt{2\pi \sigma^2}} \exp\left( -\frac{(x_i - \mu)^2}{2\sigma^2} \right) P(xi∣μ,σ2)=2πσ21exp(−2σ2(xi−μ)2)
计算NLL:
-
对数似然:
ℓ ( μ , σ 2 ) = ∑ i = 1 n ( − 1 2 log ( 2 π σ 2 ) − ( x i − μ ) 2 2 σ 2 ) \ell(\mu, \sigma^2) = \sum_{i=1}^{n} \left( -\frac{1}{2} \log(2\pi \sigma^2) - \frac{(x_i - \mu)^2}{2\sigma^2} \right) ℓ(μ,σ2)=i=1∑n(−21log(2πσ2)−2σ2(xi−μ)2)
-
负对数似然:
NLL ( μ , σ 2 ) = − ℓ ( μ , σ 2 ) = n 2 log ( 2 π σ 2 ) + 1 2 σ 2 ∑ i = 1 n ( x i − μ ) 2 \text{NLL}(\mu, \sigma^2) = -\ell(\mu, \sigma^2) = \frac{n}{2} \log(2\pi \sigma^2) + \frac{1}{2\sigma^2} \sum_{i=1}^{n} (x_i - \mu)^2 NLL(μ,σ2)=−ℓ(μ,σ2)=2nlog(2πσ2)+2σ21i=1∑n(xi−μ)2
最小化:
- 为了找到最优的 μ \mu μ 和 σ 2 \sigma^2 σ2,我们对NLL分别对 μ \mu μ 和 σ 2 \sigma^2 σ2 求偏导数,令其为0,求解。
例子2:伯努利分布
对于二元数据 x i ∈ { 0 , 1 } x_i \in \{0,1\} xi∈{0,1},其成功概率为 p p p:
P ( x i ∣ p ) = p x i ( 1 − p ) 1 − x i P(x_i|p) = p^{x_i} (1 - p)^{1 - x_i} P(xi∣p)=pxi(1−p)1−xi
计算NLL:
NLL ( p ) = − ∑ i = 1 n ( x i log p + ( 1 − x i ) log ( 1 − p ) ) \text{NLL}(p) = -\sum_{i=1}^{n} \left( x_i \log p + (1 - x_i) \log(1 - p) \right) NLL(p)=−i=1∑n(xilogp+(1−xi)log(1−p))
最小化:
- 类似于高斯分布的情况,我们对NLL对 p p p 求导,令其为0,求解 p p p。
6. NLL在机器学习中的应用
作为损失函数
在机器学习模型中,特别是在分类任务中,NLL常常作为训练过程中要最小化的损失函数。
- 二分类(逻辑回归): 使用从伯努利分布推导的NLL。
- 多分类(Softmax回归): 使用从多项式分布推导的NLL,通常称为交叉熵损失。
优化算法
诸如梯度下降及其变体(如随机梯度下降、Adam等)使用NLL对模型参数的梯度来逐步更新参数。
7. 使用NLL的优势
- 凸性: 对于许多模型,NLL是一个凸函数,保证任何局部最小值都是全局最小值。
- 数值稳定性: 取对数可以避免非常小的概率导致的下溢问题。
- 加法性: 数据点的加和结构允许简单的mini-batch训练和并行计算。
8. 与交叉熵损失的关系
在分类任务中常用的交叉熵损失是NLL的特例。
对于真实标签 y i y_i yi 和预测概率 y ^ i = P ( y i ∣ θ ) \hat{y}_i = P(y_i|\theta) y^i=P(yi∣θ):
交叉熵损失 = − ∑ i = 1 n y i log y ^ i \text{交叉熵损失} = -\sum_{i=1}^{n} y_i \log \hat{y}_i 交叉熵损失=−i=1∑nyilogy^i
当 y i y_i yi 是one-hot编码的向量, y ^ i \hat{y}_i y^i 是模型的预测概率时,这等同于NLL。
9. 使用NLL的实际步骤
- 定义模型: 选择合适的概率分布(如高斯分布、伯努利分布、多项式分布)。
- 计算似然函数: 根据模型写出 P ( x i ∣ θ ) P(x_i|\theta) P(xi∣θ)。
- 推导NLL: 对似然函数取负对数。
- 计算梯度: 求解 ∇ θ NLL ( θ ) \nabla_{\theta} \text{NLL}(\theta) ∇θNLL(θ) 以用于优化算法。
- 优化参数: 使用优化算法最小化NLL,得到最优参数。
10. 例子:训练一个逻辑回归模型
模型:
P ( y i = 1 ∣ x i , θ ) = σ ( θ T x i ) = 1 1 + e − θ T x i P(y_i = 1|x_i, \theta) = \sigma(\theta^T x_i) = \frac{1}{1 + e^{-\theta^T x_i}} P(yi=1∣xi,θ)=σ(θTxi)=1+e−θTxi1
NLL:
NLL ( θ ) = − ∑ i = 1 n [ y i log σ ( θ T x i ) + ( 1 − y i ) log ( 1 − σ ( θ T x i ) ) ] \text{NLL}(\theta) = -\sum_{i=1}^{n} \left[ y_i \log \sigma(\theta^T x_i) + (1 - y_i) \log (1 - \sigma(\theta^T x_i)) \right] NLL(θ)=−i=1∑n[yilogσ(θTxi)+(1−yi)log(1−σ(θTxi))]
梯度:
∇ θ NLL ( θ ) = − ∑ i = 1 n ( y i − σ ( θ T x i ) ) x i \nabla_{\theta} \text{NLL}(\theta) = -\sum_{i=1}^{n} (y_i - \sigma(\theta^T x_i)) x_i ∇θNLL(θ)=−i=1∑n(yi−σ(θTxi))xi
优化:
-
使用梯度下降更新 θ \theta θ:
θ ← θ − η ∇ θ NLL ( θ ) \theta \leftarrow \theta - \eta \nabla_{\theta} \text{NLL}(\theta) θ←θ−η∇θNLL(θ)
其中 η \eta η 为学习率。
结论
负对数似然(NLL)是统计建模和机器学习中的一个基本工具。通过将最大化似然问题转换为最小化NLL,我们可以利用强大的优化算法来有效地估计模型参数。理解如何推导和使用NLL是从事数据分析、统计学或机器学习工作的人必备的技能,因为它在许多模型和方法中起着关键作用。