交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式。与二次代价函数相比,它能更有效地促进ANN的训练。在介绍交叉熵代价函数之前,本文先简要介绍二次代价函数,以及其存在的不足。
ANN的设计目的之一是为了使机器可以像人一样学习知识。人在学习分析新事物时,当发现自己犯的错误越大时,改正的力度就越大。比如投篮:当运动员发现自己的投篮方向离正确方向越远,那么他调整的投篮角度就应该越大,篮球就更容易投进篮筐。同理,我们希望:ANN在训练时,如果预测值与实际值的误差越大,那么在反向传播训练的过程中,各种参数调整的幅度就要更大,从而使训练更快收敛。然而,如果使用二次代价函数训练ANN,看到的实际效果是,如果误差越大,参数调整的幅度可能更小,训练更缓慢。
以一个神经元的二类分类训练为例,进行两次实验(ANN常用的激活函数为sigmoid函数,该实验也采用该函数):输入一个相同的样本数据x=10(该样本对应的实际分类y=0);两次实验各自随机初始化参数,从而在各自的第一次前向传播后得到不同的输出值,形成不同的代价(误差):
实验1:第一次输出值为082
实验2:第一次输出值为098
在实验1中,随机初始化参数,使得第一次输出值为082(该样本对应的实际值为0);经过300次迭代训练后,输出值由082降到009,逼近实际值。而在实验2中,第一次输出值为098,同样经过300迭代训练,输出值只降到了020。
从两次实验的代价曲线中可以看出:实验1的代价随着训练次数增加而快速降低,但实验2的代价在一开始下降得非常缓慢;直观上看,初始的误差越大,收敛得越缓慢。
其实,误差大导致训练缓慢的原因在于使用了二次代价函数。二次代价函数的公式如下:
如图所示,实验2的初始输出值(098)对应的梯度明显小于实验1的输出值(082),因此实验2的参数梯度下降得比实验1慢。这就是初始的代价(误差)越大,导致训练越慢的原因。与我们的期望不符,即:不能像人一样,错误越大,改正的幅度越大,从而学习得越快。
可能有人会说,那就选择一个梯度不变化或变化不明显的激活函数不就解决问题了吗?图样图森破,那样虽然简单粗暴地解决了这个问题,但可能会引起其他更多更麻烦的问题。而且,类似sigmoid这样的函数(比如tanh函数)有很多优点,非常适合用来做激活函数,具体请自行google之
说起交叉熵损失函数「Cross Entropy Loss」,脑海中立马浮现出它的公式:
我们已经对这个交叉熵函数非常熟悉,大多数情况下都是直接拿来使用就好。但是它是怎么来的?为什么它能表征真实样本标签和预测概率之间的差值?上面的交叉熵函数是否有其它变种?也许很多朋友还不是很清楚!没关系,接下来我将尽可能以最通俗的语言回答上面这几个问题。
我们知道,在二分类问题模型:例如逻辑回归「Logistic Regression」、神经网络「Neural Network」等,真实样本的标签为 [0,1],分别表示负类和正类。模型的最后通常会经过一个 Sigmoid 函数,输出一个概率值,这个概率值反映了预测为正类的可能性:概率越大,可能性越大。
Sigmoid 函数的表达式和图形如下所示:
其中 s 是模型上一层的输出,Sigmoid 函数有这样的特点:s = 0 时,g(s) = 05;s >> 0 时, g ≈ 1,s << 0 时,g ≈ 0。显然,g(s) 将前一级的线性输出映射到 [0,1] 之间的数值概率上。这里的 g(s) 就是交叉熵公式中的模型预测输出 。
我们说了,预测输出即 Sigmoid 函数的输出表征了当前样本标签为 1 的概率:
很明显,当前样本标签为 0 的概率就可以表达成:
重点来了,如果我们从极大似然性的角度出发,把上面两种情况整合到一起:
也即,当真实样本标签 y = 0 时,上面式子第一项就为 1,概率等式转化为:
当真实样本标签 y = 1 时,上面式子第二项就为 1,概率等式转化为:
两种情况下概率表达式跟之前的完全一致,只不过我们把两种情况整合在一起了。重点看一下整合之后的概率表达式,我们希望的是概率 P(y|x) 越大越好。首先,我们对 P(y|x) 引入 log 函数,因为 log 运算并不会影响函数本身的单调性。则有:
我们希望 log P(y|x) 越大越好,反过来,只要 log P(y|x) 的负值 -log P(y|x) 越小就行了。那我们就可以引入损失函数,且令 Loss = -log P(y|x)即可。则得到损失函数为:
非常简单,我们已经推导出了单个样本的损失函数,是如果是计算 N 个样本的总的损失函数,只要将 N 个 Loss 叠加起来就可以了:
这样,我们已经完整地实现了交叉熵损失函数的推导过程。
可能会有读者说,我已经知道了交叉熵损失函数的推导过程。但是能不能从更直观的角度去理解这个表达式呢?而不是仅仅记住这个公式。好问题!接下来,我们从图形的角度,分析交叉熵函数,加深大家的理解。
首先,还是写出单个样本的交叉熵损失函数:
我们知道,当 y = 1 时:
这时候,L 与预测输出的关系如下图所示:
看了 L 的图形,简单明了!横坐标是预测输出,纵坐标是交叉熵损失函数 L。显然,预测输出越接近真实样本标签 1,损失函数 L 越小;预测输出越接近 0,L 越大。因此,函数的变化趋势完全符合实际需要的情况。当 y = 0 时:
这时候,L 与预测输出的关系如下图所示:
同样,预测输出越接近真实样本标签 0,损失函数 L 越小;预测函数越接近 1,L 越大。函数的变化趋势也完全符合实际需要的情况。
从上面两种图,可以帮助我们对交叉熵损失函数有更直观的理解。无论真实样本标签 y 是 0 还是 1,L 都表征了预测输出与 y 的差距。
另外,重点提一点的是,从图形中我们可以发现:预测输出与 y 差得越多,L 的值越大,也就是说对当前模型的 “ 惩罚 ” 越大,而且是非线性增大,是一种类似指数增长的级别。这是由 log 函数本身的特性所决定的。这样的好处是模型会倾向于让预测输出更接近真实样本标签 y。
什么?交叉熵损失函数还有其它形式?没错!我刚才介绍的是一个典型的形式。接下来我将从另一个角度推导新的交叉熵损失函数。
这种形式下假设真实样本的标签为 +1 和 -1,分别表示正类和负类。有个已知的知识点是Sigmoid 函数具有如下性质:
这个性质我们先放在这,待会有用。
好了,我们之前说了 y = +1 时,下列等式成立:
如果 y = -1 时,并引入 Sigmoid 函数的性质,下列等式成立:
重点来了,因为 y 取值为 +1 或 -1,可以把 y 值带入,将上面两个式子整合到一起:
接下来,同样引入 log 函数,得到:
要让概率最大,反过来,只要其负数最小即可。那么就可以定义相应的损失函数为:
还记得 Sigmoid 函数的表达式吧?将 g(ys) 带入:
好咯,L 就是我要推导的交叉熵损失函数。如果是 N 个样本,其交叉熵损失函数为:
接下来,我们从图形化直观角度来看。当 y = +1 时:
这时候,L 与上一层得分函数 s 的关系如下图所示:
横坐标是 s,纵坐标是 L。显然,s 越接近真实样本标签 1,损失函数 L 越小;s 越接近 -1,L 越大。另一方面,当 y = -1 时:
这时候,L 与上一层得分函数 s 的关系如下图所示:
同样,s 越接近真实样本标签 -1,损失函数 L 越小;s 越接近 +1,L 越大。
本文主要介绍了交叉熵损失函数的数学原理和推导过程,也从不同角度介绍了交叉熵损失函数的两种形式。第一种形式在实际应用中更加常见,例如神经网络等复杂模型;第二种多用于简单的逻辑回归模型。
现代机器学习的终极问题都会转化为解目标函数的优化问题,MLE和MAP是生成这个函数的很基本的思想,因此我们对二者的认知是非常重要的。最近有时间, 我查了些资料, 加深了一下对这俩的理解
再次读到统计学习方法[1]第一章, 终于开始理解13节的内容 统计学习方法都是由模型, 策略和算法构成的
(1)模型: 这里的模型, 其实指的是要学习的条件概率分布(例如逻辑斯蒂分布, 正态分布)或者决策函数 所有模型的集合就是统计学习的模型假设空间
(2)策略: 有了模型的假设空间后, 策略指的就是按照什么样的准则学习或者选择最优的模型, 学习的目标在于从假设空间中选择最优模型
监督学习问题是在假设空间中选择模型f作为决策函数, 对于给定的输入X, 预测值f(X)对应的真实值Y, 用损失函数来定义这个输出与真实值之间的偏差程度, 计做L(Y, f(X)) 常用的损失函数: 0-1, 平方, 绝对损失, 合页损失, 对数损失 对于所有的样本, 损失函数得到的所有偏差值的均值是该损失函数的期望值, 成为风险函数或者是期望损失
所以, 学习的目标是使得这个风险最小化 而关于这个风险最小化, 就有了两个不同的策略, 分别是经验风险最小化(ERM)以及结构风险最小化(SRM)
经验风险最小化的目标是, 经验风险最小的模型是最优的, 也就是说, 预测值越近似于样本的模型是最优的, 当样本足够多, 包含的信息足够多的时候, 经验风险最小化有很好的学习效果, 但是样本容量小的时候, 容易过拟合
结构风险最小化的目标是为了防止过拟合, 通常在经验风险的基础上加上正则化项或者惩罚项
今天本文的主角, 最大似然估计(MLE)与最大后验概率估计(MAP)分别是经验风险最小化与结构风险最小化典型栗子
(3)算法, 如何基于样本进行训练, 如何求解全局最优并简单高效等等
我们认为, 概率模型的学习过程, 其实就是给定模型的条件下的参数估计过程, 长久以来, 统计学界的两个学派分别提出了各自的解决方案
频率学派认为, 参数虽然未知, 但是却是客观存在的固定值, 因此可以通过优化似然函数等方法来确定参数值, 这种方法在样本多的时候很吊
贝叶斯派认为, 参数是没有观测到的随机变量, 它自身也有分布, 可以假定参数服从一个先验分布, 然后基于样本来计算后验分布, 最后通过后验概率的最大化来确定参数自身的分布, 这个方法在先验分布准确的时候效果非常显著, 但是样本增多的时候, 效果就逐渐变差了
比较认同 这篇 的说法:
最大似然估计(Max Likelihood Estimation, MLE)最常见的推导过程如下:
之所以放这个推导过程, 是因为这里他的推导非常干净利落, 简单粗暴最后这一行所优化的函数被称为Negative Log Likelihood (NLL)
此外, 在深度学习任务中, 交叉熵损失函数(cross entropy loss), 本质上也是MLE平时常见的模型中, 使用MLE作为学习策略的包括:
LR,决策树,EMM,CRF。。。。
这里,我们通过最大似然估计去推导LR的参数估计过程。
首先我们定义一下似然函数,对于每一条样本,其预测正确的概率为:
这里对于每一条样本,符合伯努利实验的假设,上述似然函数可以简化为:
综合所有的样本:
得到对数似然概率:
因此,最大似然概率也就是:
等价于:
这里的似然函数是一个凸函数(证明过程待补充),可以使用梯度下降法进行优化,接下来就是求以下导数:
求导之前,我们稍微改写以下逻辑斯谛分布, 加上偏置项:
这里省略推导过程,给出结果:
当然,LR的推导也可以走常见的定义损失函数再求导的过程,得到的答案应该是一致的。
首先回顾一下概率论的两个概念,贝叶斯公式与全概率公式
那什么是先验概率与后验概率?
简单地说。先验概率是由采样观测来的各类别的概率分布。
后验概率是在观测的基础上关于参数的概率分布, 通俗地说是,在事情已经发生的基础上,某个条件的概率。计做
依然上面MLE推导过程的老哥的推导过程:
推导过程中第二步到第三步用的是上面的贝叶斯公式进行转换。
从优化公式可以看出来,最后的结果中,包含对数似然函数, 因此,最大后验概率估计的方法通常与最大似然估计一起使用。例如在朴素贝叶斯,隐马尔科夫模型,EM算法中,都同时包含MLE与MAP。
由于自己蠢,没早点找到写markdown的设置,白瞎了在网页上敲了半天的latex,以后再补上MAP的实例推导。
不平衡损失时间是指生产线上因为工序之间的不平衡而导致的无用时间,包括等待时间、空闲时间、过度生产时间和返工时间等。这些时间会对生产效率和生产成本产生负面影响,因此需要采取措施来降低不平衡损失时间。具体措施包括优化生产工艺流程、实施精益生产、提高设备自动化程度、减少设备故障率,同时加强生产计划和调度,优化生产线的各个环节,提高生产线的整体效率和稳定性。通过这些措施的实施,可以降低不平衡损失时间,提高生产效率和降低生产成本。
1数据没有进行归一化 *** 作,或者归一化的“量不够”
2输入的数据分布过于离散,没有进行预处理
3输出的结果没有核查,有相同的输出
4网络结构中的激活函数的问题,可以替换激活函数我
5在网络结构中,批次训练的时候使用了较大的Batch Size
6网络的学习率不符合实际的运用,可尝试更改网络的学习率
7网络结构中,梯度运算过程中出现了过大或过小的值
8网络结构中隐含层的层数以及神经元的数量不符合实际运用。
9网络结构中,权重在开始训练的时候是不符合实际的,没有初始化
10网络结构过于复杂,而自己的问题比较简单,计算冗余太多
11网络结构中缺乏正则化过程
机器学习三要素:模型,策略与算法
模型、策略、算法可以总结为机器学习方法的提纲挈领。
模型
模型的确定主要明确自定义的预测函数长什么样子,存在两种形式P(Y|X)和y=f(x),而由于在这两个公式中必不可少的存在未知参数ceta,而且一定不止一个,因此在ceta不确定的情况下,公式均表现为各类的集合。由此,我们求解出公式中的未知参数确定下来最后的公式,并用该公式进行预测。
策略
在明确模型的样式后,我们就需要利用已知的数据对未知参数探索,我们该如何进行呢?首先我们知道,无论是训练数据还是测试数据,最终都希望通过公式能预测到和真实情况一样的结果,事实上肯定是可能一模一样的,也就会一定存在误差,我们可称为损失,那么就引入损失函数,利用损失最小来求未知参数。
常见损失函数:
0-1损失函数
平方损失函数
绝对损失函数
对数损失函数
对数似然损失函数
算法
对于求解最小值,未知参数求一阶导数并令导数试等于0。
机器学习中常用的算法有以下两种:
最小二乘法:针对线性模型!
梯度下降、上升法(批梯度、增量梯度):针对任意模!
根据本文一作在知乎上的 回答 ,本文的一大亮点是提出了通用对加权框架,基于该框架可以对市面上常见的Loss进行分析,提取出其关于对相似度的加权求和形式,以更加深入的理解不同类型的Loss的本质所在。
深度度量学习的一大分支是基于对(pair-wise)的度量学习,它们的损失函数通过嵌入空间中的对余弦相似度来进行计算表达(比如说对比损失,三元组损失,三元组-中心损失,四元组损失,提升结构损失,N对损失,二项偏差损失,直方图损失,三角损失,基于距离加权余量损失,层次三元组损失等)。该领域中的方法需要将单个的样本进行构建使其形成对、三元组或四元组的形式。在这种情况下,训练样本数量会被冗余对淹没,导致收敛速度减慢,模型退化。因此,在深度度量学习中,提升采样策略的效果至关重要。
在本文中,作者将度量学习中的采样问题定义为一个统一的加权视角,提出了通用对加权框架(General Pair Weighting Framework, GPW Framework)来分析不同的基于对的损失函数。
首先,作者将基于对的损失函数 定义为关于相似性矩阵 和标签 的函数 。那么,在 时刻关于模型参数 的导数可通过如下公式计算得到:
我们从该导数可推导出其原函数 :
其中,乘积的第一项(导数项)为常量,并且在基于对的损失函数中,我们可以假设对于正样本对,该常量小于等于0;对于负样本对,该常量大于等于0。我们将损失函数根据正负样本对进行分类讨论,将损失函数划分为两部分:
其中, 是样本对的相似度, 为该样本对的权重。该函数将基于对的损失函数学习转变成了设计对的权值,即我们可以通过改变对的权值大小来控制损失。
搭建完通用对加权框架后,本文对四种常见的损失函数进行了权值分析:
1对比损失: 通过计算对比损失关于相似性矩阵的偏导数可以发现,所有的正样本对和相似性大于阈值的负样本对都被赋予了相同的权值。
2三元组损失: 对于加上余量后相似性大于正样本对的负样本对,三元组损失会平等地对待这些难例。而对于加上余量后相似性仍小于正样本对的负样本对则会被丢弃。虽然三元组损失的采样策略与对比损失有所不同,但本质上仍然会平等地对待所有的被选择的样本对。
3提升结构损失: 提升结构损失关于相似性矩阵的偏导数如图7图8所示,可以看到,正样本对的权重由其相对相似性来决定,通过与具有相同锚点的正样本进行比较来衡量其权重(负样本对则与其他具有相同锚点的负样本进行比较)。
4二项偏差损失: 可以看到,二项偏差损失是对比损失的软版本,对于具有更高相似性的负样本对会被赋予更大的权重。
本文首先总结了以下三种类型的负样本对相似性:
1Similarity-S: 自相似性(Self-similarity)被定义为锚点与负样本之间的余弦相似性。具有更大的自相似性的负样本对意味着它更具有判别性更难被区分,因此携带有更多的信息和意义。需要被赋予更大的权值。对比损失和二项偏差损失基于该准则。
2Similarity-P: 正相对相似性(Positive relative similarity)被定义为自身的余弦相似度和其它正样本对的差异。三元组损失和直方图损失基于该相似性准则。
3Similarity-N: 负相对相似性(Negative relative similarity)被定义为自身的余弦相似度和其它负样本对的差异。提升结构损失,N对损失和NCA方法基于该策略。
基于上述三种类型的负样本对相似性,作者对目前常见的基于对的深度度量方法涉及到的相似性种类进行了总结:
并在此基础上提出了多类相似性损失(Multi-Similarity Loss, MS Loss),通过执行对加权策略来综合考虑上述三种类型的相似度。该策略由两个步骤组成:(i)根据正相对相似性来筛选富含信息的样本对;(ii)结合自相似性和负相对相似性来进一步对所选的样本对进行加权。
1样本对挖掘: 首先提取最难的正样本对(即具有最低相似度的正样本对)和负样本对(即具有最高相似度的负样本对)。然后将其他正负样本对与这两种最难例进行比较,提取满足下述条件的样本对:
(Ps:画了幅二维平面的示意图,红色圈之外的正样本以及**圈之内的负样本是需要进行提取的)
2样本对加权: 通过上述挖掘过程,可以粗略地筛选得到富含信息的样本对,丢弃掉对模型训练无影响的低信息量样本对。接下来,通过软加权策略,结合自相似性和负相对相似性对所选的样本对进行进一步的加权。正负样本对的权重可通过如下公式计算得到:
其中,自相似性由项 计算得到,负相对相似性由项 确定。
最后,根据上述权重可以推导出其原函数即多类相似性损失,其关于相似性矩阵的偏导数即为上述正负样本对权重。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)