028、知识蒸馏:大模型教小模型
028 知识蒸馏:大模型教小模型昨晚调试一个手势识别模型,板子上Flash只剩12KB,模型死活塞不进去。同事说要不换更大的Flash芯片,我盯着示波器上跳动的波形,突然想起去年在服务器上训的那个ResNet-50教师模型——它参数量是目标模型的200倍,但推理时90%的神经元根本没激活。这不就是典型的“大材小用”吗?知识蒸馏,就是让这个庞然大物把毕生功力传给小模型,而不是让它带着一身本事烂在服务器里。从“硬学”到“软学”的认知转变传统训练小模型,我们让它直接学习真实标签。比如一张图片是猫,标签就是[0,1,0,0…]。这叫硬标签,每个样本只告诉你一个正确答案。但教师模型输出的不是这么生硬的东西——它可能输出[0.01, 0.85, 0.12, 0.02…],意思是“我觉得有85%可能是猫,12%可能是狗,2%可能是兔子”。这个分布里藏着教师模型对类别间相似性的理解:猫和狗在某些特征上确实接近,而猫和兔子差距更大。我踩过的一个坑:第一次做蒸馏时,直接把教师模型的输出当软标签,和学生模型的交叉熵损失加起来训练。结果学生模型学得比直接训练还差。后来才明白,教师模型的输出分布太平滑了——比如猫的概率0.85,狗0.12,其他类别几乎为零。这种分布里,狗和兔子的微小差异被淹没了。需要引入一个温度参数T,把分布“软化”:softmax(z_i / T)T越大,分布越平滑。T=1就是原始softmax,T=5时,原来0.85和0.12的差距会缩小,让模型学到“猫和狗更相似”这种高阶知识。别这样写:T设成100,那所有类别概率都趋近于0.5,信息全丢了。经验值T在3