深度学习中的知识蒸馏算法loss函数计算哪种是正确的?
hard_loss=nn.CrossEntropyLoss()
soft_loss=nn.KLDivLoss(reduction="batchmean")
loss=hard_loss(student_out,label)
ditillation_loss=soft_loss(F.softmax(student_out/T,dim=1),F.softmax(teacher_output/T,dim=1))
方式一:
loss_total = loss*alpha+ditillation_loss*(1-alpha)
方式二:
loss_total = loss*alpha+ditillation_loss(T*T*2)*(1-alpha)
原论文是第一种,所以用第一种肯定没问题,第二种也有人用,主要是为了保证两个loss贡献差不多,毕竟softloss里有做平滑,所以都可以哈,还是要看哪种收敛更快,效果很好