损失函数——负对数似然

阅读本文可以了解如下内容:

  1. 似然
  2. 似然估计
  3. 对数似然
  4. 负对数似然
1. 似然

在开始之前需要区分一个知识:似然(likelihood)和概率(probability)。概率是一个事件发生的可能性,而似然指的是影响概率的未知参数。也就是说,概率是在该未知参数已知的情况下所得到的结果;而似然是该参数未知,我们需要根据观察结果,来估计概率模型的参数。

用数学方法可以描述为:
假设 X X X是离散随机变量,其概率质量函数 p p p依赖于参数 θ \theta θ,则:
L ( θ ∣ x ) = p θ ( x ) = P θ ( X = x ) L(\theta|x)=p_{\theta}(x)=P_{\theta}(X=x) L(θx)=pθ(x)=Pθ(X=x)
其中 L ( θ ∣ x ) L(\theta|x) L(θx)为参数 θ \theta θ的似然函数, x x x为随机变量 X X X的某一值。1

如果我们发现:
L ( θ 1 ∣ x ) = P θ 1 ( X = x ) > P θ 2 ( X = x ) = L ( θ 2 ∣ x ) L(\theta_{1}|x)=P_{\theta_{1}}(X=x)>P_{\theta_{2}}(X=x)=L(\theta_{2}|x) L(θ1x)=Pθ1(X=x)>Pθ2(X=x)=L(θ2x)
那么似然函数就可以反映出这样一个朴素推测:在参数 θ 1 \theta_{1} θ1下随机变量 X X X取到 x x x的可能性大于在参数 θ 2 \theta_{2} θ2下随机向量 X X X取到 x x x的可能性。换句话说,我们更有理由相信,相对于 θ 2 \theta_2 θ2 θ 1 \theta_{1} θ1更有可能是该概率模型的真实参数。2

综上,概率(密度)表达给定 θ \theta θ下样本随机向量 X = x X=x X=x可能性,而似然表达了给定样本 X = x X=x X=x下参数 θ 1 \theta_{1} θ1(相对于另外的参数 θ 2 \theta_{2} θ2)为真实值的可能性。我们总是对随机变量的取值谈概率,而在非贝叶斯统计的角度下,参数是一个实数而非随机变量,所以我们一般不谈一个参数的概率

2. 最大似然估计(Maximum Likelihood Estimation, MLE)

假设我们有一个非常复杂的数据分布 P d a t a ( x ) P_{data}(x) Pdata(x),但是我们不知道该分布的数学表达形式,所以我们需要定义一个分布模型 P G ( x ; θ ) P_{G}(x;\theta) PG(x;θ),该分布由参数 θ \theta θ决定。
我们的目标是求得参数 θ \theta θ使得定义的分布 P G ( x ; θ ) P_{G}(x;\theta) PG(x;θ)尽可能的接近 P d a t a ( x ) P_{data}(x) Pdata(x)

下面我们来看看最大似然估计如何操作:

  1. P d a t a ( x ) P_{data}(x) Pdata(x)中采集m个样本 x 1 , x 2 , . . . , x m {x_{1},x_{2},...,x_{m}} x1,x2,...,xm
  2. 计算样本的似然函数 L = ∏ i = 1 m P G ( x i ; θ ) L=\prod_{i=1}^{m}P_{G}(x^{i};\theta) L=i=1mPG(xi;θ)
  3. 求使得似然函数 L L L最大的参数 θ \theta θ: θ ∗ = arg ⁡ max ⁡ θ ∏ i = 1 m P G ( x i ; θ ) \theta^{*}=\arg \max _{\theta}\prod_{i=1}^{m} P_{G}(x^{i};\theta) θ=argmaxθi=1mPG(xi;θ)

当来自 P d a t a ( x ) P_{data}(x) Pdata(x)的样本 x 1 , x 2 , . . . , x m {x_{1},x_{2},...,x_{m}} x1,x2,...,xm P G ( x ; θ ) P_{G}(x;\theta) PG(x;θ)分布模型出现的概率越高,也就是 ∏ i = 1 m P G ( x i ; θ ) \prod_{i=1}^{m}P_{G}(x^{i};\theta) i=1mPG(xi;θ)越大, P G ( x ; θ ) P_{G}(x;\theta) PG(x;θ) P d a t a ( x ) P_{data}(x) Pdata(x)越接近。3

