因为有朋友在北大,很高兴能蹭到深度学习的课程,李戈教授的课程十分精彩,比起只会念PPT的老师,他的教学就像在堆积知识的金字塔。算法
几率论分为两大学派,贝叶斯学派认为先验知识很重要,而经典统计学派就是纯粹的看统计信息。网络
如今的深度学习最大的优势就是在数据拟合上表现很是好,但最大的缺点就是它的不可解释性。session
在一篇论文:Deep Learning: A Bayesian Perspective 中提到,目前深度学习算法取得好效果的主要缘由归功于ReLU、learning_rate、Dropout。app
实际上先验知识只是以网络的模型结构的方式呈现的(包括Loss Function的设计等)。ide
其实目前大部分使用的损失函数都是以最大似然原理为核心而设计的。函数
深度学习的核心问题就是让网络产生的数据分布尽量贴近样本分布,因此极大似然原理就很天然的用在了深度学习上。学习
而要评判分布的“差异”,首先须要能够评判分布的指标,而这个指标就是香农的信息熵。spa
有了评价指标后,咱们还不急着对比,由于要计算信息熵,须要知道样本的真实分布和几率密度。在计算模型分布的信息熵时,此时就不叫信息熵了,而称为交叉熵,这也就是所谓的cross-entropy(而不是你们常见的1-log(x))。设计
Many authors use the term "cross-entropy" to identify specifically the negative log-likelihood of a Bernoulli or softmax distribution, but that is a misnomer.
根据Gibbs不等式,有:E(P, Q) >= E(P),其实很好解释,用模拟出来的几率密度去计算真实分布的信息熵,确定是比较混乱的(相对于真实几率密度计算真实分布的信息熵)。3d
有了交叉熵和原分布的信息熵后,咱们作差,就能获得相对熵(又称KL散度)。
终于,咱们获得了相对熵,能够评判分布的“差异”后,咱们就能够用一个视角来看Loss Function:
几种常见的“差异”度量方法
好了,让咱们回到最大似然原理上,为了让模型分布尽量贴近样本分布,那么咱们要解决的问题就是最小化KL散度
因为真实样本分布是已经肯定的值,而咱们能改变的就是pmodel(x)中的权值(也就是神经网络的weights),因此咱们将问题简化为最小化(6),简写为:
MSE损失你们必定都知道,可是它是怎么来的呢?为何要以这个形式出现呢?其实它是有一个很是严格的使用条件的:
因为模型的输出和真实数据的分布必定会有误差,那么只有假设当这个误差符合正态分布时,才能够推导出MSE的形式,具体以下:
得出了几率密度分布函数后,将其带入最大似然原理中,再取对数,就能够获得MSE的标准形式了:
那么这里又出现了一个问题,为何要让误差符合正态分布呢?
其实这是由如下两条理论得出的:
有了这已经证实的两条理论,才能够基于正态分布,得出MSE的标准形式。
同理,咱们能够很容易的获得交叉熵(这里不是真的交叉熵,只是你们都习惯这么叫它了)、softmax的通常形式的证实:
终于,咱们说完了现代经常使用的损失函数是怎么获得的了。来一个简单的总结:
一切的起源都是最大似然原理,为了衡量模型分布和真实分布的差别,咱们从信息熵中获得了KL散度。因而咱们将基于正态分布的误差假设(MSE)、伯努利分布、多项分布代入最大似然原理,获得了咱们如今常见的Loss Function(MSE、CrossEntropyLoss、Softmax)。
因此这里有很重要的一点,不要盲目地使用交叉熵!你要注意的是你的数据分布,若是它不符合正态分布假设,那么你极可能就须要从新设计Loss Function了,那咱们该如何作呢?
其实KL散度有它的缺点,好比它不符合距离的定义(不对称)
因而乎,你须要本身寻找衡量数据分布的散度(Divergence)
![]()
Comprehensive Survey on Distance/Similarity Measures Between Probability Density Functions, 2007
而后根据散度从新你的设计Loss Function。
至此,关于Loss Function的内容就告一段落了,其实讲到最后,以个人数学水平实在达不到这个境界,因此到后面的概念若是讲的不太清楚,请各位读者谅解了。