本文主要介绍CTR场景中的对数损失函数和交叉熵损失函数,以及对数损失函数的取值范围,如果觉得对你有帮助,文末「分享」「点赞」「在看」来一波,点击「阅读原文」获取精彩比例PDF下载链接。
在统计学领域,有两种对立的思想学派:贝叶斯学派和经典学派(频率学派),他们之间最大的区别是如何看待被估计的参数。贝叶斯学派的观点是将其看成是已知分布的随机变量,而经典学派的观点是将其看成未知的待估计的常量。
极大似然估计属于经典学派的一种。通俗来说,极大似然估计就是利用已知的样本结果信息,反推最大概率出现这些结果的参数信息。
举一个通俗点的例子来说明一下什么是极大似然估计。比如我们在网上发现了两篇重复率比较高的文章,但作者ID并不是一个人,我们推测这两个作者之间存在一定的“关系”,经过对比文章的发布时间和其他文章的写作风格,我们认为存在极大的可能是A抄袭了B的文章。这个推测的过程就称为似然,得到可能结论就是极大似然估计。
极大似然估计中采样需满足一个重要的假设,就是所有的采样都是独立同分布的。在进行参数计算的过程中,首先假设样本服从某种概率分布,在利用已知的样例数据对参数进行估计。
假设 P ( x ∣ c ) P(x|c) P(x∣c)具有确定的概率分布形式,且被参数 θ c \theta_c θc唯一确定,则任务就是利用训练集 D D D来估计参数 θ c \theta_c θc。
θ c \theta_c θc对于训练集 D D D中第 c c c类样本组成的集合 D c D_c Dc的似然(likelihood)为:
P ( D c ∣ θ c ) = ∏ x ∈ D c P ( x ∣ θ c ) P(D_c|\theta_c)= \prod _{x\in D_c} P(x|\theta_c) P(Dc∣θc)=x∈Dc∏P(x∣θc)
如果使用连乘进行参数估计在计算时很不方便,所以这里取了一个对数,即对数似然估计:
L L ( θ c ) = l o g P ( D c ∣ θ c ) = ∑ x ∈ D c l o g P ( x ∣ θ c ) LL(\theta_c)= log \, P(D_c|\theta_c)= \sum _{x\in D_c} log \, P(x|\theta_c) LL(θc)=logP(Dc∣θc)=x∈Dc∑logP(x∣θc)
于是 θ c \theta_c θc的极大似然估计为:
θ c ^ = a r g m a x θ c L L ( θ c ) \hat{ \theta_c } = \underset{\theta_c}{arg \, max} \, LL(\theta_c) θc^=θcargmaxLL(θc)
参数估计结果的准确性严重依赖于所假设的概率分布形式是否符合潜在的真实分布。
对数损失函数(Log loss function)和交叉熵损失函数(Cross-entroy loss funtion)在很多文献内是一致的,因为他们的表示式的本质是一样的。
log loss function表达式:
l o g l o s s = − 1 n ∑ i = 1 n ( y i l o g ( p i ) + ( 1 − y i ) l o g ( 1 − p i ) ) logloss = - \frac{1}{n}\sum_{i=1}^{n} (y_i log (p_i) + (1-y_i) log(1-p_i)) logloss=−n1i=1∑n(yilog(pi)+(1−yi)log(1−pi))
其中 y i y_i yi是第 i i i个样本的真实标签, p i p_i pi是第 i i i个样本预测为正样本的概率。
cross-entropy loss function表达式:
c r o s s e n t r o p y l o s s = − 1 m ∑ i = 1 m ∑ j = 1 n y i j l o g ( p ( x i j ) ) crossentropy\,loss = -\frac{1}{m} \sum_{i=1}^{m} \sum_{j=1}^{n} y_{ij} \, log (p(x_{ij})) crossentropyloss=−m1i=1∑mj=1∑nyijlog(p(xij))
其中 m m m表示样本数, n n n表示样本所属的不同类别个数, y i j y_{ij} yij表示样本 i i i所属类别 j j j, p ( x i j ) p(x_{ij}) p(xij)表示预测的样本 i i i属于类别 j j j的概率。
从上述的表达式中看,两者的损失函数本质是一样的,但是这里需要注意的是通常情况下,这两种损失函数所对应的上一层结构不同,log loss经常对应的是Sigmoid函数的输出,用于二分类问题;而cross-entropy loss经常对应的是Softmax函数的输出,用于多分类问题。
所以在神经网络中精彩使用cross-entropy作为评判参数优化的函数,而在二分类的场景下精彩使用log loss作为评判参数优化的函数。
但是其实log loss也可以应用在多分类,这时候就和cross-entropy loss应用在多分类没有什么差别了。
log loss function 和 cross-entropy loss function本质上没有什么区别,无论是在二分类还是多分类场景下都可以进行应用,只不过大多数人的应用习惯不同而已。
上一小节中的log loss表达式可以转换为:
l o g l o s s = − ∑ i = 1 n ( y i n l o g ( p i ) + 1 − y i n l o g ( 1 − p i ) ) logloss = - \sum_{i=1}^{n} (\frac{y_i}{n} log (p_i) + \frac{1-y_i}{n} log(1-p_i)) logloss=−i=1∑n(nyilog(pi)+n1−yilog(1−pi))
假如我们现在有个训练集,100万个数据点,其中10万个为阳性,那么总体上每个样本为1的概率可近似认为是0.1。通常来说,测试集的分布是非常接近于训练集的,那么测试集中大概有10%的样本为阳性。如果我们预测测试集中每个样本为1的概率都为0.1,那么logloss会是多少呢?
l o g l o s s = − ( 0.1 l o g ( 0.1 ) + 0.9 l o g ( 1 − 0.1 ) ) ≈ 0.325 logloss=−(0.1log(0.1)+0.9log(1−0.1))≈0.325 logloss=−(0.1log(0.1)+0.9log(1−0.1))≈0.325
假如总体分布是每个样本以 p p p的概率为阳性,我们预测每个样本为阳性的概率都为 p p p,也就是 p i = p p_i=p pi=p,那么logloss是多少呢?
l o g l o s s = − p l o g ( p ) − ( 1 − p ) l o g ( 1 − p ) logloss=−plog(p)−(1−p)log(1−p) logloss=−plog(p)−(1−p)log(1−p)
所以最差的情况就是,样本正好是一半阳性一半阴性,此时按照乱猜出的logloss是0.693。
换句话说,只要loglss是在0.693以上,就基本说明了模型是失败的。
扫一扫 关注微信公众号!号主 专注于搜索和推荐系统,尝试使用算法去更好的服务于用户,包括但不局限于机器学习,深度学习,强化学习,自然语言理解,知识图谱,还不定时分享技术,资料,思考等文章!