深度学习论文阅读之【Distilling the Knowledge in a Neural Network】提炼神经网络中的知识

论文:link
代码:link

摘要

  提高几乎所有机器学习算法性能的一个非常简单的方法是在相同的数据上训练许多不同的模型,然后对它们的预测进行平均[3]。不幸的是,使用整个模型集合进行预测非常麻烦,并且计算成本可能太高,无法部署到大量用户,尤其是在单个模型是大型神经网络的情况下。 Caruana 和他的合作者 [1] 已经证明,可以将集成中的知识压缩到单个模型中,该模型更容易部署,并且我们使用不同的压缩技术进一步开发了这种方法。我们在 MNIST 上取得了一些令人惊讶的结果,并且表明我们可以通过将模型集合中的知识提炼为单个模型来显着改进频繁使用的商业系统的声学模型。我们还引入了一种由一个或多个完整模型和许多专业模型组成的新型集成,这些模型学习区分完整模型混淆的细粒度类别。与专家的混合不同,这些专业模型可以快速并行地进行训练。

1.Introduction

  许多昆虫都有幼虫形态和完全不同的成虫形态,幼虫形态可以经过优化,可以从环境中获取能量和营养,成虫形态可以满足不同的旅行和繁殖要求,在大规模机器学习中,我们通常在训练阶段和部署阶段使用非常相似的模型,尽管它们的要求非常不同,对于语音和对象识别等任务,训练必须从非常大、高度冗余的数据集中提取结构,但它并不需要这样做,需要实时操作,并且会使用大量的计算量。
  然而,部署到大量用户对延迟和计算资源有更严格的要求。与昆虫的类比表明,如果可以更轻松地从数据中提取结构,我们应该愿意训练非常繁琐的模型。繁琐的模型可能是单独训练的模型的集合,也可能是使用非常强大的正则化器(例如 dropout)训练的单个非常大的模型[9]。一旦繁琐的模型经过训练,我们就可以使用不同类型的训练,我们称之为“蒸馏”,将知识从繁琐的模型转移到更适合部署的小模型。 Rich Caruana 及其合作者已经率先提出了该策略的一个版本 [1]。在他们的重要论文中,他们令人信服地证明,通过大型模型集合获得的知识可以转移到单个小型模型中。通常认为模型学习到的参数代表了知识,无法直接迁移,但教师网络预测结果中各类别概率的相对大小也隐式包含知识。

2.Distillation

  神经网络通常通过使用“softmax”输出层来生成类别概率,该输出层通过将 z i z_i zi与其他logits进行比较。将为每一个类别计算的logits的 z i z_i zi转换为概率 p i p_i pi.
q i = exp ⁡ ( z i / T ) ∑ j exp ⁡ ( z j / T ) {q_i} = \frac{{\exp \left( {{z_i}/T} \right)}}{{{\sum _j}\exp \left( {{z_j}/T} \right)}} qi=jexp(zj/T)exp(zi/T)
其中 T 是温度,通常设置为 1。使用较高的 T 值会在类别上产生较软的概率分布。在最简单的蒸馏形式中,知识被转移到蒸馏模型中,方法是在转移集上进行训练,并使用转移集中每种情况的软目标分布,该软目标分布是通过使用其 softmax 中温度较高的繁琐模型生成的。训练蒸馏模型时使用相同的高温,但训练后它使用温度 1。
一种方法是使用正确的标签来修改软目标,但我们发现更好的方法是简单地使用两个不同目标函数的加权平均值。第一个目标函数是与软目标的交叉熵,并且该交叉熵是使用蒸馏模型的 softmax 中与用于从繁琐模型生成软目标相同的高温来计算的。第二个目标函数是具有正确标签的交叉熵。这是在蒸馏模型的 softmax 中使用完全相同的对数计算的,但温度为 1。我们发现,通常通过在第二个目标函数上使用相当低的权重来获得最佳结果。由于软目标产生的梯度大小为 1/T 2 ,因此在使用硬目标和软目标时将其乘以 T 2 非常重要。这确保了如果在元参数实验时用于蒸馏的温度发生变化,硬目标和软目标的相对贡献保持大致不变。

2.1 匹配logits是蒸馏的一个特例

  传输集中每个案例都贡献一个交叉熵梯度 d C / d z i dC/d{z_i} dC/dzi,相当于蒸馏模型的每个logit z i z_i zi,并且繁琐的模型具有产生软目标概率 p i p_i pi的logits v i v_i vi,并且转移训练是在温度T下完成的,则该梯度由下式给出:
