抱歉,标题太模糊了。
我将从一个示例开始。假设我有一个预先存在的模型,可以对狗、猫和人类进行分类。然而,我所需要的是一个可以区分狗和猫的模型(不需要人类)。现有的模型是笨重和冗余的,所以我想做一个更小,更快的模型,可以做所需的工作。
存在哪些方法?
我想利用知识蒸馏(使用以前的模型作为教师,使用新的模型作为学生),并训练一个全新的模型。
发布于 2021-01-22 00:24:04
首先,修剪教师模型,使其具有较小的版本,以便在蒸馏过程中用作学生。一个简单的机制,如基于幅度的剪枝就足够了。
对于蒸馏,因为你的输出向量不再匹配(学生是2维的,教师是3维的,你必须考虑到这一点,并且只根据重叠的维度计算蒸馏损失。另一种选择是分层蒸馏,其中输出向量是无关的,蒸馏损失是基于教师和学生中间层之间的差异来计算的。在这两种情况下,除了学生输出和教师输出之外,总损失还可能包括学生输出和标签之间的差异。
对于这样一个简单的任务,在剪枝之后,仅仅是基本的迁移学习就足够了--也就是用2d输出向量替换3d输出向量并继续训练。
https://stackoverflow.com/questions/64888070
复制相似问题