交叉熵损失函数与最大似然估计的关系理解

一、softmax分类

对于一般的分类问题,已知一共 m m m组样本(sample),每组样本 n n n个特征(feature),令每组样本为列向量 x ( i ) ∈ R n \boldsymbol{x}^{(i)} \in R^n x(i)Rn i i i代表第 i i i组样本( i = 1 , 2 , . . . , m i=1,2,...,m i=1,2,...,m)。假设一共有 q q q种类别,我们可以通过一维的输出 y = 1 , 2 , . . . , q y=1,2,...,q y=1,2,...,q来表示不同的分类识别结果。但这种输出方式本质上是由连续回归问题转化而来,对于分类问题,我们有更合适的softmax分类模型。

softmax分类输出维数等于类别数 q q q,其中每个元素对应某特定分类的概率。对于各训练样本的标签 y ( i ) ∈ R q \boldsymbol{y}^{(i)} \in R^q y(i)Rq,我们将该样本真实分类对应元素令为1,其余元素令为0,便可将输出拓展为 q q q维。比如我们要对猫、狗、鸡进行分类,猫对应输出可写为 [ 1 0 0 ] \begin{bmatrix}1\\0\\0\end{bmatrix} 100,狗为 [ 0 1 0 ] \begin{bmatrix}0\\1\\0\end{bmatrix} 010,鸡为 [ 0 0 1 ] \begin{bmatrix}0\\0\\1\end{bmatrix} 001

对于我们根据样本 i i i得到的预测结果 y ^ ( i ) ∈ R q \hat{\boldsymbol{y}}^{(i)} \in R^q y^(i)Rq,我们通过以下算法将其各元素之和归一化为1。设原始输出为 o 1 , o 2 , . . . , o q o_1,o_2,...,o_q o1,o2,...,oq,归一化后的输出为 y ^ 1 , y ^ 2 , . . . , y ^ q \hat{y}_1,\hat{y}_2,...,\hat{y}_q y^1,y^2,...,y^q
y ^ 1 , y ^ 2 , . . . , y ^ q = softmax ( o 1 , o 2 , . . . , o q ) \hat{y}_1, \hat{y}_2,..., \hat{y}_q = \text{softmax}(o_1, o_2,..., o_q) y^1,y^2,...,y^q=softmax(o1,o2,...,oq)
其中
y ^ k = exp ⁡ ( o k ) ∑ i = 1 q exp ⁡ ( o i ) \hat{y}_k = \frac{ \exp(o_k)}{\sum_{i=1}^q \exp(o_i)} y^k=i=1qexp(oi)exp(ok)
这样我们可以把模型输出的各元素视为各类别的概率,其中最大的一项就可以取为我们的预测结果。比如上面分类猫、狗、鸡的问题,我们的模型输出为 [ 0.1 0.6 0.3 ] \begin{bmatrix}0.1\\0.6\\0.3\end{bmatrix} 0.10.60.3,便可认为预测分类为狗。

三、交叉熵损失函数

在训练过程中,我们需要一个损失函数(cost function)来衡量预测输出与实际标签之间的差异,并将该损失函数最小化来优化模型。我们可以像线性回归那样使用平方损失函数 ∥ y ^ ( i ) − y ( i ) ∥ 2 / 2 \|\boldsymbol{\hat y}^{(i)}-\boldsymbol{y}^{(i)}\|^2/2 y^(i)y(i)2/2。然而,想要预测分类结果正确,我们其实并不需要预测概率完全等于标签概率。例如,在图像分类的例子里,如果 y ( i ) = 3 y^{(i)}=3 y(i)=3,那么我们只需要 y ^ 3 ( i ) \hat{y}^{(i)}_3 y^3(i)比其他两个预测值 y ^ 1 ( i ) \hat{y}^{(i)}_1 y^1(i) y ^ 2 ( i ) \hat{y}^{(i)}_2 y^2(i)大就行了。即使 y ^ 3 ( i ) \hat{y}^{(i)}_3 y^3(i)值为0.6,不管其他两个预测值为多少,类别预测均正确。而平方损失则过于严格,例如 y ^ 1 ( i ) = y ^ 2 ( i ) = 0.2 \hat y^{(i)}_1=\hat y^{(i)}_2=0.2 y^1(i)=y^2(i)=0.2 y ^ 1 ( i ) = 0 , y ^ 2 ( i ) = 0.4 \hat y^{(i)}_1=0, \hat y^{(i)}_2=0.4 y^1(i)=0,y^2(i)=0.4的损失要小很多,虽然两者都有同样正确的分类预测结果。(该段主要引自《动手学深度学习》)

