题图:保罗·高更《我们从何处来?我们是谁?我们向何处去?》
我们知道逻辑回归的损失函数cost=-ylogo-(1-y)log(1-o),其中o为模型输出,y为样本真实分布,为什么损失函数可以是这个形式?机器学习的终极目标是什么?机器学习中测试集起的作用是什么?
首先我们需要知道一个概念——信息量,它指的是一个事件发生所带来的信息。日常生活中,信息的载体是消息,比如“一个星期有7天”这条消息,它所带来的信息量我们可以认为是0,为什么呢?用大白话解释就是说了等于没说,因为“一个星期有7天”这个事件它是确定事件。又比如说“老板希望这个月32号发工资”,从科学的角度来讲,这个消息的信息量为无穷大,因为这是不可能事件。而另外一条消息“埃航一架飞机坠毁了”,这个消息带来的信息量就非常大,因为飞机发生事故的概率很小,而坠毁的概率就更小了,因此这个事件的不确定性非常大,所以这条消息带来的信息量很大。
总结一下,信息量反映一个事件不确定性的程度,它在数学上有一个定义,就是I=-log(p),-log是递减函数,p越大,那么I就越小。也就是说,一个事件的确定性程度越高,它发生所带来的信息量就越小。
不过,当事件还没有发生的时候,就不是直接去求信息量了,而应该是求信息量的期望值,所以这个时候,我们要求的是信息熵,需要在信息量前面乘以该事件发生的概率,也就是信息熵H(P)=-Plog(P),所以,信息熵反映的是一个事件还没有发生之前,它发生时候带来信息量的期望值。在以2为底求对数的时候,信息熵的单位可以记为bit。
也可以理解为,根据真实分布,我们能够找到一个最优策略,该策略可以以最小的代价消除系统的不确定性,而这个代价的大小就是信息熵。
介绍为信息熵H(P)之后,我们再来看交叉熵,交叉熵出现的背景是我们想知道分布Q是否可以代表分布P,放到机器学习中,假设测试集的分布可以认为是P,这个是确定的,因为正负样本都是我们提前标定好的,标定好那一刻之后,它的分布就被唯一确定了,而分布Q则是我们训练好的网络。现在,我们想知道对于测试样本的概率分布为P的情况下,训练好的网络的分布Q带给我们的不确定性期望值为多少?用公式描述就是用概率分布P去乘以训练好的网络的信息量:
H(P,Q)=-Plog(Q)
如果H(P,Q)为0,说明我们训练好的网络带来的不确定性为0,也就是说我们标定的数据为正,网络输出也为正,标定的数据为负,网络输出也为负,没有任何悬念可言,因此,使得交叉熵H(P,Q)=0不就是我们训练网络的终极目标吗?
最后,我们还要看相对熵(又称KL散度)的概念,在用分布Q去拟合分布P的时候,我们一定会多产生一些无关紧要的信息熵,那么这个多余的信息熵就是用交叉熵减去真实分布熵,用公式表示就是:
D(P||Q)=H(P,Q)-H(P)
一般情况下,在标记员标记好数据的那一刻,P的分布就已经确定了,H(P)可以认为是一个常数,所以优化H(P,Q)实际上就等于优化D(P||Q),也就是说优化交叉熵等同于优化相对熵或优化KL散度,因此我们经常看到交叉熵、相对熵或KL散度混淆使用,原因就在这里。
那么回到逻辑回归中,样本要么为正,要么为负,假设测试集真实标签为y,模型输出为o,于是交叉熵为-ylog(o)-(1-y)log(1-o),就得到了我们开头说的损失函数的形式。损失函数值越小,那么用模型的输出去逼近测试集真实的分布所消耗的额外信息熵就越小。需要注意的是,我们这里用测试集的分布来代表真实分布,因此测试集的选取是十分重要的。