损失函数总结(十五):MSLELoss、RMSLELoss

损失函数总结(十五):MSLELoss、RMSLELoss

  • 1 引言
  • 2 损失函数
    • 2.1 MSLELoss
    • 2.2 RMSLELoss
  • 3 总结

1 引言

在前面的文章中已经介绍了介绍了一系列损失函数 (L1LossMSELossBCELossCrossEntropyLossNLLLossCTCLossPoissonNLLLossGaussianNLLLossKLDivLossBCEWithLogitsLossMarginRankingLossHingeEmbeddingLossMultiMarginLossMultiLabelMarginLossSoftMarginLossMultiLabelSoftMarginLossTripletMarginLossTripletMarginWithDistanceLossHuber LossSmoothL1LossMBELossRAELossRSELossMAPELossRMSELossLogCosh Loss)。在这篇文章中,会接着上文提到的众多损失函数继续进行介绍,给大家带来更多不常见的损失函数的介绍。这里放一张损失函数的机理图:
在这里插入图片描述

2 损失函数

2.1 MSLELoss

Mean Squared Logarithmic Error (均方对数误差, MSLE) 衡量实际值预期值之间的差异。添加对数减少了 MSLE 对实际值和预测值之间的百分比差异以及两者之间的相对差异的关注。MSLE 将粗略地处理小的实际值和预期值之间的微小差异以及大的真实值和预测值之间的巨大差异。MSLELoss 的数学表达式如下:
L ( Y , Y ′ ) = 1 n ∑ i = 0 n ( log ⁡ ( y i + 1 ) − log ⁡ ( y i ′ + 1 ) ) 2 L(Y, Y') = \frac{1}{n}\sum_{i=0}^{n}(\log(y_i+1) - \log(y_i'+1))^2 L(Y,Y)=n1i=0n(log(yi+1)log(yi+1))2
其中:
log ⁡ ( y i + 1 ) − log ⁡ ( y i ′ + 1 ) = log ⁡ y i + 1 y i ′ + 1 \log(y_i+1) - \log(y_i'+1)=\log\frac{y_i+1}{y_i'+1} log(yi+1)log(yi+1)=logyi+1yi+1

代码实现(Pytorch):

import torch
import torch.nn as nn

# 创建模型的预测值和真实观测值
predicted = torch.tensor([2.0, 4.0, 6.0, 8.0, 10.0], dtype=torch.float32)
observed = torch.tensor([1.5, 4.2, 5.8, 7.9, 9.8], dtype=torch.float32)

# 创建 MSLE 损失函数
msle_loss = nn.MSELoss()

# 计算 MSLE Loss
predicted_log = torch.log(predicted + 1)  # 对预测值取对数,并加上 1 防止出现负无穷
observed_log = torch.log(observed + 1)  # 对真实观测值取对数,并加上 1 防止出现负无穷
loss = msle_loss(predicted_log, observed_log)

# 打印 MSLE Loss
print("Mean Squared Logarithmic Error (MSLE):", loss.item())

在MSLE中,当预测值比真实值小这种情况的错误比较大,即对于预测值小这种情况惩罚较大。在一般情况下,这种损失函数因其该特性不做使用。。。。特殊情况除外。

2.2 RMSLELoss

Root Mean Squared Logarithmic Error (RMSLE) 通过应用log到实际和预测的值,然后进行相减。当同时考虑小误差和大误差时,RMSLE 可以避免异常值的影响。相对于 MSLELoss 多了一步求取平方根的操作。RMSLELoss 的数学表达式如下:
L ( Y , Y ′ ) = 1 n ∑ i = 0 n ( log ⁡ ( y i + 1 ) − log ⁡ ( y i ′ + 1 ) ) 2 L(Y, Y') = \sqrt{\frac{1}{n}\sum_{i=0}^{n}(\log(y_i+1) - \log(y_i'+1))^2} L(Y,Y)=n1i=0n(log(yi+1)log(yi+1))2

代码实现(Pytorch):

import torch
import torch.nn as nn

# 创建模型的预测值和真实观测值
predicted = torch.tensor([2.0, 4.0, 6.0, 8.0, 10.0], dtype=torch.float32)
observed = torch.tensor([1.5, 4.2, 5.8, 7.9, 9.8], dtype=torch.float32)

# 创建 MSLE 损失函数
msle_loss = nn.MSELoss()

# 计算 MSLE Loss
predicted_log = torch.log(predicted + 1)  # 对预测值取对数,并加上 1 防止出现负无穷
observed_log = torch.log(observed + 1)  # 对真实观测值取对数,并加上 1 防止出现负无穷
loss = torch.sqrt(msle_loss(predicted_log, observed_log))

# 打印 MSLE Loss
print("Mean Squared Logarithmic Error (MSLE):", loss.item())

RMSLE是有偏见的处罚,低估比高估受到更严重的惩罚。同样地,仅在特殊情况下使用。。。。。

3 总结

到此,使用 损失函数总结(十五) 已经介绍完毕了!!! 如果有什么疑问欢迎在评论区提出,对于共性问题可能会后续添加到文章介绍中。如果存在没有提及的损失函数也可以在评论区提出,后续会对其进行添加!!!!

如果觉得这篇文章对你有用,记得点赞、收藏并分享给你的小伙伴们哦。

你可能感兴趣的:(深度学习,深度学习,人工智能,机器学习,python,损失函数)