我们可以用如下交叉熵(cross entropy)损失函数改善上诉问题:
H ( y ( i ) , y ^ ( i ) ) = − ∑ j = 1 q y j ( i ) ln ⁡ y ^ j ( i ) H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right ) = -\sum_{j=1}^q y_j^{(i)} \ln \hat y_j^{(i)} H(y(i),y^(i))=j=1qyj(i)lny^j(i)
其中 y j ( i ) y_j^{(i)} yj(i)只有实际分类对应的一项为1,所以损失函数即为预测输出 y ^ ( i ) \boldsymbol{\hat y}^{(i)} y^(i)对应元素的负对数值:
H ( y ( i ) , y ^ ( i ) ) = − ln ⁡ y ^ y ( i ) ( i ) H(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}) = -\ln \hat y_{y^{(i)}}^{(i)} H(y(i),y^(i))=lny^y(i)(i)

对于所有 m m m组样本,交叉熵损失函数可定义为各样本损失函数之和:
ℓ ( Θ ) = ∑ i = 1 m H ( y ( i ) , y ^ ( i ) ) = − ∑ i = 1 m ln ⁡ y ^ y ( i ) ( i ) \ell(\boldsymbol{\Theta}) = \sum_{i=1}^m H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right )= -\sum_{i=1}^m \ln \hat y_{y^{(i)}}^{(i)} (Θ)=i=1mH(y(i),y^(i))=i=1mlny^y(i)(i)

其中 Θ \boldsymbol{\Theta} Θ代表模型参数。

四、最大似然估计

最大似然估计(Maximum Likelihood Estimation, MLE)是一种参数估计中点估计的方法。基本思想是通过选取合适的参数,使得当前已知样本的发生概率最大。为了求得该最大值,写出取得当前样本值的概率函数 L ( Θ ) L(\boldsymbol{\Theta}) L(Θ),该函数与模型参数 Θ \boldsymbol{\Theta} Θ有关,又被称为似然函数。对其求导可以得到似然函数取得最大值时的模型参数。

对于上面的分类问题,将模型预测输出各项看作各类别的概率,似然函数即为各样本对应类别的概率乘积:
L ( Θ ) = ∏ i = 1 m y ^ y ( i ) ( i ) L(\boldsymbol{\Theta})=\prod_{i=1}^m \hat y_{y^{(i)}}^{(i)} L(Θ)=i=1my^y(i)(i)
一般的似然函数为连乘形式,为了计算方便,常对其做取对数处理:
ℓ ( Θ ) = l n L ( Θ ) = ∑ i = 1 m ln ⁡ y ^ y ( i ) ( i ) \ell(\boldsymbol{\Theta})=lnL(\boldsymbol{\Theta})= \sum_{i=1}^m \ln \hat y_{y^{(i)}}^{(i)} (Θ)=lnL(Θ)=i=1mlny^y(i)(i)
根绝极大似然法,此处我们要求 ℓ ( Θ ) \ell(\boldsymbol{\Theta}) (Θ)取得最大值,等价于 − ∑ i = 1 m ln ⁡ y ^ y ( i ) ( i ) -\sum_{i=1}^m \ln \hat y_{y^{(i)}}^{(i)} i=1mlny^y(i)(i)取得最小值。将该式与上面的交叉熵损失函数相比较,可以看到形式完全相同。

交叉熵损失函数和负对数似然损失函数是在机器学习中常用的损失函数,用于衡量模型输出与真实标签之间的差异。 交叉熵损失函数是一种常用的分类问题损失函数。它通过计算模型输出的概率分布与真实标签的概率分布之间的交叉熵来衡量两者的差异。在pytorch中,可以使用torch.nn.CrossEntropyLoss()函数来计算交叉熵损失。这个函数会同时计算softmax函数和交叉熵,所以输入的模型输出不需要经过softmax函数处理。 负对数似然损失函数是一种常用的用于最大似然估计的损失函数。在二分类问题中,假设模型的输出是一个介于0和1之间的概率值,表示为θ。负对数似然损失函数可以用来衡量模型输出θ与真实标签0或1之间的差异。当模型输出θ接近1时,即模型预测为正例时的概率较大,负对数似然损失函数的值较小;当模型输出θ接近0时,即模型预测为负例时的概率较大,负对数似然损失函数的值也较小。在pytorch中,可以使用torch.nn.functional.nll_loss()函数来计算负对数似然损失。 综上所述,交叉熵损失函数和负对数似然损失函数都是用来衡量模型输出与真实标签之间的差异的常用损失函数。交叉熵损失函数适用于分类问题,而负对数似然损失函数适用于二分类问题。在实际应用中,根据具体的问题和需求选择合适的损失函数来训练模型。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [损失函数-负对数似然和交叉熵(Pytorch中的应用)](https://blog.csdn.net/tcn760/article/details/123910565)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [15/4/2022交叉熵损失函数和负对数似然损失](https://blog.csdn.net/weixin_44228389/article/details/124202843)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值