交叉熵损失函数也称为对数损失或者logistic损失。
当模型产生了预测值之后,将对类别的预测概率与真实值(由0或1组成)进行不比较,计算所产生的损失,然后基于此损失设置对数形式的惩罚项。
在神经网络中,所使用的Softmax函数是连续可导函数,这使得可以计算出损失函数相对于神经网络中每个权重的导数(在《机器学习数学基础》中有对此的完整推导过程和案例,这样就可以相应地调整模型的权重以最小化损失函数。
交叉熵的计算方式如下:
交叉熵可在机器学习中作为损失函数,p代表真实标记的分布,q则代表训练后的模型的预测标记分布,交叉熵损失函数可以衡量p与q的相似性。
交叉熵作为损失函数还有一个好处是:使用sigmoid函数在梯度下降时,可以避免均方误差损失函数学习速率下降的问题,这是因为学习速率是能够被输出的误差所控制的。
1、自信息
定义:由克劳德·香农提出,是与概率空间中的单一事件或离散随机变量的值相关的信息量的量度。用信息的单位表示,例如bit(以2为底)、nat(以e为底)或者hart(以10为底),使用哪个单位取决于在计算中使用的对数的底。(信息的编码长度)
假设一个随机变量X取值为x的几率为p(x),则它的自信息公式为:[上传失败(image-3c2241-1527671842491)]&space;=&space;log&space;(\frac{1}{P(x)}))
特性:可加性
2、熵
定义:在信息论中,熵(entropy)是接收的每条消息中包含的信息的平均量。
假设随机变量X值域为{x1, , xn},该随机变量X的熵值定义如下:[上传失败(image-da1d21-1527671842491)]&space;=&space;\mathrm{E}[\mathrm{I}(X)]&space;=&space;\mathrm{E}[-\ln(\mathrm{P}(X))])
其中,P为X的概率质量函数,E为期望函数,I(X)为X的自信息。当取自有限的样本时,熵的计算公式为:[上传失败(image-26338d-1527671842491)]=\sum&space; {{i}}{{\mathrm&space;{P}}(x {i}),{\mathrm&space;{I}}(x_{i})}=-\sum&space; {{i}}{{\mathrm&space;{P}}(x {i})\log&space; {b}{\mathrm&space;{P}}(x {i})})
熵的特性:连续性、对称性、极值性和可加性
3、条件熵
定义:描述了在已知第二个随机变量X的值的前提下,随机变量Y的信息熵还有多少。
条件熵的贝叶斯规则:H(Y|X) = H(X|Y) - H(X) + H(Y)
4、互信息
5、联合熵
定义:是一集变量之间不确定性的衡量手段
两个变量X和Y的联合信息熵公式为:[上传失败(image-1afda5-1527671842491)]=-\sum&space; {{x}}\sum&space; {{y}}P(x,y)\log&space; {2}[P(x,y)]!)
对于两个以上的变量X1,X2, , Xn,该式的一般形式为:[上传失败(image-527b62-1527671842491)]=-\sum&space; {{x_{1}}}\sum&space; {{x {n}}}P(x_{1},,x_{n})\log&space; {2}[P(x {1},,x_{n})]!)
特点:大于每个独立的熵;少于独立熵的和
与条件熵的关系:[上传失败(image-fd5c0a-1527671842491)]=\mathrm{H}&space;(X,Y)-\mathrm{H}&space;(Y),)
与互信息的关系:[上传失败(image-5003ba-1527671842491)]=\mathrm{H}&space;(X)+\mathrm{H}&space;(Y)-\mathrm{H}&space;(X,Y),)
6、相对熵(KL散度,KL距离,Kullback–Leibler divergence)
定义:是两个概率分布P和Q差别的非对称性度量。是用来度量使用基于Q的编码来编码来自P的样本平均所需的额外位元数(额外所需的编码长度)。典型情况下,P表示数据的真实分布,Q表示数据的理论分布,模型分布或者P的近似分布。
7、交叉熵:
定义:基于相同时间测度的两个概率分布P和Q的交叉熵是指,当基于一个“非自然”(相对于“真实分布”P而言)的概率分布Q进行编码时,在时间集合中唯一标识一个事件所需要的平均比特数(使用非真实分布Q所指定的策略消除系统不确定性所需要付出的努力大小)。
基于概率分布P和Q的交叉熵定义为:
8、代价函数:交叉熵
KL散度可以用来估计模型分布和训练数据分布的差异,我们假设训练数据分布和真实分布一致,则通过最小化KL散度可以使得模型分布于训练分布尽可能近似,同时也与真实数据尽可能相似。训练数据的分布是已知的,所以训练数据的熵也是已知,那么最小化KL散度等价于最小化交叉熵,所以通过最小化交叉熵可以训练模型。
9、朴素贝叶斯中的应用
10、神经网络中的应用
在了解交叉熵之前我们需要关于熵的一些基本知识,可以参考我的上一篇 博客 [1] 。
信息熵的定义为离散随机事件的出现概率 [2] 。当一个事件出现的概率更高的时候,我们认为该事件会传播的更广,因此可以使用信息熵来衡量信息的价值。
当一个信源具有多种不同的结果,记为:U1,U2,,Un,每个事件相互独立,对应的概率记为:P1,P2,,Pn。信息熵为各个事件方式概率的期望,公式为:
对于二分类问题,当一种事件发生的概率为p时,另一种事件发生的概率就为(1-p),因此,对于二分类问题的信息熵计算公式为:
相对熵(relative entropy),又被称为Kullback-Leibler散度(Kullback-leibler divergence),是两个概率分布间差异的一种度量 [3] 。在信息论中,相对熵等于两个概率分布的信息熵的差值。
相对熵的计算公式为:
其中 代表事件的真实概率, 代表事件的预测概率。例如三分类问题的标签为 ,预测标签为 。
因此该公式的字面上含义就是真实事件的信息熵与理论拟合的事件的香农信息量与真实事件的概率的乘积的差的累加。[4]
当p(x)和q(x)相等时相对熵为0,其它情况下大于0。证明如下:
KL散度在 Pytorch 中的使用方法为:
在使用过程中, reduction 一般设置为 batchmean 这样才符合数学公式而不是 mean ,在以后的版本中 mean 会被替换掉。
此外,还要注意 log_target 参数,因为在计算的过程中我们往往使用的是log softmax函数而不是softmax函数来避免underflow和overflow问题,因此我们要提前了解target是否经过了log运算。
torchnnKLDivLoss() 会传入两个参数 (input, target) , input 是模型的预测输出, target 是样本的观测标签。
下面我们用一个例子来看看 torchnnKLDivLoss() 是如何使用的:
输出结果如下:
相对熵可以写成如下形式:
等式的前一项为真实事件的熵,后一部分为 交叉熵 [4] :
在机器学习中,使用KL散度就可以评价真实标签与预测标签间的差异,但由于KL散度的第一项是个定值,故在优化过程中只关注交叉熵就可以了。一般大多数机器学习算法会选择交叉熵作为损失函数。
交叉熵在pytorch中可以调用如下函数实现:
其计算方法如下所示 [5] :
假设batch size为4,待分类标签有3个,隐藏层的输出为:
经过 softmax 激活函数之后得到预测值:
softmax函数的输出结果每一行相加为1。
假设这一个mini batch的标签为
根据交叉熵的公式:
代表真实标签,在真实标签中,除了对应类别其它类别的概率都为0,实际上,交叉熵可以简写为:
所以该mini batch的loss的计算公式为(别忘了除以batch size,我们最后求得的是mini batch的平均loss):
因此,我们还需要计算一次对数:
计算结果为:
根据交叉熵的计算公式,loss的最终计算等式为:
运算结果和pytorch内置的交叉熵函数相同:
结果为:
除了 torchnnCrosEntropyLoss() 函数外还有一个计算交叉熵的函数 torchnnBCELoss() 。与前者不同,该函数是用来计算二项分布(0-1分布)的交叉熵,因此输出层只有一个神经元(只能输出0或者1)。其公式为:
在pytorch中的函数为:
用一个实例来看看如何使用该函数:
输出结果为:
它是如何计算的呢,我们接下来一步步分析:
首先输入是:
需要经过 sigmoid 函数得到一个输出
输出结果为:
然后我们根据二项分布交叉熵的公式:
得到 loss 的如下计算公式:
和pytorch的内置函数计算结果相同。
另外,需要注意的是, 当使用交叉熵作为损失函数的时候,标签不能为onehot形式,只能是一维的向量 ,例如,当batch size是5时,这一个batch的标签只能时[0,1,4,2,6]这样的形式。
机器学习:machinelearning,是计算机科学和统计学的交叉学科,基本目标是学习一个x->y的函数(映射),来做分类或者回归的工作。之所以经常和数据挖掘合在一起讲是因为现在好多数据挖掘的工作是通过机器学习提供的算法工具实现的,例如广告的c。
交叉熵是信息论中的一个重要概念,主要用于度量两个概率分布间的差异性。是分类问题中经常使用的一种损失函数。
一般使用交叉熵作为损失函数时,在模型的输出层总会接一个softmax函数(用来获得结果分布)。
交叉熵公式:
用来衡量真实概率分布 和预测标签分布 之间的差异;
要了解交叉熵就需要先了解下述概念:
信息熵:“信息是用来 消除 随机 不确定性 的东西”,也就是说衡量信息量的大小就是看这个信息消除不确定性的程度。
信息量的大小与信息发生的概率成反比 。概率越大,信息量越小。概率越小,信息量越大。 例如: ”2018年中国队成功进入世界杯“ ,从直觉上来看,这句话具有很大的信息量。因为中国队进入世界杯的不确定性因素很大,发生的概率很小;
设某一事件发生的概率为P(x),其信息量表示为:
信息熵也被称为熵,用来表示所有信息量的期望;
期望是试验中每次可能结果的概率乘以其结果的总和。
所以信息量的熵可表示为:(这里的X X X 是一个离散型随机变量)
如果对于同一个随机变量 有两个单独的概率分布 和 ,则我们可以使用KL散度来衡量这两个概率分布之间的差异。
直接上公式
KL散度越小,表示 和 的分布更加接近。
比如在一个三分类任务中(例如,猫狗马分类器), 分别代表猫,狗,马。
例如一张猫的真实分布 和 ,计算KL散度:
前者 表示信息熵,后者即为交叉熵, KL散度 = 交叉熵 - 信息熵
交叉熵公式为:
交叉熵等于KL散度加上一个常量(信息熵),且公式相比KL散度更加容易计算,所以在机器学习中常常使用交叉熵损失函数来计算loss就行了。
Focal Loss的引入主要是为了解决难易样本数量不平衡(注意,有区别于正负样本数量不平衡)的问题,实际可以使用的范围非常广泛。
本文的作者认为, 易分样本(即,置信度高的样本)对模型的提升效果非常小,模型应该主要关注与那些难分样本 。一个简单的思想: 把高置信度(p)样本的损失再降低一些不就好了吗!
focal loss函数公式:
其中, 为类别权重,用来权衡正负样本不均衡问题; 表示难分样本权重,用来衡量难分样本和易分样本;
机器学习模型关于单个样本的预测值与真实值的差称为损失。损失越小,模型越好,如果预测值与真实值相等,就是没有损失。
损失函数(Loss function)是用来估量模型的预测值 f(x) 与真实值 Y 的不一致程度,它是一个非负实值函数,通常用 L(Y,f(x)) 来表示。损失函数越小,模型的鲁棒性就越好。
虽然损失函数可以让我们看到模型的优劣,并且为我们提供了优化的方向,但是我们必须知道没有任何一种损失函数适用于所有的模型。损失函数的选取依赖于参数的数量、异常值、机器学习算法、梯度下降的效率、导数求取的难易和预测的置信度等若干方面。
由于机器学习的任务不同,损失函数一般分为分类和回归两类,回归会预测出一个数值结果,分类则会给出一个标签。
0-1损失是指,预测值和目标值不相等为1,否则为0:
感知机就是用的这种损失函数。但是由于相等这个条件太过严格,因此我们可以放宽条件,即满足 |Y−f(X)|<T时认为相等。
逻辑回归的损失函数就是对数损失函数,在逻辑回归的推导中,它假设样本服从伯努利分布(0-1)分布,然后求得满足该分布的似然函数,接着用对数求极值。逻辑回归并没有求对数似然函数的最大值,而是把极大化当做一个思想,进而推导它的风险函数为最小化的负的似然函数。从损失函数的角度上,它就成为了对数损失函数。
损失函数的标准形式:
在极大似然估计中,通常都是先取对数再求导,再找极值点,这样做是方便计算极大似然估计。损失函数L(Y,P(Y|X))是指样本X在分类Y的情况下,使概率P(Y|X)达到最大值(利用已知的样本分布,找到最大概率导致这种分布的参数值)
最小二乘法是线性回归的一种方法,它将回归的问题转化为了凸优化的问题。最小二乘法的基本原则是:最优拟合曲线应该使得所有点到回归直线的距离和最小。通常用欧几里得距离进行距离的度量。平方损失的损失函数为:
AdaBoost就是以指数损失函数为损失函数的。
指数损失函数的标准形式:
Hinge损失函数用于最大间隔(maximum-margin)分类,其中最有代表性的就是支持向量机SVM。
Hinge函数的标准形式:
其中,t为目标值(-1或+1),y是分类器输出的预测值,并不直接是类标签。其含义为,当t和y的符号相同时(表示y预测正确)并且|y|≥1时,hinge loss为0;当t和y的符号相反时,Hinge损失函数随着y的增大线性增大。
在支持向量机中,最初的SVM优化的函数如下:
将约束项进行变形,则为:
则损失函数可以进一步写为:
因此,SVM的损失函数可以看做是L2正则化与Hinge loss之和。
平均绝对误差(MAE)是一种常用的回归损失函数,它是目标值与预测值之差绝对值的和,表示了预测值的平均误差幅度,而不需要考虑误差的方向(注:平均偏差误差MBE则是考虑的方向的误差,是残差的和),范围是0到∞,其公式如下所示:
均方误差(MSE)是回归损失函数中最常用的误差,它是预测值与目标值之间差值的平方和,其公式如下所示:
下图是均方根误差值的曲线分布,其中最小值为预测值为目标值的位置。我们可以看到随着误差的增加损失函数增加的更为迅猛。
Huber损失相比于平方损失来说对于异常值不敏感,但它同样保持了可微的特性。它基于绝对误差但在误差很小的时候变成了平方误差。我们可以使用超参数δ来调节这一误差的阈值。当δ趋向于0时它就退化成了MAE,而当δ趋向于无穷时则退化为了MSE,其表达式如下,是一个连续可微的分段函数:
对于Huber损失来说,δ的选择十分重要,它决定了模型处理异常值的行为。当残差大于δ时使用L1损失,很小时则使用更为合适的L2损失来进行优化。
Huber损失函数克服了MAE和MSE的缺点,不仅可以保持损失函数具有连续的导数,同时可以利用MSE梯度随误差减小的特性来得到更精确的最小值,也对异常值具有更好的鲁棒性。而Huber损失函数的良好表现得益于精心训练的超参数δ。
Log-Cosh损失函数是一种比L2更为平滑的损失函数,利用双曲余弦来计算预测误差:
它的优点在于对于很小的误差来说log(cosh(x))与(x2)/2很相近,而对于很大的误差则与abs(x)-log2很相近。这意味着log cosh损失函数可以在拥有MSE优点的同时也不会受到异常值的太多影响。它拥有Huber的所有优点,并且在每一个点都是二次可导的。二次可导在很多机器学习模型中是十分必要的,例如使用牛顿法的XGBoost优化模型(Hessian矩阵)。
在大多数真实世界的预测问题中,我们常常希望看到我们预测结果的不确定性。通过预测出一个取值区间而不是一个个具体的取值点,这对于具体业务流程中的决策至关重要。
分位数损失函数在我们需要预测结果的取值区间时是一个特别有用的工具。通常情况下我们利用最小二乘回归来预测取值区间主要基于这样的假设:取值残差的方差是常数。但很多时候对于线性模型是不满足的。这时候就需要分位数损失函数和分位数回归来拯救回归模型了。它对于预测的区间十分敏感,即使在非均匀分布的残差下也能保持良好的性能。下面让我们用两个例子看看分位数损失在异方差数据下的回归表现。
上图是两种不同的数据分布,其中左图是残差的方差为常数的情况,而右图则是残差的方差变化的情况。我们利用正常的最小二乘对上述两种情况进行了估计,其中橙色线为建模的结果。但是我们却无法得到取值的区间范围,这时候就需要分位数损失函数来提供。
上图中上下两条虚线基于005和095的分位数损失得到的取值区间,从图中可以清晰地看到建模后预测值得取值范围。
分位数回归的目标在于估计给定预测值的条件分位数。实际上分位数回归就是平均绝对误差的一种拓展。分位数值得选择在于我们是否希望让正的或者负的误差发挥更大的价值。损失函数会基于分位数γ对过拟合和欠拟合的施加不同的惩罚。例如选取γ为025时意味着将要惩罚更多的过拟合而尽量保持稍小于中值的预测值。
γ的取值通常在0-1之间,图中描述了不同分位数下的损失函数情况,明显可以看到对于正负误差不平衡的状态。
参考文章:
https://wwwjianshucom/p/b715888f079b
http://baijiahaobaiducom/sid=1603857666277651546&wfr=spider&for=pc
https://blogcsdnnet/weixin_37933986/article/details/68488339
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)