二值交叉熵损失函数 二分类交叉熵损失
交叉熵损失函数是什么?
交叉熵损失函数是平滑函数。
二值交叉熵损失函数 二分类交叉熵损失
二值交叉熵损失函数 二分类交叉熵损失
交叉熵损失函数,也称为对数损失或者logistic损失。当模型产生了预测值之后,将对类别的预测概率与真实值(由0或1组成)进行不其中, 为类别权重,用来权衡正负样本不均衡问题; 表示难分样本权重,用来衡量难分样本和易分样本;比较,计算所产生的损失,然后基于此损失设置对数形式的惩罚项。
在神经网络中,所使用的Softmax函数是连续可导函数,这使得可以计算出损失函数相对于神经网络中每个权重的导数(在《机器学习数学基础》中有对此的完整推导过程和案例,这样就可以相应地调整模型的权重以最小化损失函数。
损失函数(loss function)或代价函数(cost期望是试验中每次可能结果的概率乘以其结果的总和。 function)是将随机或其有关随机变量的取值映射为非负实数以表示该随机的“风险”或“损失”的函数。在应用中,损失函数通常作为学习准则与优化问题相联系,即通过最小化损失函数求解和评估模型。
例如在统计学和机器学习中被用于模型的参数估计(parametric estimation),在宏观经济学中被用于风险管理(risk mangement)和决策,在控制理论中被应用于控制理论(optimal control theory)。
sharp-2048如何固定载体值
6、目前。计算机视觉中的性能的目标检测方法主要分为两种: one-stage 和two-stage 方法。在Sharp-2048的训练过程中,可以通过设定载体的固定值来保证模型输出的稳定性。在实现上,可以通过修改损失函数来实现载体值的固定。具体地说,可以利用平均交叉熵损失函数来实现载体值的固定。因为平均交叉熵损失函数可以在训练过程中不断地更新模型参数,从而使得模型逐渐趋于稳定状态,同时也可以在一定程度上减小过拟合现象的发生。此外,还可以在训练过程中使用一些正则化技术,如L1正则化和L2正则化,来约束模型参数的大小,进一步提高模型的泛化能力。综上所述,通过设定载体的固定值并使用适当的损失函数和正则化技术,可以在Sharp-2048中实现稳定且具有优良泛化能力的模型输出。
Focal Loss的引入主要是为了解决难易样本数量不平衡(注意,有区别于正负样本数量不平衡)的问题,实际可以使用的范围非常广泛。交叉熵损失函数和focal loss
交叉熵这个词乍一听还真有些不明觉厉,不过从形式上来看,它确实达到了损失函数的要求,并且也解决了均方误训练速度减慢的问题。交叉熵是信息论中的一个重要概念,主要用于度量两个概率分布间的异性。是分类问题中经常使用的一种损失函数。
一般使用交叉熵作为损失函数时,在模型的输出层总会接一个softmax函数(用来获得结果分布)。
交叉熵公式:
用来衡量真实概率分布 和预测标签分布 之间的异;
要了解交叉熵就需要先了解下述概念:
信息熵:“信息是用来 消除 随机 不确定性 的东西”,也就是说衡量信息量的大小就是看这个信息消除不确定性的程度。
信息量的大小与信息发生的概率成反比 。概率越大,信息量越小。概率越小,信息量越大。 例如: ”2018年队成功进入世界杯“ ,从直觉上来看,这句话具有很大的信息量。因为队进入世界杯的不确定性因素很大,发生的概率很小;
设某一发生的概率为P(x),其信息量表示为:
所以信息量的熵可表示为:(这里的X X X 是一个离散型随机变量)
如果对于同一个随机变量 有两个单独的概率分布 和 ,则我们可以使用KL散度来衡量这两个概率分布之间的异。
直接上公式
KL散度越小,表示 和 的分布更加接近。
比如在一个三分类任务中(例如,猫狗马分类器), 分别代表猫,狗,马。
例如一张猫的真实分布 信息熵也被称为熵,用来表示所有信息量的期望;和 ,计算KL散度:
前者 表示信息熵,后者即为交叉熵, KL散度 = 交叉熵 - 信息熵
交叉熵公式为:
交叉熵等于KL散度加上一个常量(信息熵),且公式相比KL散度更加容易计算,所以在机器学习中常常使用交叉熵损失函数来计算loss就行了。
本文的作者认为, 易分样本(即,置信度高的样本)对模型的提升效果非常小,模型应该主要关注与那些难分样本 。一个简单的思想: 把高置信度(p)样本的损失再降低一些不就好了吗!
focal loss函数公式:
如何构建损失函数
哈,总算知道这个公式是怎么来的了吧,它并不是凭空想出来的。不过,实际上我们也可以通过想办法消除 这项的过程,来构造出交叉熵这个形式的函数。为了简单起见,我们从 入手,想办法让它满足如何理解计算机视觉损失函数?
小结1、顾名思义,这种损失函数计算预测图像和目标图像间像素对像素的损失。前一篇文章中讨论的大多数损失函数,如MSE(L2 loss)、MAE(L1 loss)、交叉熵损失(cross-entropy loss)等,都可以应用于计算预测变量和目标变量的每一对像素之间的损失。
2、因为 损失函数需要减小生成分布和数据集经验分布(双峰分布)直接的距,而生成分布具有两种类型,我们的模型会尽力去“满足”这两个子分布,得到的优化结果如下图所示,即一个位于双峰之间的高斯分布。
3、损失函数的定义是将分类的loss和回归的loss整合在一起,其中分类采用log loss,即对真实分类(下图中的pu)的概率取负log,而回归的loss和R-基本一样。分类层输出K+1维,表示K个类和1个背景类。
4、如何从图像中解析出可供计算机理解的信息,是机器视觉的中心问题。深度学习模型由于其强大的表示能力,加之数据量的积累和计算力的进步,成为机器视觉的热点研究方向。 那么,如何理解一张?根据后续任务的需要,有三个主要的层次。
5、理解Hinge损失函数:指数损失是0-1损失函数的一种函数,指数损失的具体形式如下:学过Adaboost 算法 的人都知道,它是前向分步加法算法的特例,是一个加和模型,损失函数就是指数函数。
机器学习中的目标函数,损失函数,代价函数有什么区别
1、有一些区别,对象里面的函数可以有返回值和没有返回值的,两种。对象直接调用方法,方法是封装体,主要的目的是保护里面的属性,想要使用的时候直接调用方法接口,而不需要知道方法里面的具体的内容。
2、这些函数都是函数过程的一类,只是函数所用的公式不同。Visual Basic包含内置或内部的函数,如算术平方根、余弦函数和字符代码函数。此外,还可以用Function语句编写自己的Function函数过程。
3、损失函数和代价函数是同一个东西,目标函数是一个与他们相关但更广的概念,对于目标函数来说在有约束条件下的最小化就是损失函数(化的不叫损失或代价函数)。
4、损失函数(Loss Function):是定义在单个样本上的,是指一个样本的误。 代价函数(Cost Function):是定义在整个训练集上的,是所有样本误的平均,也就是所有损失函数值的平均。
5、价值函数与目标函数的区别是目标函数比价值函数范围广。目标函数化或者最小化,而价值函数是最小化。
6、预测函数中的参数决定了这个模型在对样本进行预测的真正结果。在选定模型的情况下,机器学习的目标就是通过算法得到使预测值最接近真实值的模型参数。 损失函数(cost function)。
决策树剪枝
决策树的剪枝是将生成的树进行简化,以避免过拟合。在决策树完美分割学习样例之前,停止决策树的生长。这种提早停止树生长的方法,称为预剪枝方法。在构造决策树的同时进行剪枝。
将 视为变量,当 极小时,最初的决策树就是解,当其极大时,只能使用最简单的决策树,也就是根作为解。所以,当 固定时,可以找到一个的决策树结构 。
■ 后剪枝 后剪枝的核心思想是让算法生成一棵完全生长的决策树,然后从层向上 计算是否剪枝。剪枝过程将子树删除,用一个叶子结点替代,该结点的类别同样 按照多数投票的原则进行判断。
顾名思义,平方损失函数是指预测值与真实值值的平方。损失越大,说明预测值与真实值的值越大。
解释如下:损失函数是指一种将一个,在一个样本空间中的一个元素,映射到一个表达与其相关的经济成本或机会成本的实数上的一种函数。
深度学习之损失函数与激活函数的选择 在深度神经网络(DNN)反向传播算法(BP)中,我们对DNN的前向反向传播算法的使用做了总结。其中使用的损失函数是均方,而激活函数是Sigmoid。实际上DNN可以使用的损失函数和激活函数不少。
重申一下,孪生神经网络的目标 —— 确保一个人(锚 anchor)的,相比其他人(负 negative)的来说,更接近他本人的(正 itive)的任意一张。 为了训练这样的网络,他们引入了三重损失函数。
2019-03-02
1、-03-02期。白鹿,1994年9月23日出生于江苏省常州市,内地女演员、模特。2016年7月,白鹿在陆虎单曲《留言》MV里担任女主角,9月,出演个人首部电视剧《朝歌》,从而正式进入演艺圈。
2、xgboost算法的步骤和GB基本相同,都是首先初始化为一个常数,gb是根据一阶导数ri,xgboost是根据一阶导数gi和二阶导数hi,迭代生成基学习器,相加更新学习器。
3、洞察包含四个部分:市场洞察(了解客户的需求、竞争者的动向、技术的发展、和市场的经济状况以找到机遇与风险)、战略目标、创新焦点、业务模式(涉及六个要素:客户选择、价值主张、价值获取、活动范围、持续价值和风险管理)。
4、白鹿在2019年的时候参加了《快乐大本营》,是在2019-03-02期,当时她和许凯一起宣传《招摇》这部剧,不过在节目中两人并没太有过多的互动。后来,白鹿还参加了《快乐大本营》第2020-11-21期的录制。
5、是:2019年立春之后的第五个戊日是:阴历二月十六 ,阳历2019-03-22。第1个戊日是:正月初六 2019-02-10 丙寅月 戊寅日 。第2个戊日是:正月十六 2019-02-20 丙寅月 戊子日 。
反向传播算法的基本思想
反向传播算法的基本思想是通过计算输出误对网络中各个连接权重的贡献,然后利用梯度下降法来更新权重,从而最小化网络的输出误。
一、前向传播过程
在前向传播过程中,输入数据从输入层经过一系列的隐藏层,最终到达输出层。每个神经元都会对输入进行加权求和,并通过激活函数进行激活,得到输出值。前向传播过程是从输入到输出的正向计算过程。
二、计算损失函数
在反向传播算法中,我们需要定义一个损失函数来衡量网络输出与真实值之间的距。常见的损失可见,梯度计算也很简洁,也没有节说的训练速度慢的问题。当softmax输出层的反向传播计算完以后,后面的普通DNN层的反向传播计算和之前讲的普通DNN没有区别。函数有均方、交叉熵等。损失函数的选择取决于具体的问题和网络结构。
三、反向传播过程
反向传播是基于链式法则对网络中的权重进行更新的过程。首先,根据损失函数计算输出误。然后,将输出误从输出层向隐藏层逐层传播,每一层都会计算并累积上一层传递过来的误。
在每个神经元中,根据激活函数的导数和上一层传递过来的误,计算当前神经元对上一层的输入(加权求和结果)的误贡献。,根据计算得到的误贡献,通过梯度下降法更新各个连接权重。
四、权重更新
在反向传播过程中,我们得到了每个连接权重对输出误的贡献。利用这些贡献,可以使用梯度下降法来更新权重。梯度下降法的基本思想是沿着损失函数的梯度方向,不断调整权重以减小误。通过反复迭代的过程,使网络输出的误逐渐减小,最终收敛于解。
五、优化算法
除了基本的梯度下降法,还有一些优化算法可用于改进反向传播的效率和准确性。常见的优化算法有动量法、Adagrad、RMSProp、Adam等。这些优化算法能够更快地收敛到局部点,并且缓解梯度消失或爆炸的问题。
神经网络:损失函数详解总结:
反向传播算法是一种通过计算输出误对网络中各个连接权重的贡献,然后利用梯度下降法来更新权重的算法。
它通过前向传播将输入数据从输入层传递到输出层,然后根据损失函数计算输出误,再通过反向传播将误从输出层逐层传递回隐藏层,并根据计算得到的误贡献更新权重。反向传播算法的核心思想是不断调整权重以最小化输出误。
同时,还可以使用优化算法来改进反向传播的效率和准确性。通过反复迭代和权重更新,网络能够逐渐学习到输入与输出之间的映射关系,从而提高预测或分类的准确性。
深入理解均方误、交叉熵、似然估计
如果对于同一个随机变量 有两个单独的概率分布 和Q(x),可以使用KL散度来衡量着两个分布的异:简单的讲,在深度学习中,我们希望训练之后的模型对输入 的输出 尽可能的和真实标签 接近。
要比较两个值的大小之前的异,最简单想法就是求比值或者求的,如果是比值的话就是越接近于1两个数值越接近,相减求的话,就是越接近于0越接近。
这里的最小化均方误其实就是类似于求值的方法,均方误越小,两个值的距就越小。这很容易想到,所以也容易理解,一般我们学习深度学习,个学的损失函数就是均方误 , 其中 是期望输出, 是实际输出,下面统一使用这个定义。
但是随着学习的深入,我们会发现当使用sigmoid激活输出的时候,可能存在一个训练速度越来越慢的问题。因为我们求损失的偏导,会发现:
当 的值趋近于1或者0时,曲线的会变得十分平缓,也就是偏导会很小,于是梯度下降每次的移动也会很微小,于是就造成了训练难以继续下去。
为了解决这个问题,然后我们引入了交叉熵损失:
观察上面的表达式,涉及 的单项都是负的,而前面又乘了个负数,因此 ,并且,我们可以设某个输入 对应的 是0,而且 ,那么 就会非常小,反之 如果接近1,那么 会变得很大,当然设 是1的时候也能达到这种效果,这些都表明了交叉熵作为损失函数的特性。而它又是怎么解决梯度过小而导致的训练变慢问题的呢?
让我们来计算一下它对于权重 的偏导,并且把 代进去:
而基于sigmoid函数的性质,我们知道 ,带入上面的方程,发现 恰好被抵消了:
完美避免了因为 变小而引起的训练慢的问题,并且,从上面的等式中,我们也可以很容易的看出当误越大时,偏导也会越大,即学的越快,这跟我们人类学习东西的直觉是一致的,发现的错误越大,学到的东西越多~
当然,这个交叉熵并不是凭空想出来的,顾名思义,我们也许会猜出的一二,它应该和信息论有关,说的没错,接下来我们就去信息论那边找找线索。
信息论的基本想法就是:一个不太可能的事情发生了,要比一个非常可能发生的事情发生,提供更多的信息。
比如,有个消息说:“今天早上太阳升起”,信息量是如此之少,以至于不值一提;但是如果另一个消息是:“今天早上会有日食”,这样信息量就丰富了。于是,可以用这一基本思想来量化信息。特别是:
为了满足上述3个性质,我们定义一个 的自信息(self-rmation)为:
其中 是底数位 的自然对数,因此这里 的单位是奈特。
当 是连续的,我们使用类似的关于信息的定义,但有些源于离散形式的性质就丢失了。例如一个具有单位密度的的信息量为0,但是不能保证它一定发生。
自信息值处理单个的输出。我们可以用香农熵(shannon entropy)来对整个概率分布中的不确定性总量进行量化:
换言之,一个分布的香农熵指遵循这个分布的所产生的期望信息总量。
那这些要怎么和前面的损失函数联系起来呢?
回想一下最简单的MNIST手写数字识别的神经网络,输出神经元一共有10个,分别代表0~9,然后我们取了值的那个作为模型的解。于是,简单的类比,我们可以把10个神经元的输出,看成是模型猜测的某个输入样本
它是不是某个数字的概率,而同样的标签也代表了是否是某个数字的概率。这样,我们就有了关于随机变量 的两个的概率分布,一个是模型的,另一个是训练数据本身的,而我们所希望的,就是让模型的概率分布接近于真实的训练数据的概率分布,为了衡量他们之间的异,刚好 散度就用上了。
也就是说要让模型和真实情况最接近,那么就要最小化 KL散度 ,而显然训练数据的分布 是固定的,并不会受到模型参数的影响,于是我们把左边的 消掉,就得到了 交叉熵
最小化交叉熵,就是最小化KL散度,也就是最小化模型和真实之间的距。
正如前面所说的,我们模型的输出 代表了是对应标签(也就是 )的概率,而 就是不是对应标签(也就是 )的概率,于是单个样本的香浓熵 ,然后放到所有的样本上再取平均,就得到了最开始所学的交叉熵损失函数:
而 ,于是
我们让它等于 ,便有了
就是这么奇妙,这也进一步说明了交叉熵可以作为损失函数,并弥补了均方误不足的原因~~~
接下来,我们再来说一下似然估计,个人觉得,似然估计才是我们模型训练的本质。
我们先来介绍一下似然函数( 如果你已经了解似然函数,可以跳过这一块介绍 ),它是一种关于统计模型中的参数的函数,你可以把它理解为条件概率的逆运算。
条件概率对大多数人而言是非常好理解并且自然的,但是它的逆反,往往会让人感觉有些难受,这需要一点时间来习惯这种思维,一旦习惯了,你也会觉得似然函数也是自然而然的。这是初学者常见的困惑,就像很多程序员刚开始接触递归的时候,可能会很难受,很,但是一旦了解它了,就会变得爱不释手,觉得这才是人类该有的思维。总之,我觉得似然函数在机器学习里面至关重要,你需要花一点时间去理解它,先从我们最熟悉的思维入手。
大家都知道概率,是用于在已知一些参数的情况下,预测接下来在观测上所得到的结果;而似然性,恰好相反,用于在已知某些观测所得到的结果时,对有关事物之性质的参数进行估值。而机器学习不正是通过已经观测到的结果即训练数据,来对事物性质的参数进行估计,即得到相应的权重和偏的模型。
在已知某个参数 时, 会发生的概率:
根据贝叶斯定理,有
因此,我们可以反过来构造表示似然性的方法:已知 发生,运用似然函数 ,来估计参数 的可能性。形式上看,似然函数也是一种条件概率函数,只不过我们关注点由概率到结果变成了由结果到概率,
举个最简单的抛硬的例子来更加具象化的理解似然函数(其实是维基上的例子...)
考虑投掷一枚硬的实验。通常来说,已知掷出一枚“公平的硬”(正面朝上和反面朝上的概率都为0.5), 即正面(Head)朝上的概率为 ,便可以知道投掷若干次后出现各种结果的可能性。
比如说,投两次都是正面朝上的概率是0.25。用条件概率表示,就是:
如果一个硬的质量分布不够均匀, 那么它可能是一枚"非公平的硬"
在统计学中,我们关心的是在 已知一系列投掷的结果时,关于硬投掷时正面朝上的可能性的信息 。
我们可以建立一个统计模型:设硬投出时会有 的概率正面朝上,自然会有 的概率反面朝上。
这时,通过观察已经发生的两次投掷,条件概率可以改写成似然函数:
也就是说,如果我们取 的话,似然函数的值就是0.25。不过注意,这个反过来是不成立的,不能根据似然性是0.25反推出
那么,如果我们取 的话,似然函数的值就变成0.36了,emm...而且还是变大了...
这说明,如果参数 取0.6的话,更有希望观察到两次正面朝上的结果,即参数 比 更有说服力,更合理。
总之, 似然函数的重要性不是它的具体取值,而是当参数变化时函数到底变小还是变大。
对同一个似然函数,其所代表的模型中,某项参数值具有多种可能,但如果存在一个参数值,使得它的函数值达到 的话,那么这个值就是该项参数最为“合理”的参数值。这便是我们稍后要重点说的 似然估计 。
在这个例子中,似然函数等于:
显然,如果取 是最能看到两次都为正面的结果的。
接下来,我们要把似然估计用到我们模型的学习中。
考虑到我们有一组真实的样本数据集 ,那么它们应该是的由一个位置的真实数据分布 生成的。而设我们的模型 是由一个由 (也就是一堆权重 和偏 )确定的相同空间上的概率分布,那么对 的最它都和sigmoid函数的导数 有关,再回想一下sigmoid的曲线大似然估计可以写成
多个概率乘积会因为很多原因不方便计算,比如计算的时候会发生数值太小而溢出的情况,于是我们就对其取对数,因为单调性并不会发生改变,所以似然估计就等价于
观察上面的等式,我们发现这个值跟样本数量有关,样本越多值越小,于是我们把它缩放一下,除以样本数量就变成了训练数据经验分布 相关的期望表示
基于直觉(当然也可以证明,证明过程就留给写书的人吧orz...),就是当 和训练集上的经验分布 之间的异最小时,似然函数取得值。而他们之间的异可以通过KL散度来衡量,带入前面KL散度的公式,于是就有了
而经验分布显然是基于训练数据固定的,然后最小化KL散度又变成了最小化两个分布之间的交叉熵,也就是负对数似然...
然后咱从似然估计出发又到最小化交叉熵了~~~真是万变不离其宗呐...其本质可以说都是让模型去拟合训练数据,只是方法有所不同罢了。
实际上,任何一个由负对数似然组成的损失都是定义在训练集上的经验分布和定义在模型上的概率分布之间的交叉熵。例如, 均方误就是经验分布和高斯模型之间的交叉熵 。
什么..原来均方误也是交...交叉熵......
说的没错,要不然让我们来推导一下
实际上,我们只要把上面的 变成一个不知道 的高斯分布函数作为咱的似然函数:
然后还是把化这个函数变成化它的对数,然后分别对 和 求偏导,让其偏导等于0,求出方程的解便是其极值。
这个方程的解是 .这的确是这个函数的值,因为它是 里头惟一的一阶导数等于零的点并且二阶导数严格小于零。
同理,我们对 求导,并使其为零。
这个方程的解是
因此,其关于 的似然估计为:
然后这玩意不就是均方误吗orz....
深度学习之损失函数与激活函数的选择
这个方法很简洁漂亮,仅仅只需要将输出层的激活函数从Sigmoid之类的函数转变为上式的激活函数即可。上式这个激活函数就是我们的softmax激活函数。它在分类问题中有广泛的应用。将DNN用于分类问题,在输出层用softmax激活函数也是最常见的了。深度学习之损失函数与激活函数的选择
然后将上面的式子对 积分,当当当,交叉熵形式的公式出来啦:在深度神经网络(DNN)反向传播算法(BP)中,我们对DNN的前向反向传播算法的使用做了总结。其中使用的损失函数是均方,而激活函数是Sigmoid。实际上DNN可以使用的损失函数和激活函数不少。这些损失函数和激活函数如何选择呢?以下是本文的内容。
MSE损失+Sigmoid激活函数的问题
先来看看均方+Sigmoid的组合有什么问题。回顾下Sigmoid激活函数的表达式为:
函数图像如下:
从图上可以看出,对于Sigmoid,当z的取值越来越大后,函数曲线变得越来越平缓,意味着此时的导数σ′(z)也越来越小。同样的,当z的取值越来越小时,也有这个问题。仅仅在z取值为0附近时,导数σ′(z)的取值较大。在均方+Sigmoid的反向传播算法中,每一层向前递推都要乘以σ′(z),得到梯度变化值。Sigmoid的这个曲线意味着在大多数时候,我们的梯度变化值很小,导致我们的W,b更新到极值的速度较慢,也就是我们的算法收敛速度较慢。那么有什么什么办法可以改进呢?
交叉熵损失+Sigmoid改进收敛速度
Sigmoid的函数特性导致反向传播算法收敛速度慢的问题,那么如何改进呢?换掉Sigmoid?这当然是一种选择。另一种常见的选择是用交叉熵损失函数来代替均方损失函数。每个样本的交叉熵损失函数的形式:
其中,?为向量内积。这个形式其实很熟悉,在逻辑回归原理小结中其实我们就用到了类似的形式,只是当时我们是用似然估计推导出来的,而这个损失函数的学名叫交叉熵。
使用了交叉熵损失函数,就能解决Sigmoid函数导数变化大多数时候反向传播算法慢的问题吗?我们来看看当使用交叉熵时,我们输出层δL的梯度情况。
对比一下均方损失函数时在δL梯度
使用交叉熵,得到的的δl梯度表达式没有了σ′(z),梯度为预测值和真实值的距,这样求得的Wl,bl的梯度也不包含σ′(z),因此避免了反向传播收敛速度慢的问题。通常情况下,如果我们使用了sigmoid激活函数,交叉熵损失函数肯定比均方损失函数好用。
对数似然损失+softmax进行分类输出
在前面我们都设输出是连续可导的值,但是如果是分类问题,那么输出是一个个的类别,那我们怎么用DNN来解决这个问题呢?
DNN分类模型要求是输出层神经元输出的值在0到1之间,同时所有输出值之和为1。很明显,现有的普通DNN是无法满足这个要求的。但是我们只需要对现有的全连接DNN稍作改良,即可用于解决分类问题。在现有的DNN模型中,我们可以将输出层第i个神经元的激活函数定义为如下形式:
对于用于分类的softmax激活函数,对应的损失函数一般都是用对数似然函数,即:
其中yk的取值为0或者1,如果某一训练样本的输出为第i类。则yi=1,其余的j≠i都有yj=0。由于每个样本只属于一个类别,所以这个对数似然函数可以简化为:
可见损失函数只和真实类别对应的输出有关,这样设真实类别是第i类,则其他不属于第i类序号对应的神经元的梯度导数直接为0。对于真实类别第i类,它的WiL对应的梯度计算为:
梯度爆炸or消失与ReLU
学习DNN,大家一定听说过梯度爆炸和梯度消失两个词。尤其是梯度消失,是限制DNN与深度学习的一个关键障碍,目前也没有完全攻克。
什么是梯度爆炸和梯度消失呢?简单理解,就是在反向传播的算法过程中,由于我们使用了是矩阵求导的链式法则,有一大串连乘,如果连乘的数字在每层都是小于1的,则梯度越往前乘越小,导致梯度消失,而如果连乘的数字在每层都是大于1的,则梯度越往前乘越大,导致梯度爆炸。
比如如下的梯度计算:
如果不巧我们的样本导致每一层的梯度都小于1,则随着反向传播算法的进行,我们的δl会随着层数越来越小,甚至接近越0,导致梯度几乎消失,进而导致前面的隐藏层的W,b参数随着迭代的进行,几乎没有大的改变,更谈不上收敛了。这个问题目前没有完美的解决办法。
而对于梯度爆炸,则一般可以通过调整我们DNN模型中的初始化参数得以解决。
对于无法完美解决的梯度消失问题,一个可能部分解决梯度消失问题的办法是使用ReLU(Rectified Linear Unit)激活函数,ReLU在卷积神经网络中得到了广泛的应用,在中梯度消失似乎不再是问题。那么它是什么样子呢?其实很简单,比我们前面提到的所有激活函数都简单,表达式为:
也就是说大于等于0则不变,小于0则激活后为0。
其他激活函数
DNN常用的激活函数还有:
tanh
这个是sigmoid的变种,表达式为:
tanh激活函数和sigmoid激活函数的关系为:
tanh和sigmoid对比主要的特点是它的输出落在了[-1,1],这样输出可以进行标准化。同时tanh的曲线在较大时变得平坦的幅度没有sigmoid那么大,这样求梯度变化值有一些优势。当然,要说tanh一定比sigmoid好倒不一定,还是要具体问题具体分析。
softplus
这个其实就是sigmoid函数的原函数,表达式为:
它的导数就是sigmoid函数。softplus的函数图像和ReLU有些类似。它出现的比ReLU早,可以视为ReLU的鼻祖。
PReLU
从名字就可以看出它是ReLU的变种,特点是如果未激活值小于0,不是简单粗暴的直接变为0,而是进行一定幅度的缩小。如下图。
上面我们对DNN损失函数和激活函数做了详细的讨论,重要的点有:
1)如果使用sigmoid激活函数,则交叉熵损失函数一般肯定比均方损失函数好;
2)如果是DNN用于分类,则一般在输出层使用softmax激活函数和对数似然损失函数;
3)ReLU激活函数对梯度消失问题有一定程度的解决,尤其是在模型中。
交叉熵损失函数和focal loss
既然是 引起的训练速度慢,那么我们就想办法把它消掉。根据链式法则,于是有交叉熵是信息论中的一个重要概念,主要用于度量两个概率分布间的异性。是分类问题中经常使用的一种损失函数。
一般使用交叉熵作为损失函数时,在模型的输出层总会接一个softmax函数(用来获得结果分布)。
交叉熵公式:
用来衡量真实概率分布 和预测标签分布 之间的异;
要了解交叉熵就需要先了解下述概念:
信息熵:“信息是用来 消除 随机 不确定性 的东西”,也就是说衡量信息量的大小就是看这个信息消除不确定性的程度。
信息量的大小与信息发生的概率成反比 。概率越大,信息量越小。概率越小,信息量越大。 例如: ”2018年队成功进入世界杯“ ,从直觉上来看,这句话具有很大的信息量。因为队进入世界杯的不确定性因素很大,发生的概率很小;
设某一发生的概率为P(x),其信息量表示为:
所以信息量的熵可表示为:(这里的X X X 是一个离散型随机变量)
如果对于同一个随机变量 有两个单独的概率分布 和 ,则我们可以使用KL散度来衡量这两个概率分布之间的异。
直接上公式
KL散度越小,表示 和 的分布更加接近。
比如在一个三分类任务中(例如,猫狗马分类器), 分注意到这里并不要求似然函数满足归一性,一个似然函数乘以一个正的常数之后仍然是似然函数。对所有 都可以有似然函数:别代表猫,狗,马。
例如一张猫的真实分布 和 ,计算KL散度:
前者 表示信息熵,后者即为交叉熵, KL散度 = 交叉熵 - 信息熵
交叉熵公式为:
交叉熵等于KL散度加上一个常量(信息熵),且公式相比KL散度更加容易计算,所以在机器学习中常常使用交叉熵损失函数来计算loss就行了。
本文的作者认为, 易分样本(即,置信度高的样本)对模型的提升效果非常小,模型应该主要关注与那些难分样本 。一个简单的思想: 把高置信度(p)样本的损失再降低一些不就好了吗!
focal loss函数公式:
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。