机器学习/深度学习中的常用损失函数公式、原理与代码实践(持续更新ing...)

简介: 本文的结构是首先介绍一些常见的损失函数,然后介绍一些个性化的损失函数实例。
+关注继续查看

1. 分类 - 交叉熵


讲解博文:损失函数|交叉熵损失函数 - 知乎


1.1 二分类-BCELoss系

二分类可以使用BCELoss,比如链路预测任务预测某条边是否存在,或者多标签分类中将每个类作为一个二分类任务(但是一般来说这样效果会很差),就用BCELoss。

torch.nn.BCEWithLogitsLoss=sigmoid (torch.special.expit) +torch.nn.BCELoss

BCEWithLogitsLoss — PyTorch 1.12 documentation


直接使用torch.nn.BCEWithLogitsLoss在数学上更稳定。

torch.nn.BCEWithLogitsLoss(weight=None, size_average=None, reduce=None, reduction='mean', pos_weight=None)


单标签二分类(一般都是这样的):


loss = nn.BCEWithLogitsLoss()
input = torch.randn(3, requires_grad=True)
target = torch.empty(3).random_(2)
output = loss(input, target)
output.backward()


多标签二分类:


target = torch.ones([10, 64], dtype=torch.float32)  # 64 classes, batch size = 10
output = torch.full([10, 64], 1.5)  # A prediction (logit)
pos_weight = torch.ones([64])  # All weights are equal to 1
criterion = torch.nn.BCEWithLogitsLoss(pos_weight=pos_weight)
criterion(output, target)  # -log(sigmoid(1.5))


输出:tensor(0.2014)


多分类用CrossEntropyLoss(等于softmax+NLLLoss)


其他相关参考资料:

  1. 细数nn.BCELoss与nn.CrossEntropyLoss的区别_python_脚本之家
  2. nn.BCELoss与nn.CrossEntropyLoss的区别_耐耐~的博客-CSDN博客_bceloss和crossentropy
  3. nn.BCELoss()与nn.CrossEntropyLoss()的区别_Offer.harvester的博客-CSDN博客
  4. 【基础知识】多标签分类CrossEntropyLoss 与 二分类BCELoss_All_In_gzx_cc的博客-CSDN博客_bceloss crossentropy
  5. pytorch BCELoss和BCEWithLogitsLoss - 那抹阳光1994 - 博客园
  6. Pytorch nn.BCEWithLogitsLoss()的简单理解与用法_xiongxyowo的博客-CSDN博客_nn.bcewithlogitsloss


2. 二分类 - hinge loss


image.png

参考资料:

  1. Hinge loss - Wikiwand
  2. 怎么样理解SVM中的hinge-loss? - 知乎


3. 回归 - MSE



4. 魔改损失函数的示例


  1. 多任务

SPACES模型,示例损失函数部分TensorFlow1+Keras代码:SPACES/seq2seq_model.py at main · bojone/SPACES


  1. 自定义:图神经网络节点表征模型PTA,PyTorch代码,我参考原始项目复现出来的。损失函数分成2部分,一部分在模型中直接定义随epoch变化的损失函数:rgb-experiment/pta.py at master · PolarisRisingWar/rgb-experiment,一部分在训练和测试的时候额外增加设定的超参:rgb-experiment/itexperiments.py at master · PolarisRisingWar/rgb-experiment


  1. 多任务+自定义:legal judgment prediction模型EPM:在train()函数中,又是多任务,又加了mask(在原论文中定义为“constraint”):EPM/model.py at main · WAPAY/EPM


相关文章
|
5天前
|
机器学习/深度学习 算法 Python
机器学习的基本代码
机器学习的基本代码
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
不写代码,就能快速构建精准的机器学习模型
不写代码,就能快速构建精准的机器学习模型
|
5月前
|
机器学习/深度学习 人工智能 数据处理
详解机器学习中的数据处理(一)——缺失值处理(附完整代码)
详解机器学习中的数据处理(一)——缺失值处理(附完整代码)
139 0
|
6月前
|
机器学习/深度学习 存储 算法
《python机器学习从入门到高级》之分类算法:下(含详细代码)
《python机器学习从入门到高级》之分类算法:下(含详细代码)
《python机器学习从入门到高级》之分类算法:下(含详细代码)
|
6月前
|
机器学习/深度学习 算法 数据可视化
《python机器学习从入门到高级》分类算法实现:上(含详细代码)
《python机器学习从入门到高级》分类算法实现:上(含详细代码)
《python机器学习从入门到高级》分类算法实现:上(含详细代码)
|
6月前
|
机器学习/深度学习 算法 数据挖掘
python机器学习从入门到高级:超参数调整(含详细代码)
python机器学习从入门到高级:超参数调整(含详细代码)
|
6月前
|
机器学习/深度学习 数据可视化 前端开发
Python机器学习从入门到高级:模型评估和选择(含详细代码)
Python机器学习从入门到高级:模型评估和选择(含详细代码)
Python机器学习从入门到高级:模型评估和选择(含详细代码)
|
6月前
|
机器学习/深度学习 数据挖掘 数据处理
Python机器学习从入门到高级:手把手教你处理分类型数据(含详细代码)
Python机器学习从入门到高级:手把手教你处理分类型数据(含详细代码)
|
6月前
|
机器学习/深度学习 数据采集 资源调度
Python机器学习从入门到高级:带你玩转特征转换(含详细代码)
Python机器学习从入门到高级:带你玩转特征转换(含详细代码)
|
6月前
|
数据采集 机器学习/深度学习 NoSQL
Python机器学习入门到高级:数据清洗(含详细代码)
Python机器学习入门到高级:数据清洗(含详细代码)
相关产品
机器翻译
推荐文章
更多