关注公众号,发现CV技术之美

随着深度学习与大数据的进一步发展,效果好的模型往往有着较大的规模和复杂的结构,往往计算效率与资源使用方面开销很大,无法部署到一些边缘设备、移动终端或者嵌入式设备上。因此,如何在保证模型性能的前提下减少模型的参数量以及加快模型前向传播效率,这是一个重要的问题,总的来说不同的模型压缩与加速技术具体可以分为以下四类:

1)参数剪枝与共享(Parameter pruning and sharing):参数剪枝和共享用于降低网络复杂度和解决过拟合问题。网络模型越大,参数也越多,但是可能很大一部分参数是冗余的,所以我们可以将那些对输出结果影响不大的参数减去,这样就可以使得模型运行速度更快、模型文件更小。参数共享可以参考卷积神经网络每个过滤器的权重是固定的,可以看作模板,只关注数据的某一种特性,同时可以减少参数与计算量。具体如下图1所示。

2)低秩分解和稀疏性(Low-rank factorization and sparsity):从线性代数的角度上来说,低秩矩阵每行或每列都可以用其他的行或列线性表出,其包含大量的冗余信息。低秩分解的目的在于去除冗余,并且减少权值参数,进一步来说权重向量往往分布在一些低秩子空间,所以我们可以用少量参数重建权重向量。在机器学习角度可以采用两个K*1的卷积核替换掉一个K*K的卷积核,这将减少大部分参数。具体如下图2所示。

3)传输/紧凑卷积滤波器(Transferred/compact convolutional filters):由于卷积神经网络的滤波器通过一个个卷积核进行特征提取,而较大的卷积核可以通过小型卷积核的拼凑进行替换,即一个5*5的卷积核可以通过两个3*3的卷积核代替进行特征提取。通过增加卷积核之间的约束关系来优化空间和计算,从而实现压缩卷积核、减少计算的目的。

4)知识蒸馏(Knowledge Distillation):知识蒸馏是近年来发展起来的一类模型压缩与加速技术,其主要是利用一个已经训练好的复杂模型(作为教师),将其学习到的决策信息(知识)迁移到另一个轻量级模型(作为学生)中,帮助和指导学生模型的训练。知识蒸馏旨在通过将知识从深度网络转移到小型网络来压缩和改进模型。

图1:参数剪枝与共享

图2:矩阵向量低秩分解

联邦学习(FL)是一种机器学习设定,其中许多客户端(例如,移动设备或整个组织)在中央服务器(例如,服务提供商)的协调下共同训练模型,同时保持训练数据的去中心化及分散性。其核心目标是为了在不暴露数据的情况下分析和学习多个数据拥有者的数据。

进一步来说,联邦学习主要面临四大挑战:通信效率(communication efficiency)、系统异构性(system heterogeneity)、统计异构性(statistical heterogeneity)与隐私安全(privacy security)。同时由于联邦学习特有的客户端-服务器的系统架构,导致模型往往需要尽可能的便捷,同时需要保证传输模型时的实时性(面向多数设备)与快速性(传输效率高)。

自然而然的,人们就将联邦学习与模型压缩加速技术进行结合。通过模型压缩加速技术在联邦学习的训练过程、传输过程或推理过程进行优化,从而尽可能保障模型的传输高效率和实时性。而近期知识蒸馏的技术发展最为迅速,因此涌现出来不少的联邦知识蒸馏相关的论文与想法。

接下来,我们将从知识蒸馏概述和联邦知识蒸馏两大主题探讨相关论文、经典算法和自己的理解思考。

知识蒸馏概述

知识蒸馏将复杂且大的模型作为 Teacher模型,将模型结构较为简单需要优化的模型作为 Student模型,然后用Teacher来辅助Student模型的训练。知识蒸馏希望学生网络在模拟老师的输出的时候尽可能学到类与类之间的相似性和差异,从而增强学生模型的泛化能力。

