本文介绍了深度学习中的损失函数,包括均方误差、交叉熵损失等常见类型。均方误差用于回归问题,而交叉熵损失在分类任务中广泛应用。此外,还提及了多损失函数在多分支网络模型中的使用,并推荐了几篇深度学习领域的经典论文。 摘要由CSDN通过智能技术生成

深度学习系列文章陆陆续续已经发了两篇,分别是 激活函数篇 卷积篇 ,纯干货分享,想要入门深度学习的童鞋不容错过噢!书接上文,该篇文章来给大家介绍“ 选择对象的标准 ”-- 损失函数,损失函数种类繁多,各式各样,不仅包括单损失函数,而且也包括多损失函数,但是最常使用的还是经典的均方误差损失函数和交叉熵损失函数,所以本篇文章重点介绍这两种损失函数,至于其余单损失函数和多损失函数,我也会简单介绍一下,并提供相应的经典论文供大家自行阅读!

二、什么是损失函数、为什么使用损失函数

其实,我们在现实生活中会在无形之中已经为某些事情制作了判定标准,比如如果有人问你现在有多幸福,你会如何回答呢?一般的人可能会给出诸如“还可以吧”或者“不是那么幸福”等笼统的回答。如果有人回答“我现在的幸福指数是10.23”的话,可能会把人吓一跳吧。因为他用一个数值指标来评判自己的幸福程度。这里的幸福指数只是打个比方,实际上神经网络的学习也在做同样的事情。

神经网络的学习通过某个指标表示现在的状态。然后,以这个指标为基准,寻找最优权重参数。和刚刚那位以幸福指数为指引寻找“最优人生”的人一样,神经网络以某个指标为线索寻找最优权重参数。神经网络的学习中所用的指标称为 损失函数 (loss function)。这个损失函数可以使用任意函数, 但一般用均方误差和交叉熵误差等。

损失函数是表示神经网络性能的“恶劣程度”的指标 ,即当前的神经网络对监督数据在多大程度上不拟合,在多大程度上不一致。以“性能的恶劣程度”为指标可能会使人感到不太自然,但是如果给损失函数乘上一个负值,就可以解释为“在多大程度上不坏”,即“性能有多好”。并且,“使性能的恶劣程度达到最小”和“使性能的优良程度达到最大”是等价的,不管是用“恶劣程度”还是“优良程度”,做的事情本质上都是一样的。

三、单损失函数

3.1 均方误差损失函数

可以用作神经网络损失函数的函数有很多,其中最有名的莫过于均方误差了,均方误差如下式所示:
在这里插入图片描述
yk是表示神经网络的输出,tk表示监督数据,k表示数据的维数。均方误差会计算神经网络的输出和正确解监督数据的各个元素之差的平方,再求总和。

3.2、交叉熵损失函数

相较于均方误差损失函数,交叉熵损失函数在实际应用中用的会更多,在这一年的学习研究深度学习过程中,看过的论文中,若使用单损失函数,绝大多数都会用到交叉熵损失;即使是多损失函数,交叉熵函数也会是其中一部分,这足以说明交叉熵函数在深度学习领域的重要地位。交叉熵损失函数如下式表示:
在这里插入图片描述
log表示以e为底数的自然对数(log e)。yk是神经网络的输出,tk是正确解标签。并且,tk中只有正确解标签的索引为1,其他均为0。

当然,另一种表示形式会将交叉熵损失解释的更加直白一些,另一种表示形式如下:
在这里插入图片描述
Note:(如何理解交叉熵损失,这很重要)

  • 当y=1时,C = -loga。我们肯定是想让-loga尽可能地小,这就意味着,loga要尽可能地大,这也意味着a要足够大,但a再大也不可能大于1,所以,我们想要a尽可能地接近1。

  • 当y=0时,C = -log(1-a)。我们肯定是想让-log(1-a)尽可能地小,这就意味着,log(1-a)要尽可能地大,这也意味着a要足够小,但a再小也不可能小于0,所以,我们想要a尽可能地接近0。

3.3 绝对值损失函数

绝对值损失函数是计算预测值与目标值的差的绝对值,该损失函数在深度神经网络中用的非常少,基本可以忽略不记了。
在这里插入图片描述

3.4 对数损失函数

对数损失函数的标准形式如下:
在这里插入图片描述

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

3.5 指数损失函数

指数损失函数的定义如下:
在这里插入图片描述
该损失函数地特征是对离群点、噪声非常敏感。但经常用在AdaBoost算法中。

推荐的论文都是深度学习方面的经典论文,非常适合深度学习入门。论文的写法,如何做消融实验都值得大家去学习。这些论文中使用的损失函数绝大多数都是交叉熵损失函数,从这里足以看出交叉熵损失函数的重要之处。

《VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION》
《Network In Network》
《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》
《Dense Fully Convolutional Network for Skin Lesion Segmentation》

四、多损失函数

多损失函数常用于多分枝的网络模型中。这些模型中,大多数都设计了两个分支,例如一个分支用来提取上下文特征信息,另一分支用于提取边缘信息,两者信息显然是不同的,所以需要设计两个损失函数分别来对网络模型进行计算。在这里,我会分享一些前沿的论文供大家参考阅读。

《Skin lesion segmentation via generative adversarial networks with dual discriminators》
《MATTHEWS CORRELATION COEFFICIENT LOSS FOR DEEP CONVOLUTIONAL NETWORKS: APPLICATION TO SKIN LESION SEGMENTATION》

《深度学习入门 - 基于Python的理论与实现》
https://zhuanlan.zhihu.com/p/58883095
《VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION》
《Network In Network》
《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》
《Dense Fully Convolutional Network for Skin Lesion Segmentation》
《Skin lesion segmentation via generative adversarial networks with dual discriminators》
《MATTHEWS CORRELATION COEFFICIENT LOSS FOR DEEP CONVOLUTIONAL NETWORKS: APPLICATION TO SKIN LESION SEGMENTATION》

计划 – 深度学习系列

都2021年了,不会还有人连深度学习还不了解吧?(一)-- 激活函数篇
都2021年了,不会还有人连深度学习还不了解吧?(二)-- 卷积篇
都2021年了,不会还有人连深度学习还不了解吧?(三)-- 损失函数篇
都2021年了,不会还有人连深度学习还不了解吧?(四)-- 上采样篇
都2021年了,不会还有人连深度学习还不了解吧?(五)-- 下采样篇
都2021年了,不会还有人连深度学习还不了解吧?(六)-- Padding篇
都2021年了,不会还有人连深度学习还不了解吧?(七)-- 评估指标篇
都2021年了,不会还有人连深度学习还不了解吧?(八)-- 优化算法篇
都2021年了,不会还有人连深度学习还不了解吧?(九)-- 注意力机制篇
都2021年了,不会还有人连深度学习还不了解吧?(十)-- 数据归一化篇

觉得写的不错的话,欢迎点赞+评论+收藏,这对我帮助很大!
在这里插入图片描述

Java的Annotation在日常开发,特别是java web开发中使用广泛,各种web框架,测试框架多多少少都会引入一些注解。若对java注解有一个全面深入的 了解 ,对于我们的开发工作会有很大的帮助。 Annotation的功能 Annotation是作用于java程序元数据的特殊类型。本身和程序的逻辑隔离,程序的运行逻辑 不会 被Anno...
所有的操作系统都支持进程,当一个程序进入内存时就变成了一个进程。进程就是处于运行过程中的程序,并且具有一定的独立能力,进程是系统进行资源分配和调度的一个独立单元。 进程包含如下3个特征: 独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每一个进程都拥有自己私有的地址空间。在没有经过进程本身允许的情况下,一个进程 可以直接访问其他进程的地址空间。 动态性:进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合。进程具有自己的生命周期和各种 同的状 我是张哲,一位在互联网上 愿透露姓名的小学员,接下来大家看到的所有内容都是我背写的知识点,这里的知识点和你所学习到的 同,我中和了我的一些书籍和网上刷的面试笔记,相信这里能让你接触到更深入的知识点,我会慢慢的把我对某个知识点的理解写进去。 String字符串本质上就是个Java类,所属于java.lang包下。 注:Java中有两个包 用导入,一个是本包,一个是java.lang包,前者是...
网上几乎没有关于java使用 深度学习 的人脸识别完整的源码,这个是我进半 来自己摸索出来的,现在开源出来,希望对喜欢人脸识别的java社区有帮助。 人脸识别分为以下3步骤完成: 1.人脸定位,也叫人脸检测,就是在一张图片中去定位人脸区域,并截图人脸照片。 2.根据步骤1得到的人脸截图输入模型,提取特征,得出一个512维度的特征向量数组。 3.根据2得出的向量数组输入分类网络,输出分类最相似的结果:lab和相似度。 本人已经完全封装好了,可直接运行测试代码调用海康等摄像头或者本地usb摄像头进行人
虽然一直都有在用RxJava2,但是很惭愧的是,一直都只是在和Retrofit配合使用的时候用了一下,总感觉自己确实还 怎么理解RxJava2。看着RxJava中各种各样的操作符,有点力 从心的感觉。可耻地连代码都看 懂的话,实在说 过去哈。 下面进入正题 使用RxJava2,需要先配置build.gradle: 这是目前最新的版本 compile 'io.reactivex.rxja