∂ C ∂ z i = 1 T ( q i − p i ) = 1 T ( e z i / T ∑ j e z j / T − e v i / T ∑ j e v j / T ) \frac{{\partial C}}{{\partial {z_i}}} = \frac{1}{T}\left( {{q_i} - {p_i}} \right) = \frac{1}{T}\left( {\frac{{{e^{{z_i}/T}}}}{{{\sum _j}{e^{{z_j}/T}}}} - \frac{{{e^{{v_i}/T}}}}{{{\sum _j}{e^{{v_j}/T}}}}} \right) ziC=T1(qipi)=T1(jezj/Tezi/Tjevj/Tevi/T)
如果温度与logits的大小相比比较高,我们可以近似:
∂ C ∂ z i ≈ 1 T ( 1 + e z i / T N + ∑ j z j / T − 1 + e v i / T N + ∑ j v j / T ) \frac{{\partial C}}{{\partial {z_i}}} \approx \frac{1}{T}\left( {\frac{{1 + {e^{{z_i}/T}}}}{{N + {\sum _j}{z_j}/T}} - \frac{{1 + {e^{{v_i}/T}}}}{{N + {\sum _j}{v_j}/T}}} \right) ziCT1(N+jzj/T1+ezi/TN+jvj/T1+evi/T)
如果我们现在假设每个转移情况的logits都是零均值的,则 ∑ j z j = ∑ j v j = 0 {\sum _j}{z_j} = \sum {}_j{v_j} = 0 jzj=jvj=0,原式可简化为:
∂ C ∂ z i ≈ 1 N T 2 ( z i − v i ) \frac{{\partial C}}{{\partial {z_i}}} \approx \frac{1}{{N{T^2}}}\left( {{z_i} - {v_i}} \right) ziCNT21(zivi)
  因此,在高温极限下,蒸馏相当于最小化 1 / 2 ( z i − v i ) 2 1/2(z_i-v_i)^2 1/2(zivi)2 ,前提是每个分动箱的 logits 分别为零均值。在较低的温度下,蒸馏很少关注比平均值负得多的匹配 logits。这是潜在的优势,因为这些逻辑几乎完全不受用于训练繁琐模型的成本函数的约束,因此它们可能非常嘈杂。另一方面,非常负的逻辑可能会传达有关通过繁琐模型获得的知识的有用信息。这些影响中哪一个占主导地位是一个经验问题。我们表明,当蒸馏模型太小而无法捕获繁琐模型中的所有知识时,中间温度效果最好,这强烈表明忽略大的负对数可能会有所帮助。

3.MNIST初步实验

  为了了解蒸馏的效果如何,我们在所有 60,000 个训练案例上训练了一个大型神经网络,该神经网络具有两个隐藏层,每个隐藏层包含 1200 个校正线性隐藏单元。该网络使用 dropout 和权重约束进行了强烈正则化,如 [5] 中所述。 Dropout 可以被视为训练共享权重的指数级大模型集合的一种方式。此外,输入图像在任何方向上抖动最多两个像素。该网络出现了 67 个测试错误,而具有两个隐藏层(由 800 个校正线性隐藏单元且无正则化)的较小网络出现了 146 个错误。但是,如果仅通过添加在 20 ℃ 的温度下匹配大网络产生的软目标的附加任务来对较小的网络进行正则化,则它会出现 74 个测试错误。这表明软目标可以将大量知识转移到蒸馏模型中,包括如何概括从翻译的训练数据中学到的知识,即使转移集不包含任何翻译。当蒸馏网络的两个隐藏层中每个都有 300 个或更多单位时,所有高于 8 的温度都会给出相当相似的结果。但当这从根本上减少到每层 30 个单位时,2.5 至 4 范围内的温度明显优于更高或更低的温度。然后,我们尝试从传输集中省略数字 3 的所有示例。所以从蒸馏模型的角度来看,3是一个它从未见过的神话数字。尽管如此,蒸馏模型仅出现 206 个测试错误,其中 133 个位于测试集中的 1010 个三元组上。大多数错误是由于第 3 类的学习偏差太低而引起的。如果此偏差增加 3.5(这会优化测试集的整体性能),则蒸馏模型会出现 109 个错误,其中 14 个错误位于 3 上。因此,在正确的偏差下,尽管在训练期间从未见过 3,但蒸馏模型在测试 3 中的正确率达到 98.6%。如果传输集仅包含训练集中的 7 和 8,则蒸馏模型的测试误差为 47.3%,但当 7 和 8 的偏差减少 7.6 以优化测试性能时,测试误差将降至 13.2%。

discussion

  我们已经证明,蒸馏对于将知识从集成或从大型高度正则化模型转移到较小的蒸馏模型非常有效。在 MNIST 上,即使用于训练蒸馏模型的传输集缺少一个或多个类的任何示例,蒸馏也能表现得非常好。对于 Android 语音搜索所使用的深度声学模型版本,我们已经证明,通过训练深度神经网络集合所实现的几乎所有改进都可以被提炼为相同大小的单个神经网络,部署起来要容易得多。对于非常大的神经网络,甚至训练一个完整的集合也是不可行的,但是我们已经证明,经过很长时间训练的单个非常大的网络的性能可以通过学习大量的专家来显着提高网络,每个网络都学会区分高度混乱的集群中的类别。我们还没有证明我们可以将专家的知识提炼回单一的大网络中。

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
神经网络知识进行提取,是一种将模型的信息转化为更为简洁和易于理解形式的过程。 神经网络是一种由许多神经元组成的复杂计算模型,它们通过学习和调整权重来解决各种问题。然而,神经网络通常具有大量的参数和复杂的结构,这使得它们难以解释和应用到其他领域。因此,我们需要一种方法来提取和总结神经网络知识,以便更好地理解和应用这些模型。 在进行神经网络知识提取时,有几种常见的方法。一种常见的方法是使用可视化技术,如热力图、激活图和网络结构图等,来可视化网络不同层的活动模式。这些可视化技术能够帮助我们发现网络的模式和特征,并从推断出网络的知识。 另一种方法是使用特征提取技术,如卷积神经网络(CNN)的滤波器、自动编码器的隐藏层和循环神经网络(RNN)的隐状态等,来提取网络学习到的重要特征。这些重要特征可以帮助我们更好地理解网络学习到的信息,并将其应用到其他问题。 此外,还有一种被称为知识蒸馏的技术,它通过训练一个较小的模型来提取大型模型知识知识蒸馏通过引入目标函数和额外的训练策略,使小模型能够学习到大模型的重要知识,并在不损失太多性能的情况下将其应用到实际问题。 总而言之,提取神经网络知识是一项重要任务,它能够帮助我们更好地理解和应用这些复杂的模型。通过可视化、特征提取和知识蒸馏等方法,我们能够从神经网络提取出有用的信息,并将其应用到其他领域或解决其他问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值