3. 对数似然

在知道了最大似然估计之后就容易理解对数似然了。从公式可以看到,似然函数是很多个数相乘的形式: L = ∏ i = 1 m P G ( x i ; θ ) L=\prod_{i=1}^{m}P_{G}(x^{i};\theta) L=i=1mPG(xi;θ)
然而很多数相乘并不容易计算,也不方便求导。如果我们对它取对数,连乘就会变成连加,计算起来要方便的多,求导也变得更加容易。
l ( θ ) = ∑ i = 1 m log ⁡ ( P G ( x i ; θ ) ) l(\theta)=\sum_{i=1}^{m}\log (P_{G}(x^{i};\theta)) l(θ)=i=1mlog(PG(xi;θ))
这样一来就变成了我们非常熟悉的求极值过程, θ \theta θ为自变量,我们需要找到某一个 θ \theta θ,使得 l ( θ ) l(\theta) l(θ)最大。只需对 θ \theta θ求导然后令导数等于0即可。
最大似然估计的一般步骤如下:
(1) 写出似然函数;
(2) 对似然函数取对数,得到对数似然函数;
(3) 求对数似然函数的关于参数组的偏导数,并令其为0,得到似然方程组;
(4) 解似然方程组,得到参数组的值。

4. 负对数似然(Negative log-likelihood, NLL)1

由于对数似然是对概率分布求对数,概率 P ( x ) P(x) P(x)的值为 [ 0 , 1 ] [0,1] [0,1]区间,取对数后为 ( − ∞ , 0 ] (-\infty ,0] (,0]区间。再在前面加个符号,变成 [ 0 , ∞ ) [0,\infty) [0,)区间。
l ( θ ) = − ∑ i = 1 m log ⁡ ( P G ( x i ; θ ) ) l(\theta)=-\sum_{i=1}^{m}\log (P_{G}(x^{i};\theta)) l(θ)=i=1mlog(PG(xi;θ))
**写到这你有没有发现,这个公式不就是交叉熵吗?**只是少了一项 p ( x i ) p(x_{i}) p(xi),但是真实标签的概率为1,所以省掉了。
关于交叉熵的理解可以参考我的另一篇博客

我们期望似然估计越大越好,取完负号之后就是负对数似然越小越好,因此负对数似然函数可以作为损失函数。

Pytorch中对应的负对数似然损失函数为:

torch.nn.NLLLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')

值得注意的是,在使用该损失函数的时候并不需要将标签转换成one-hot形式,c类标签,就用c-1个数表示即可。
输入与输出数据的形状:

  • input: (N,C)
  • output:(N)
    其中N为batch size,C为分类数量。假设batch size为3,有5个类别。我们用一段代码看看torch.nn.NLLLoss()如何使用:
>>> import torch
>>> m = torch.nn.LogSoftmax(dim=1)
>>> loss = torch.nn.NLLLoss()
>>> input = torch.randn(3,5,requires_grad=True)
>>> input
tensor([[ 0.1076, -1.4376, -0.6307,  0.6451, -1.5122],
        [ 1.5105,  0.7662, -1.7587, -1.4581,  1.1357],
        [-1.4673, -0.5111, -0.0779, -0.7404,  1.4447]], requires_grad=True)
>>> target = torch.tensor([1, 0, 4])
>>> output = loss(m(input), target)
>>> output.backward()

计算结果为:

tensor(1.3537)

实际上这段代码计算的是交叉熵,因为在pytorch交叉熵的官方文档中写道4

This criterion (CrossEntropyLoss) combines LogSoftmax and NLLLoss in one single class.

它先将输入经过log softmax函数,得到一个输出:

>>> data = nn.LogSoftmax(dim=1)(input)
>>> data
tensor([[-1.2812, -2.8264, -2.0195, -0.7437, -2.9010],
        [-0.8118, -1.5561, -4.0810, -3.7804, -1.1866],
        [-3.3349, -2.3787, -1.9455, -2.6080, -0.4229]])

