略解损失函数

一、什么是损失函数?

损失函数用来衡量神经网络中的预测值和标签值的差异程度,可以作为一个神经网络好坏的评估标准,然后我们根据这个标准去优化模型的参数。

二、L1 损失函数(又称MAE,平均绝对值误差)

L_1=\frac{1}{n}\sum _{i=1}^{n}|y_i-f(x_i) |

如上面的公式所示,可以知道L1损失函数实际上就是对所有样本的预测值和真实值之间的误差取平均值,其中n表示的是样本的个数,y_i表示的是真实值(0或1的离散值),f(x_i)表示的是预测值(0-1之间的连续值),后面不再提及。

# Pytorch实现
import torch

loss = torch.nn.L1Loss()(pre, label)

三、L2损失函数(又称MSE,均方损失函数)

L_2 = \frac{1}{n}\sum _{i=1}^{n}(y_i-f(x_i))^2

L2损失函数就是对所有预测样本的预测值和真实值之间的误差平方取均值,其中n表示的是样本的个数。

import torch

loss = torch.nn.MSELoss()(pre, label)

四、交叉熵损失函数(Cross Entropy Loss Function)

熵的定义:熵被用来形容一个系统的内在混乱程度,越混乱熵越大。为了方便记忆,可以用一个人的年龄来记忆,即一个人的熵和年龄是成正比的,人的年龄越大,内部系统越紊乱,熵也同时增加。所以熵增不是我们所需要的,可以类比到我们的损失函数,即损失越大熵越大,神经网络的优化也是朝着熵减的情况下进行的。

香农熵(信息熵):Shannon认为“信息是用来消除随机不确定性的东西”。

S(p_1,p_2,\dots ,p_n) = -K \sum _{i=1}^{n}p_i \log_2 p_i

其中i标记概率空间中所有的样本,p_i表示的该样本出现的规律,K是常数。

交叉熵:

L_{CrossEntropy} =- \frac{1}{n}\sum_{i=1}^{n}y_i\log (p_i)

由以上公式可知,此公式表示的是预测为真的概率。交叉熵损失函数经常被用于分类问题。此外由于交叉熵涉及到每个类别的概率,所以经常和softmax函数和sigmoid函数搭配使用,特别是softmax函数。主要就是在神经网络中神经网络的最后一层得到每个类别的得分scores或者是logits,然后softmax计算获得概率输出,然后与one-hot形式的真实标签进行交叉熵损失函数的计算。

import torch

loss = torch.nn.CrossEntropyLoss()(pre, label)

五、相对熵(Kullback-Leibler散度,KL散度)

相对熵(relative entropy),又被称为Kullback-Leibler散度(Kullback-Leibler divergence)或信息散度(information divergence),是两个概率分布(probability distribution)间差异的非对称性度量  。在信息理论中,相对熵等价于两个概率分布的信息熵(Shannon entropy)的差值 。

相对熵可以衡量两个随机分布之间的距离,当两个随机分布相同时,它们的相对熵为零,当两个随机分布的差别增大时,它们的相对熵也会增大。 所以相对熵可以用于比较文本的相似度,先统计出词的频率,然后计算相对熵。另外,在多指标系统评估中,指标权重分配是一个重点和难点,也通过相对熵可以处理

S(p||q)=\sum _{i=1}^{n} p(x)\log \frac{p(x)}{q(x)}

其中,p表示真实的随机分布,q表示模型所预测的分布。例如p表示预训练出来的类别[1,0,0],然后模型推理时得到了样本q的分布[0.7,0.2,0,1]。相对熵越小,p分布和q分布就越接近。

import torch

loss = torch.nn.KLDivLoss()(pre, label)

参考文献

[1] 损失函数|交叉熵损失函数 - 知乎 (zhihu.com)

[2] 损失函数(Loss Function) - 知乎 (zhihu.com)

[3] 交叉熵(Cross Entropy) - 简书 (jianshu.com)

[4] 熵(统计物理与信息论术语)_百度百科 (baidu.com)

[5] 相对熵_百度百科 (baidu.com)

[6] 如何理解K-L散度(相对熵) - 简书 (jianshu.com)

[7] 一文搞懂交叉熵在机器学习中的使用

猜你喜欢

转载自blog.csdn.net/qq_38901850/article/details/125126327