知识蒸馏的主要关键点在于:知识的类型、蒸馏方法和教师-学生网络的结构。由于蒸馏方法往往大同小异,主要在于怎么设计Loss(但大部分也是从欧式距离、余弦距离、相似性等角度来设计损失),同时教师-学生网络的结构设计涉及到模型架构方面也较复杂,所以从知识类别角度来对知识蒸馏进行概述(个人感觉如何定义一个新的蒸馏的知识是创新最大的地方)。

Logits KD:作为知识蒸馏的开山之作(链接1),Hinton在2014年提出基于logits的知识蒸馏方法,主要思想在于用学生网络的预测logits去学习教师网络的输出logits,从而引导学生网络训练,可以学习到自身预测不出来的类之间的相似性知识。主要方法是通过基于温度参数的softmax函数,对输出logits进行软化,将其看作一种知识从教师端转移到学生端。具体过程如下图3所示。

图3:Logits KD框架图(链接2

Hints KD:该论文(链接3)是第一个考虑到模型中间隐藏层的知识蒸馏方法,其主要是将模型隐藏层的特征看作是一种知识,然后学生网络通过学习教师网络的隐藏层特征知识,可以提升学生模型自己的性能,同时可以和logits KD方法在一起结合使用。

其主要示意图如下图4所示。损失函数主要使用了MSE Loss,如果教师网络和学生网络的隐藏层输出特征不同大小,那么将其变换成相同大小再进行损失计算。

图4:Hints KD框架图与损失函数(链接3)

Attention KD:该论文(链接4)将神经网络的注意力作为知识进行蒸馏,并定义了基于激活图与基于梯度的注意力分布图,设计了注意力蒸馏的方法。大量实验结果表明AT具有不错的效果。

论文将注意力也视为一种可以在教师与学生模型之间传递的知识,然后通过设计损失函数完成注意力传递,本质上来说学生模型学习到了教师模型针对输入数据权重更高的地方,即输入数据对模型的影响程度。具体如下图5所示。

图5:Attention KD框架图与损失函数(链接4

Cooperative KD:通常来说,大小模型的效果对比十分显著,意味着logits的差别是很大的,因而使小模型去逼近大模型的logits无疑是比较难的任务。该论文(链接5)通过结合课程学习思想,思考模型从易到难训练可能会有更好的效果,而从易到难的方法简单来说就是大小模型同时在下游任务进行微调,并在每个周期epoch中让大模型引导小模型进行学习。

关键之处在于:teacher模型和student模型共同训练、teacher和student模型loss损失的计算。同时教师模型不再固定参数,而是随着学生模型反馈而进行轻微改动。主要过程如下图6所示。

图6:Cooperative KD框架示意图(链接5

Similarity KD:在该论文(链接6)中提出了一种新的知识蒸馏损失形式,称为相似性知识,灵感来自于相似的输入会倾向于在训练的网络中引起相似的激活模式,与以前的蒸馏方法相比,学生不需要模仿教师的表示空间,而是需要在其自己的表示空间中保持与教师网络成对的相似性。

保持相似性的知识蒸馏指导学生网络的训练,使在训练的教师网络中产生相似激活的输入也在学生网络中产生相似激活。具体如下图7所示,当输入相同的数据时,学生网络学习教师网络的神经元激活。

更进一步来说,如果两个输入在教师网络中产生高度相似的激活,那么引导学生网络,这也会导致两个输入在学生中产生高度相似的激活;相反地,如果两个输入在教师中产生不同的激活,我们就希望这些输入在学生中也产生不同的激活。

图7:Similarity KD框架与损失函数示意图(链接6

Relation KD:该论文中(链接7)作者引入了一种新的方法,称为关系知识蒸馏(RKD),它可以转移数据示例的相互关系,对于RKD的具体实现,作者提出了距离和角度的蒸馏损失来惩罚关系中的结构差异。

作者主要将关系结构看作是一种知识,然后又通过欧式距离与余弦距离作为损失函数来传递知识,从而使得RKD训练学生模型形成与教师相同的关系结构。具体如下图8所示。

图8:RKD示意图与框架结构(链接7

知识蒸馏概述部分总结

通过若干知识蒸馏论文的解读我们可以发现,相比较而言,蒸馏知识的创新比较重要,一种知识的定义主要在于两方面:

1)在模型学习训练过程中,什么构成了知识;

2)如何将知识从教师网络转移到另一个学生模型中。

进一步而言,我们可以考虑从哪方面定义知识,例如模型的预测标签、模型网络的中间层、模型权重等等方面,或者综合多个角度进行结合,也可以考虑基于任务的知识蒸馏(例如目标检测、语义分割等任务),从而设计出基于任务的知识/蒸馏算法或者师生模型架构。

在传统联邦学习,传输的数据量和模型比例正相关,而且会随数据的Non-IID分布影响并减少准确度,所以有一些文章思考如何结合知识蒸馏与联邦学习从而带来效率与性能方面的提升。接下来,我们将结合一些文章解析基于联邦学习的知识蒸馏算法与思想。

参考链接

[1] Hinton, Geoffrey, Oriol Vinyals, and Jeff Dean. "Distilling the knowledge in a neural network." arXiv preprint arXiv:1503.02531 2.7 (2015).

[2] https://towardsdatascience.com/paper-summary-distilling-the-knowledge-in-a-neural-network-dc8efd9813cc.

[3] Romero, A., Ballas, N., Kahou, S. E., Chassang, A., Gatta, C., & Bengio, Y. (2014). Fitnets: Hints for thin deep nets. arXiv preprint arXiv:1412.6550.

[4] Zagoruyko, Sergey, and Nikos Komodakis. "Paying more attention to attention: Improving the performance of convolutional neural networks via attention transfer." arXiv preprint arXiv:1612.03928 (2016).

[5] Jin, X., Peng, B., Wu, Y., Liu, Y., Liu, J., Liang, D., ... & Hu, X. (2019). Knowledge distillation via route constrained optimization. In Proceedings of the IEEE/CVF International Conference on Computer Vision (pp. 1345-1354).

[6] Tung, F., & Mori, G. (2019). Similarity-preserving knowledge distillation. In Proceedings of the IEEE/CVF International Conference on Computer Vision (pp. 1365-1374).

[7] Park, W., Kim, D., Lu, Y., & Cho, M. (2019). Relational knowledge distillation. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 3967-3976).

END

欢迎加入「模型压缩交流群

【科普】联邦知识蒸馏概述与思考相关推荐

  1. 联邦知识蒸馏概述与思考(续)

    关注公众号,发现CV技术之美 前文([科普]联邦知识蒸馏概述与思考)提到知识蒸馏是一种模型压缩方法,通过利用复杂模型(Teacher Model)强大的表征学习能力帮助简单模型(Student Mod ...

  2. 【深度学习之模型优化】模型剪枝、模型量化、知识蒸馏概述

    前言 模型部署优化这个方向其实比较宽泛.从模型完成训练,到最终将模型部署到实际硬件上,整个流程中会涉及到很多不同层面的工作,每一个环节对技术点的要求也不尽相同.但本质的工作无疑是通过减小模型大小,提高 ...

  3. 知识蒸馏 | (1) 知识蒸馏概述

    原文地址 这是一篇关于[知识蒸馏]简述的文章,目的是想对知识蒸馏学习的内容和问题进行总结.笔者挑选了部分经典的paper详读,希望对于对KD有需求的同学提供一个概览和帮助. 引子 昆虫记里写道:&qu ...

  4. 知识蒸馏-Yolov3

    本人实验:利用上篇的"Learning Efficient Convolutional Networks Through Network Slimming论文阅读笔记"方法,成功将 ...

  5. 半监督学习的概述与思考,及其在联邦场景下的应用(续)

    关注公众号,发现CV技术之美 上一文([科普]半监督学习的概述与思考,及其在联邦学习场景下的应用)中,我们主要介绍了半监督学习相关的基础知识.方法以及一些SOTA论文,接下来我们将从联邦学习结合半监督 ...

  6. 通过无数据知识蒸馏优化全局模型,实现非iid联邦学习

    现有的大多数方法仅通过限制客户端本地模型更新来解决异构挑战,而忽略了直接全局模型聚合所导致的性能下降.相反,我们提出了一种无数据的知识蒸馏方法来微调服务器中的全局模型(FedFTG),这缓解了直接模型 ...

  7. 知识蒸馏,teacher—student模型的思考

    知识蒸馏,teacher-student模型的思考 这个方向的学术源头是Rich Caruana2014年的作品<Do Deep Nets Really Need to be Deep?> ...

  8. 联邦学习——用data-free知识蒸馏处理Non-IID

    <Data-Free Knowledge Distillation for Heterogeneous Federated Learning>ICML 2021 最近出现了利用知识蒸馏来解 ...

  9. 收藏 | 一文带你总览知识蒸馏,详解经典论文

    「免费学习 60+ 节公开课:投票页面,点击讲师头像」 作者:凉爽的安迪 来源 | 深度传送门(ID:deep_deliver) [导读]这是一篇关于[知识蒸馏]简述的文章,目的是想对自己对于知识蒸馏 ...

最新文章

  1. Linux执行mount挂载覆盖文件的还原
  2. vscode编辑器自动格式化
  3. 快速查询ABAP transport request lock status
  4. 什么字体字母和数字大小一样_字母和字体如何适应我们的屏幕
  5. 【LeetCode笔记】448. 找到所有不存在的数(Java、原地)
  6. python bottle部署g_python bottle框架(WEB开发、运维开发)教程 | linux系统运维
  7. centos7 mysql启动失败_Mysql主从复制
  8. python教程400集笔记,Python学习中的笔记--集合相关,python笔记--集合
  9. Pytorch 的迁移学习的理解
  10. java servlet深入理解_深入理解 Java Servlet
  11. AttributeError: ‘str‘ object has no attribute ‘decode‘ model = keras.models.load_model
  12. QTTabBar 汉化 给资源管理器添加标签、文件批量重命名依据扩展名选中等功能
  13. 舍得网-开发问题(学习别人经验)
  14. 【计算机网络微课堂】1.3 三种交换方式:电路交换、分组交换和报文交换
  15. pycharm主题背景图片设置
  16. 东方影都2003_东方影都旅游攻略|电影博物馆amp;外景街最in玩法,get了吗?
  17. 视频教程-【吴刚大讲堂】电商品牌文案设计方法-电子商务
  18. DenseBox: Unifying Landmark Localization with End to End Object Detection
  19. jhat中的OQL(对象查询语言)
  20. BEC商务英语词汇(浓缩版)

热门文章

  1. python发动机悬置解耦计算-按重心处整车坐标系解耦
  2. 非线性优化库liblbfgs初探
  3. SSM整合(相关jar包需求)
  4. MyBatis框架 接口绑定、线程绑定
  5. Golang笔记——channel(管道)
  6. KMP算法(待优化)--2015年7月25日14:04:25V1.0版
  7. 重装系统后电脑没有计算机也没有网络连接,电脑网络重置以后没有了wifi连接...
  8. 二级高级应用计算机考试环境,1.2 上机考试环境免费阅读_全国计算机等级考试无纸化真考题库二级MS Office高级应用免费全文_百度阅读...
  9. win10怎么修改服务器地址,电脑Windows10怎么修改IP地址的方法
  10. python获取列表长度方法_python - 在Pandas df列中获取有关列表长度(平均长度,最大长度等)的统计信息的大多数pandas-onic方法 - 堆栈内存溢出...