假设训练样本的标签值为
(即人脑预测的结果)
神经网络的预测值为
我们希望神经网络模型能够最大的近似人脑模型
也就是说,我们希望标签值(真实值)与预测值的差值越小越好
但是如何去比较两个概率模型之间的差异
在深度学习中,我们使用损失函数来衡量模型的好坏
那么,损失函数是如何设计出来的
这里,介绍三种常见的设计思路:
最小二乘法:
首先,比较两个数值差异最简单的方式,我们知道就是将它们做差,
也就是 ,显然,这是对于单个样本而言,比如对一张照片的判断结果,那么,对于一组样本集,也就是许多张照片而言,两个模型的误差可以表示为
,也就是将所有的判断误差相加起来,当这个值最小的时候,我们可以认定两个模型是近似的,即
,理论上,这样已经可以达到我们判断模型差距的目标了,但是观察式子中的绝对值,可以发现,绝对值在其定义域上并不是处处可导的,零点处就是它的一个跳跃间断点,所以为了不影响神经网络的误差传播,我们将其原式的每一项进行平方,也就是改为
,虽然这样操作改变了最小值,但是并不会影响预测值与真实值之间的关系,所以仍然可以达到我们想要的结果
(参考绝对值损失、均方损失)
极大似然估计法(最大似然估计法):
似然可以说是概率的反向应用,在统计学中,对于概率的定义是在特定环境下某件事情发生的可能性,也就是结果没有产生之前依据环境所对应的参数来预测某件事情发生的可能性。对于似然的定义则是基于确定的结果,去推测产生这个结果的可能环境(参数)
假设 表示环境对应的参数,
表示结果
则概率函数可以表示为
似然函数可以表示为
因为二者在数值上相同,所以我们可以使用概率来间接计算似然值,即 ,但是要注意两个函数各自的自变量与前置条件是不同的
因为似然值是在真实情况已经发生,求出来虚拟概率模型下发生该情况的可能性,所以当似然值越大时,说明与发生真实情况的概率模型越接近,也就是最大似然估计法
假设有一组标签值 ,神经网络的概率模型使用学习参数
以及偏置系数
来表示,那么,每一个标签对应的概率为
,对应一组标签的概率即将所有的概率连乘
即
其对应的似然值可以表示为
但是 W, b在网络训练时是确定值,如果说标签值此时全为1,那么会导致没有可操作性(无法训练网络)
可以发现,我们还有一个条件没有用上,也就是神经网络的预测值
而预测值的输出结果是依赖于 W, b的
所以可将上式改为
对于不同的输入,网络的预测值不会保持相同
在二分类问题中,我们知道标签值 ,满足伯努利分布,所以对应的概率函数可以写成
所以用上式将似然值的表达式展开,即
再对原式进行对数操作,即
再将其展开,得
最后进行化简,得
最大似然值的表达式为
或者
(交叉熵损失函数,最小化交叉熵即最大似然估计)
交叉熵:
首先,介绍信息量的概念,对于不同的信息,其包含的信息量是不同的,而在日常的经验中,当我们认为某个事件发生的可能性大越大的时候,反而它的信息量越小(因为没有什么好探讨的),但是当某个不太可能的事情发生了,我们会很惊讶,自然萌生出一探究竟的想法,会觉得此事定有蹊跷(也就是有很多信息)
信息量的大小与该信息的确定性是直接相关的,而且是负相关,即信息量大小与其不确定性正相关
现在考虑一个随机变量 x , x 的信息量依赖于其概率分布 p(x) ,定义 I(x) 为 x 的信息量
则其表达式为:
因为信息量与其概率分布成负相关,而log函数是单调递增,所以在前面加上负号,使函数关于自变量p(x)单调递减
对于一组随机变量
将所有信息量的期望定义为熵 H(x)
即
相对熵(KL散度)
在神经网络中,对于同一个随机变量 x ,我们用P来表示样本的标签值,用Q来表示模型的预测值
所以可得到两个单独的概率分布 P(x) 和 Q(x),我们使用 KL 散度来衡量这两个分布的差异
其计算式为:
n 为事件的所有可能性,KL散度越小,说明预测分布与真实分布越接近
将上式展开:
将括号拆开:
即
可以发现,KL散度的值等于交叉熵减去信息熵
等式的前一部分是 P 的信息熵,后一部分就是交叉熵
所以交叉熵即
在训练网络时,我们需要评估label和predicts之间的差距,使用KL散度是刚刚好的,但是我们关注到一个问题,在训练网络时,输入数据与标签常常是已经确定的,也就是说真实分布 P(x) 是确定的,所以 P 的信息熵是一个常量
由于KL散度的大小是表示真实分布 P(x) 与预测分布 Q(x) 之间的差异,当值越小时,表示二者之间的差异越小,所以我们需要最小化KL散度,而交叉熵等于KL散度加上一个常量(信息熵),且公式相比KL散度更加容易计算,那么,在优化的过程中,只需要关注交叉熵,所以我们一般用交叉熵做损失函数,来评估模型
即