zoukankan      html  css  js  c++  java
  • 神经网络模型压缩和加速之知识蒸馏

    深度神经网络模型压缩和加速方法

    综合现有的深度模型压缩方法,它们主要分为四类:

    1、参数修剪和共享(parameter pruning and sharing)

    2、低秩因子分解(low-rank factorization)

    3、转移/紧凑卷积滤波器(transferred/compact convolutional filters)

    4、知识蒸馏(knowledge distillation)

    具体参考https://www.cnblogs.com/shixiangwan/p/9015010.html

    下面详细讲解下知识蒸馏

    “蝴蝶以毛毛虫的形式吃树叶积攒能量逐渐成长,最后变换成蝴蝶这一终极形态来完成繁殖。”

    毛毛虫的形态是为了更方便的吃树叶,积攒能量,但是为了增大活动范围提高繁殖几率,毛毛虫要变成蝴蝶来完成这样的繁殖任务。

    蒸馏神经网络,其本质上就是要完成一个从毛毛虫到蝴蝶的转变。基础的蒸馏网络中存在两种类型的神经网络,一种称为教师网络,好比于毛毛虫阶段的积攒能量的过程,教师网络是为了抽取更优的特征表示,学习到更多数据分布的特性,另一种称作学生网络,好比于灵活的蝴蝶阶段,在准确率和教师网络相当的前提下通过减少网络层和每层的参数以用于更高效的进行工程化的部署以及应用。

    第一篇论文《Distilling the Knowledge in a Neural Network》蒸馏神经网络的提出论文

    目前,在用神经网络训练大规模数据集时,为了处理复杂的数据分布:一种做法是建立复杂的神经网络模型,例如含有上百层的残差网络,这种复杂的网络往往含有多达几百万个参数;另一种做法往往会混合多种模型,将几个大规模的神经网络在同一个数据集上训练好,然后综合(ensemble)多个模型,得到最终的分类结果。

    其中的问题是:这种复杂模型,一是在新的场景下重新训练成本过高,二是由于模型过于庞大而难以大规模部署(deployment)。

    设计思路:最基本的想法就是将大模型神经网络(教师网络)学习出来的知识作为先验,将先验知识迁移到小规模的神经网络中训练更小但性能仍较好的小型神经网络(学生网络)。

    知识的迁移方式

    一种直观的迁移Big model(教师网络)知识的方式是,将教师网络生成的类别概率向量作为训练small model(学生网络)的soft targets.

    soft targets:经过softmax层的输出

    hard targets:one-hot形式的0-1编码

    为什么这样做?

    一方面大规模神经网络能够得到更为丰富的数据结构间的相似性以及数据的分布信息,另一方面soft targets相比于hard targets包含更为丰富的信息。

    例如:一只狗,在猫这个类别下的概率值可能是0.001,而在汽车这个类别下的概率值可能就只有0.0000001不到,这能够反映狗和猫比狗和汽车更为相似,这就是大规模神经网络能够得到的更为丰富的数据结构间的相似信息。

    知识蒸馏的整个过程如下:

                                                      训练部分                                                                                                                                      预测部分

    先看左边的图

    加入蒸馏后的softmax

    T是一个可调节的超参数、T值越大、概率分布越软(论文中的描述)。这就相当于在迁移学习的过程中添加了扰动,从而使得学生网络在借鉴学习的时候更有效、泛化能力更强,这其实就是一种抑制过拟合的策略。

    一般T的取值在1-20之间

    soft targets和小模型的输出数据的交叉熵(保证小模型和大模型的结果尽可能一致)

    hard targets和小模型的输出数据的交叉熵(保证小模型的结果和实际类别标签尽可能一致)

    Total loss设计为软目标和硬目标所对应的交叉熵的加权平均,其中软目标交叉熵的加权系数越大,表明迁移诱导越依赖教师网络的贡献,这在训练初级阶段是很有必要的,有助于让学生网络更轻松的鉴别简单的样本,但训练后期需要适当减小软目标的比重,让真实标注帮忙鉴别困难样本。(论文中没具体提及,加权系数应该设置为逐渐衰减的)

    总结:什么是KDDistilling the Knowledge),一句话总结,就是用teacher network的输出作为soft label来训练一个student network

    我们把数据结构信息和数据本身当作一个混合物,分布信息通过概率分布被分离出来。首先,T值很大,相当于用很高的温度将关键的分布信息从原有的数据中分离,之后在同样的温度下用新模型融合蒸馏出来的数据分布,最后恢复温度,让两者充分融合。这也可以看成Prof. Hinton将这一个迁移学习过程命名为蒸馏的原因。

     

  • 相关阅读:
    数据库原理与应用-------------触发器和视图
    Python操作SQLServer示例
    基于python的图片修复程序-可用于水印去除
    Android APK反编译就这么简单 详解
    android官网文档学习笔记
    android散点技术
    读书笔记一
    eclipse的各种错误和解决方法
    css
    响应式设计
  • 原文地址:https://www.cnblogs.com/dyl222/p/11079489.html
Copyright © 2011-2022 走看看