文章目录

  • 损失函数的定义
  • 神经网络的学习为何要设定损失函数?
  • 常见的损失函数
    • 1. 0-1损失函数(zero-one loss)
    • 2. 对数损失函数
    • 3. 平方损失函数MSE(均值平方差)
    • 4. Hinge 损失函数
    • 5. 交叉熵损失函数 (Cross-entropy loss function)

损失函数的定义

损失函数,又叫目标函数,是编译一个神经网络模型必须的两个要素之一。另一个必不可少的要素是优化器。

损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。

损失函数分为经验风险损失函数结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项

损失Loss必须是标量,因为向量无法比较大小(向量本身需要通过范数等标量来比较)。

损失函数一般分为4种:

  1. HingeLoss 0-1 损失函数:感知机就是用的这种损失函数;
  2. 对数损失函数:逻辑回归的损失函数就是log对数损失函数;
  3. MSE平方损失函数:线性回归的损失函数就是MSE;
  4. Hinge 损失函数:SVM就是使用这个损失函数;
  5. 交叉熵损失函数 :逻辑回归的损失函数,用sigmoid作为激活函数,常用于二分类和多分类问题中。

我们先定义两个二维数组,然后用不同的损失函数计算其损失值。

import torch
from torch.autograd import Variable
import torch.nn as nn
import torch.nn.functional as F
y_pred = Variable(torch.ones(2,2))
a = torch.Tensor(2,2)
a[0,0]=0
a[0,1]=1
a[1,0]=2
a[1,1]=3
y = Variable (a)

y_pred 的值为:[[1,1],[1,1]]。
y 的值为:[[0,1],[2,3]]。

神经网络的学习为何要设定损失函数?

神经网络中的“学习”是指从训练数据中自动获取最优权重参数的过程。学习的目的就是以该损失函数为基准,找出能使它的值达到最小的权重参数。

常见的损失函数

1. 0-1损失函数(zero-one loss)

0-1损失是指预测值和目标值不相等为1, 否则为0:

特点:

(1)0-1损失函数直接对应分类判断错误的个数,但是它是一个非凸函数,不太适用。

(2)感知机就是用的这种损失函数。但是相等这个条件太过严格,因此可以放宽条件,即满足

时认为相等。

2. 对数损失函数

log对数损失函数的标准形式如下:

特点:

(1) log对数损失函数能非常好的表征概率分布,在很多场景尤其是多分类,如果需要知道结果属于每个类别的置信度,那它非常适合。
(2)健壮性不强,相比于hinge loss对噪声更敏感。
(3)逻辑回归的损失函数就是log对数损失函数。

3. 平方损失函数MSE(均值平方差)

数理统计中演化而来,均方误差是指参数估计值和参数真实值之差平方的期望值。在此处其主要是对每个预测值与真实值作差求平方的平均值,具体公式如下所示:

MSE越小代表模型越好,类似的算法还包括RMSE和MAD。
线性回归就是使用MSE作为损失函数。

方式1:Pytorch

criterion = nn.MSELoss()
loss = criterion(y_pred, y)
print(loss)

最后结果是:1.5。

方式2:tensorflow
tensorflow没有单独的MSE函数,不过可由开发者自己组合即可,如下所示:

# y为真实值,y_pred为预测值
1. MSE = tf.reduce_mean(tf.square(y - y_pred)))
2. RMSE = tf.sqrt(tf.reduce_mean(tf.square(y - y_pred)))
3. MAD =  tf.reduce_mean(tf.complex_abs(y - y_pred))

4. Hinge 损失函数

Hinge损失函数标准形式如下:

y为目标值,f(x)为预测值。

特点:

(1)hinge损失函数表示如果被分类正确,损失为0,否则损失就为 1−yf(x)1-yf(x)1−yf(x)。SVM就是使用这个损失函数。
(2)一般的 f(x)f(x)f(x) 是预测值,在-1到1之间,yyy 是目标值(-1或1)。其含义是, f(x)f(x)f(x) 的值在-1和+1之间就可以了,并不鼓励 ∣f(x)∣>1|f(x)| > 1∣f(x)∣>1 ,即并不鼓励分类器过度自信,让某个正确分类的样本距离分割线超过1并不会有任何奖励,从而使分类器可以更专注于整体的误差
(3) 健壮性相对较高,对异常点、噪声不敏感,但它没太好的概率解释。

5. 交叉熵损失函数 (Cross-entropy loss function)

交叉熵(cross-entropy)刻画了两个概率分布之间的距离,更适合用在分类问题上,因为交叉熵表达预测输入样本属于某一类的概率。
交叉熵损失函数的标准形式如下:

注意公式中 xxx 表示样本, yyy 表示实际的标签, aaa 表示预测的输出, nnn 表示样本总数量。

也就相当于:

特点:

  1. 本质上也是一种对数似然函数,可用于二分类多分类任务中。
  • 二分类问题中的loss函数(输入数据是softmax或者sigmoid函数的输出):
  • 多分类问题中的loss函数(输入数据是softmax或者sigmoid函数的输出):
  1. 当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数,因为它可以完美解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质。

Pytorch实现交叉熵函数:

def cross_entropy(Y, P):"""Cross-Entropy loss function.以向量化的方式实现交叉熵函数Y and P are lists of labels and estimationsreturns the float corresponding to their cross-entropy."""Y = np.float_(Y)P = np.float_(P)return -np.sum(Y * np.log(P) + (1 - Y) * np.log(1 - P)) / len(Y)

tensorflow具有多种常见的交叉熵函数:

