粗读Explore Visual Concept Formation for Image Classification-爱代码爱编程
本文在传统分类神经网络的softmax后的输出上进行了改进,不再将其当成无序的量,而是有限的,大小为K的一维空间变量,K为该分类任务可能的结果数。
传统的神经网络最后一层基本为输出为K的先行层,一般将softmax后最大的那个值最代表的类当作分类结果。计算损失时,也只关注如何让样本实际所属的类对应的数值尽可能大,忽略了其他类。
而作者将最后一层的输出称为响应(response),要先计算每个响应的位置,然后计算这一批样本的响应的中心,根据每个响应的位置与该类别响应中心的距离计算出一个损失。
因为softmax后,响应中的K个数之和为1,那么这就可以看作是概率,每个响应的位置即为每个响应的期望值,每个数在响应中的位次为自己的值。
作者限定了一个batch里每个类都要有N个,当一个batch里N*K个样本的响应和中心计算完成后,即可计算每个类的响应中心
根据Pi即可计算探索损失(exploration)
但探索损失只基于本次batch的结果,而如果分类器性能不佳,则会对损失函数的计算产生干扰。虽然在把同类别的物体的响应计算地越来越接近的过程中可以提高性能,但这会让训练十分缓慢。
因此作者还提出了ECP,Experience Cache Pool,即把之前训练样本的响应和分类结果放进去,在计算完探索损失后,从ECP中随机取出batch大小个响应,这样便可得到经验损失所需要的K个P,之后,只要替换探索损失中的P,并把准确率当作权重,即可计算出经验损失,最终损失为
个人认为这种方法之所以有效,一是因为如提出知识蒸馏的文章所说,神经网络得到的logits中,属于正确类的得分重要,属于错误类的得分也十分有用。比如分类一条狗,它的logits得分在softmax后,属于狗那一类的得分可能为0.9,而属于猫那一类的得分为0.05,属于轮船那一类的得分则可能只有0.01,而这些数值之间的大小关系,也能包含充足的信息,上面例子就说明了,猫和狗的相似度要比轮船和狗的相似程度大得多。
此外,就是类似于simCLR等对比学习的原理,模型哪怕哪怕没有经验损失的指导,为了降低探索损失,也会把同类别的当成正样本对,尽量靠近,把不同类别当成负样本对,尽量远离,这样也能达到学习训练的效果。