可能有读者留意到,这次更新相对来说隔得比较久了。事实上,在上周末时就开始准备这篇文章了,然而笔者低估了这个问题的难度,几乎推导了整整一周,仍然还没得到一个完善的结果出来。目前发出来的,仍然只是一个失败的结果,希望有经验的读者可以指点指点。

在文章《将“Softmax+交叉熵”推广到多标签分类问题》中,我们提出了一个多标签分类损失函数,它能自动调节正负类的不平衡问题,后来在《多标签“Softmax+交叉熵”的软标签版本》中我们还进一步得到了它的“软标签”版本。本质上来说,多标签分类就是“n个2分类”问题,那么相应的,“nm分类”的损失函数又该是怎样的呢?

这就是本文所要探讨的问题。

类比尝试 #

在软标签推广的文章《多标签“Softmax+交叉熵”的软标签版本》中,我们是通过直接将“n个2分类”的sigmoid交叉熵损失,在log内做一阶截断来得到最终结果的。同样的过程确实也可以推广到“nm分类”的softmax交叉熵损失,这是笔者的第一次尝试。

softmax(si,j)=esi,jjesi,jsi,j为预测结果,而ti,j则为标签,那么
ijti,jlogsoftmax(si,j)=ijti,jlog(1+kjesi,ksi,j)=jlogi(1+kjesi,ksi,j)ti,j=jlog(1+iti,jkjesi,ksi,j+)


i的求和默认是1n,对j的求和默认是1m。截断的高阶项,得到
l=jlog(1+i,kjti,jesi,j+si,k)

这就是笔者开始得到的loss,它是之前的结果到“nm分类”的自然推广。事实上,如果ti,j是硬标签,那么该loss基本上没什么问题。但笔者希望它像《多标签“Softmax+交叉熵”的软标签版本》一样,对于软标签也能得到推导出相应的解析解。为此,笔者对它进行求导:
lsi,j=ti,jesi,jkjesi,k1+i,kjti,jesi,j+si,k+hjti,hesi,hesi,j1+i,khti,hesi,h+si,k

所谓解析解,就是通过方程lsi,j=0来解出。然而笔者尝试了好几天,都求不出方程的解,估计并没有简单的显式解,因此,第一次尝试失败。

结果倒推 #

尝试了几天实在没办法后,笔者又反过来想:既然直接类比出来的结果无法求解,那么我干脆从结果倒推好了,即先把解确定,然后再反推方程应该是怎样的。于是,笔者开始了第二次尝试。

首先,观察发现原来的多标签损失,或者前面得到的损失(2),都具有如下的形式:
l=jlog(1+iti,jef(si,j))


我们就以这个形式为出发点,求导
lsi,k=jti,jef(si,j)f(si,j)si,k1+iti,jef(si,j)

我们希望ti,j=softmax(f(si,j))=ef(si,j)/Zi就是lsi,k=0的解析解,其中Zi=jef(si,j)。那么代入得到
0=lsi,k=j(1/Zi)f(si,j)si,k1+i1/Zi=(1/Zi)(jf(si,j))si,k1+i1/Zi

所以要让上式自然成立,我们发现只需要让jf(si,j)等于一个跟i,j都无关的常数。简单起见,我们让
f(si,j)=si,jˉsi,ˉsi=1mjsi,j

这样自然地有jf(si,j)=0,对应的优化目标就是
l=jlog(1+iti,jesi,j+ˉsi)

ˉsi不影响归一化结果,所以它的理论最优解是ti,j=softmax(si,j)

然而,看上去很美好,然而它实际上的效果会比较糟糕,ti,j=softmax(si,j)确实是理论最优解,但实际上标签越接近硬标签,它的效果会越差。因为我们知道对于损失(8)来说,只要si,jˉsi,损失就会很接近于0,而要达到si,jˉsisi,j不一定是si,1,si,2,,si,m中的最大者,这就无法实现分类目标了。

思考分析 #

现在我们得到了两个结果,式(2)是原来多标签交叉熵的类比推广,它在硬标签的情况下效果还是不错的,但是由于求不出软标签情况下的解析解,因此软标签的情况无法做理论评估;式(8)是从结果理论倒推出来的,理论上它的解析解就是简单的softmax,但由于实际优化算法的限制,硬标签的表现通常很差,甚至无法保证目标logits是最大值。特别地,当m=2时,式(2)和式(8)都能退化为多标签交叉熵。

我们知道,多标签交叉熵能够自动调节正负样本不平衡的问题,同样地,虽然我们目前还没能得到一个完美的推广,但理论上推广到“nm分类”后依然能够自动调节m个类的不平衡问题。那么平衡的机制是怎样的呢?其实不难理解,不管是类比推广的式(2),还是一般的假设式(4),对i的求和都放在了log里边,原本每个类的损失占比大体上是正比于“该类的样本数”的,改为放在了log里边求和后,每个类的损失占就大致等于“该类的样本数的对数”,从而缩小了每个类的损失差距,自动缓解了不平衡问题。

遗憾的是,本文还没有得出关于“nm分类”的完美推广——它应该包含两个特性:1、通过log的方法自动调节类别不平衡现象;2、能够求出软标签情况下的解析解。对于硬标签来说,直接用式(2)应该是足够了;而对于软标签来说,笔者实在是没辙了,欢迎有兴趣的读者一起思考交流。

文章小结 #

本文尝试将之前的多标签交叉熵推广到“nm分类”上去,遗憾的是,这一次的推广并不算成功,暂且将结果分享在此,希望有兴趣的读者能一起参与改进。

转载到请包括本文地址:https://kexue.fm/archives/9158

更详细的转载事宜请参考:《科学空间FAQ》

如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。

如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

如果您需要引用本文,请参考:

苏剑林. (Jul. 15, 2022). 《不成功的尝试:将多标签交叉熵推广到“n个m分类”上去 》[Blog post]. Retrieved from https://kexue.fm/archives/9158

@online{kexuefm-9158,
        title={不成功的尝试:将多标签交叉熵推广到“n个m分类”上去},
        author={苏剑林},
        year={2022},
        month={Jul},
        url={\url{https://kexue.fm/archives/9158}},
}