#Sigmoid交叉熵
tf.nn.simoid_cross_entropy_with_logits(y_pred, y, name=None)
#softmax交叉熵
tf.nn.softmax_cross_entropy_with_logits(y_pred, y, name=None)
#Sparse交叉熵
tf.nn.sparse_cross_entropy_with_logits(y_pred, y, name=None)
#加权Sigmoid交叉熵
tf.nn.weighter_cross_entropy_with_logits(y_pred, y, pos_weight,name=None)

三、总结
loss函数的选取取决于输入标签数据的类型:若输入的是实数、无界的值,损失函数使用平方差;若输入标签是位矢量(分类标志),使用交叉熵更适合。此外预测值与真实值要采用同样的数据分布,以便于loss函数取得更佳的效果。

参考链接:
深度学习基础(三)loss函数:https://blog.csdn.net/u010554381/article/details/88351920
常见的损失函数(loss function)总结:https://zhuanlan.zhihu.com/p/58883095

【常见的损失函数总结】相关推荐

  1. 了解机器学习回归的3种最常见的损失函数

    机器学习中的损失函数是衡量你的ML模型的预测结果准确性的一个指标. 损失函数将以两项作为输入:模型的输出值和标准答案的期望值.损失函数的输出称为损失,它是衡量我们的模型在预测结果方面做得有多好. 损失 ...

  2. Pytorch学习 - Task6 PyTorch常见的损失函数和优化器使用

    Pytorch学习 - Task6 PyTorch常见的损失函数和优化器使用 官方参考链接 1. 损失函数 (1)BCELoss 二分类 计算公式 小例子: (2) BCEWithLogitsLoss ...

  3. 机器学习-常见的损失函数比较

    在机器学习每一个算法中都会有一个目标函数,算法的求解过程是通过对这个目标函数优化的过程.在分类或者回归问题中,通常使用损失函数(代价函数)作为其目标函数.损失函数用来评价模型的预测值和真实值不一样的程 ...

  4. 机器学习中常见的损失函数

    常见的损失函数:https://zhuanlan.zhihu.com/p/58883095

  5. 深度学习中常见的损失函数

    文章来源于AI的那些事儿,作者黄鸿波 2018年我出版了<TensorFlow进阶指南 基础.算法与应用>这本书,今天我把这本书中关于常见的损失函数这一节的内容公开出来,希望能对大家有所帮 ...

  6. 经验 | 深度学习中常见的损失函数(loss function)总结

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作分享,不代表本公众号立场,侵权联系删除 转载于:机器学习算法与自然语言处理出品    单位 | 哈工大SCIR实 ...

  7. 二元函数图像生成器_常见的损失函数(loss function)

    本文主要讲一下机器学习/深度学习里面比较常见的损失函数. 分类损失 hinge loss 其中y是标签,要么为1(正样本),要么为-1(负样本).hinge loss被使用在SVM当中.对于正确分类的 ...

  8. 机器学习之常见的损失函数(loss function)

    解决一个机器学习问题主要有两部分:数据和算法.而算法又有三个部分组成:假设函数.损失函数.算法优化.我们一般在看算法书或者视频教学时,更多的是去推算或者说参数估计出其假设函数,而往往不太注重损失函数, ...

  9. 机器学习中常见的损失函数_机器学习中最常见的损失函数

    机器学习中常见的损失函数 现实世界中的DS (DS IN THE REAL WORLD) In mathematical optimization and decision theory, a los ...

  10. 交叉熵损失函数优缺点_【损失函数】常见的损失函数(loss function)总结

    阅读大概需要7分钟 跟随小博主,每天进步一丢丢 机器学习算法与自然语言处理出品 @公众号原创专栏作者 yyHaker 单位 | 哈工大SCIR实验室 损失函数用来评价模型的预测值和真实值不一样的程度, ...

最新文章

  1. SNV分析软件/工具
  2. 小学数学开灯问题_包含数学暑假答案的一年级数学假期作业题
  3. wxPython wx.ArtProvider 可直接调用的图标
  4. java7 uri,细数Java8中那些让人纵享丝滑的文件操作
  5. Visual Studio 安装失败
  6. oracle 上搭建ogg文档,ogg搭建配置实现oracle数据同步到mysql)
  7. 【NIPS 2020】通过文本压缩,让BERT支持长文本
  8. 计算机网络与应用第三次笔记
  9. F - 小希的迷宫 (并查集)
  10. MyBatis使用foreach批量插入一个含List<实体>成员变量的实体类
  11. solr全文检索(多字段搜索)
  12. apr dbd mysql.so_mod_dbd
  13. 美容院加盟十大品牌到底怎么选
  14. Nginx获取真实用户IP
  15. idea开发SSM框架的高校大学学生社团管理网站bootstrap自适应响应式前端(javaweb-php-asp.netC#-j2ee)包含公告管理-社团活动管理-社团申请管理-社团审核-活动报名
  16. 利用python在网上接单赚钱,兼职也能月入过万,还不赶紧学起来...
  17. tomcat发布前端项目
  18. CognosSDK Java登陆到Cognos
  19. MATLAB-自动控制原理-时域分析
  20. python爬取动态网页图片

热门文章

  1. StretchDIBits()函数
  2. 搜狗网址导航带学子享受美好假期
  3. EhCache 分布式缓存/缓存集群之Terracotta
  4. lenovo k1 android 4,阳光明媚-联想乐PAD K1获取ROOT及升级Android 4.0.4
  5. 逻辑运算符简介, 逻辑与,逻辑或,逻辑非和逻辑运算符里的短路运算规则
  6. MATLAB对轮胎图形做均衡变换
  7. 专升本C语言试题分析(一)
  8. Linux:进程地址空间管理(图文详解总结)
  9. Springboot居民小区物业管理系统4bq5w计算机毕业设计-课程设计-期末作业-毕设程序代做
  10. 计算机主机拆卸的步骤,计算机组装及维护——计算机拆卸步骤及实训.ppt