然后根据负对数似然估计的公式,得到如下等式:
L o s s = − ( − 2.8264 − 0.8118 − 0.4229 ) / 3 = 1.3537 Loss = - (-2.8264 - 0.8118 - 0.4229 )/3 = 1.3537 Loss=(2.82640.81180.4229)/3=1.3537
和函数计算结果相同。

值得注意的是,nn.NLLLoss()函数虽然叫负对数似然损失函数,但是该函数内部并没有像公式里那样进行了对数计算,而是在激活函数上使用了nn.LogSoftmax()函数,所以nn.NLLLoss()函数只是做了求和取平均然后再取反的计算,在使用时要配合logsoftmax函数一起使用,或者直接使用交叉熵损失函数。


  1. 负对数似然(negative log-likelihood) ↩︎ ↩︎

  2. 如何理解似然函数 ↩︎

  3. 如何通俗地理解概率论中的「极大似然估计法」? ↩︎

  4. torch.nn.CrossEntropyLoss ↩︎

### 最小二乘法 最小二乘法是一种用于解决回归问题的方法,旨在通过最小化观测数据与其对应的模型预测值之间差异的平方和来找到最佳拟合直线或曲线。具体来说,对于一组含有噪声的数据点 $(x_i, y_i)$ 和一个假设函数 $f(x|\theta)$ ,其中 $\theta$ 表示待估参数,则最小二乘准则可表述为寻找使得下式达到最小化的参数向量: $$ J(\theta) = \sum_{i}(y_i-f(x_i|\theta))^2 $$ 该方法广泛应用于线性回归分析中,并且由于计算简单、易于实现等特点,在许多领域得到了广泛应用[^3]。 ```python import numpy as np from sklearn.linear_model import LinearRegression X = [[0], [1], [2]] Y = [0.9, 1.8, 3] model = LinearRegression() model.fit(X,Y) print(f"Coefficients: {model.coef_}") ``` ### 对数似然函数 对数似然函数来源于概率论中的极大似然估计理论。给定一系列独立同分布样本 ${x^{(1)},...,x^{(m)}}$ 及其标签 ${y^{(1)},...,y^{(m)}}$, 假设它们服从某个已知形式的概率密度/质量函数$p(y|x;\theta)$ , 则可以通过最大化联合概率$\prod p(y^{(i)}|x^{(i)};\theta)$ 来获得最优参数估计值。然而直接处理连乘项较为复杂,因此转而考虑取自然对数值后的表达式$L=\sum log(p(y^{(i)}|x^{(i)};\theta))$. 此外还存在一种特殊情况——当事件发生次数较多时,泊松过程下的负对数似然近似等于高斯分布下的二次型结构,这解释了为什么有时会看到两者间存在一定联系[^2]. ### 交叉熵损失函数 交叉熵最初来自于信息论,用来量化两个离散随机变量之间的距离度量。在机器学习背景下,特别是分类任务里,常用作评估模型输出(通常是经过softmax转换后的概率分布)与真实类别标记间的差距大小。公式如下所示: $$ H(p,q)=-\sum_xp(x)\cdot ln(q(x)) $$ 此处$q(x)$代表由算法产生的预测结果;而$p(x)$则是实际发生的事实情况所对应的真实分布。值得注意的是,如果采用sigmoid激活单元构建神经网络并配合使用二元交叉熵作为代价函数的话,那么最终求导过程中将会出现类似于逻辑斯特回归里的S形曲线特征[^4]。 ### 区别与联系 - **区别** - 最小二乘适用于连续型因变量建模场景; - 极大似然侧重于从统计角度出发寻求最有可能产生现有观察数据集的那个未知参 数组合方案; - 交叉熵更多见诸于多分类或多标签识别场合之中。 - **联系** 所有上述提到的技术手段都属于广义上的优化策略范畴之内,即试图调整内部权重系数直至整体性能指标趋于收敛稳定状态为止。另外,在某些特定条件下,比如正态分布假定成立的情况下,最小二乘实际上等价于最大似然估计的一种特例表现形式[^5]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值