从花书,知道了fitnet网络,用花书的说法,这是一种预训练的技术。, 看fitnet原始论文看的云里雾里,原来需要先看知识蒸馏(KD,knowleadge distilling)。
知识蒸馏可以看做是一种知识迁移。老师先学习,学习到的结果,注意这个结果是老师网络的output,比如,softmax输出是一组概率,原始标签是one-hot。这里说的就是softmax输出。所谓蒸馏,就是这个输出再除以一个温度系数T。为啥除呢,one-hot太硬了,一个输入x,结果就只能对应到一个明确的类别,有了老师的蒸馏,就变成0.1,0.9,0.2..,大概率这就是个0.9的种类,其他也有可能。然后,学习来学这个0.1,0.9,0.2,学生学习的难度这时候是加大的,因为类别之间模糊了,0与1之间的差异是1,0.1与0.9之间的差异是0.8,再除以T,就是0.8/T,T大于1的话,差异就更小了,所以,难学。 训练的后来,这个T会越来越接近于1,到预测的时候,就是1。
FtiNet网络,也是一种知识蒸馏,它的特点在于,用老师中间层的输出数据来作为训练集(老师中间层输出的feature map就是给学生的Hint),训练学生中间层,要求学习的中间层的输出与老师特定的中间层的输出的差异,也就是损失函数的输出,要足够小。 同时,学生是又深又窄的网络(分类效果更佳,但是训练时间长。老师一般是又浅,又宽的网络,分类效果可能稍微差一些,但是训练速度快。),两种网络结构自然不一样,就需要在学生的要被教育的网络结构外面再套一层回归层R。用R的输出来跟老师的中间层输出当成是损失函数的输入(y和y^,计算结果和实际标签),以此来训练学生的中间层。
最后,再在得到的中间层的基础上,训练学生的整个网络,并拿来预测。