从预先存在的冗余模型中制作更小的模型



很抱歉标题含糊不清。

我将从一个例子开始。假设我有一个预先存在的模型,可以对狗、猫和人类进行分类。然而,我所需要的只是一个可以在狗和猫之间进行分类的模型(不需要人类(。预先存在的模型又重又多余,所以我想制作一个更小、更快的模型,它可以完成所需的工作。

存在哪些方法?

我想利用知识提炼(用以前的模式作为老师,用新的模式作为学生(,培养一个全新的模式。

首先,修剪教师模型,使其具有一个较小的版本,以便在蒸馏中用作学生。一个简单的制度,比如基于数量级的修剪就足够了。

对于蒸馏,因为您的输出矢量将不再匹配(学生是二维的,老师是三维的,你必须考虑到这一点,只根据重叠的维度计算蒸馏损失。另一种选择是分层蒸馏,其中输出向量不相关,蒸馏损失是根据老师和学生中间层之间的差异计算的。在这两种情况下,除了学生产出和教师产出之外,总损失还可能包括学生产出和标签之间的差异。

对于这样一个简单的任务来说,修剪后只需基本的迁移学习就足够了——也就是说,用2d输出向量替换3d输出向量并继续训练。

最新更新