损失函数总结(十五):MSLELoss、RMSLELoss
- 1 引言
- 2 损失函数
- 2.1 MSLELoss
- 2.2 RMSLELoss
- 3 总结
1 引言
在前面的文章中已经介绍了介绍了一系列损失函数 (L1Loss
、MSELoss
、BCELoss
、CrossEntropyLoss
、NLLLoss
、CTCLoss
、PoissonNLLLoss
、GaussianNLLLoss
、KLDivLoss
、BCEWithLogitsLoss
、MarginRankingLoss
、HingeEmbeddingLoss
、MultiMarginLoss
、MultiLabelMarginLoss
、SoftMarginLoss
、MultiLabelSoftMarginLoss
、TripletMarginLoss
、TripletMarginWithDistanceLoss
、Huber Loss
、SmoothL1Loss
、MBELoss
、RAELoss
、RSELoss
、MAPELoss
、RMSELoss
、LogCosh 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=0∑n(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=0∑n(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 总结
到此,使用 损失函数总结(十五) 已经介绍完毕了!!! 如果有什么疑问欢迎在评论区提出,对于共性问题可能会后续添加到文章介绍中。如果存在没有提及的损失函数
也可以在评论区提出,后续会对其进行添加!!!!
如果觉得这篇文章对你有用,记得点赞、收藏并分享给你的小伙伴们哦😄。