专栏名称: 哲学园
哲学是爱智慧, 爱智慧乃是对心灵的驯化。 这里是理念的在场、诗意的栖居地。 关注哲学园,认识你自己。
目录
相关文章推荐
哲学园  ·  乔治·萨顿新人文主义思想的历史哲学理解 ·  12 小时前  
哲学园  ·  科幻小说连载:接受:茶烟记(4) ·  昨天  
哲学王  ·  赵汀阳:哲学怎样才是有用的 ·  3 天前  
51好读  ›  专栏  ›  哲学园

DeepSeek使用的蒸馏技术有可能用来“偷窃”吗?一文读懂 “知识蒸馏”

哲学园  · 公众号  · 哲学  · 2025-01-31 00:00

正文

老蝉按: DeepSeek一路高歌猛进之时,美国从克制性赞美突然变脸为进攻性指责,说DeepSeek“偷窃”了诸大模型的东西。这其中必然牵涉众多技术问题,而“蒸馏技术”是一个核心点,下面让我们先分别使用DeepSeek和ChatGPT来回答标题中的问题,然后再看后面的科普“蒸馏技术”的文章。孰是孰非只能让子弹再飞一会儿,但不可否认的是,DeepSeek的表现是让人惊艳的,梁文峰是个有思想的企业家和金融家,中国太缺少这样的人才中国的西蒙斯震惊全球AI圈,这才是中国AI大模型该有的样子!

问:DeepSeek使用的蒸馏技术有可能用来“偷窃”吗?一文读懂 “知识蒸馏”


DeepSeek回答:

好的,用户问的是DeepSeek使用的知识蒸馏技术是否可能被用来“偷窃”。首先,我需要理解知识蒸馏的基本原理以及它在实际应用中的情况。知识蒸馏是一种模型压缩技术,通常是将大模型(教师模型)的知识迁移到小模型(学生模型)中,以提高小模型的效率和性能。用户可能担心的是,这个过程是否可能被用来窃取原始模型的知识或数据,从而侵犯知识产权。

接下来,我需要考虑知识蒸馏在什么情况下可能被视为“偷窃”。这涉及到法律和技术两个层面。技术上,知识蒸馏并不会直接复制教师模型的参数或训练数据,而是通过模仿教师模型的输出来训练学生模型。因此,从技术角度看,学生模型并不包含教师模型的原始数据,但可能捕捉到教师模型的一些行为模式。

法律层面,知识产权保护通常涉及版权、专利和商业秘密。如果教师模型本身是受版权保护的,那么未经授权使用其输出来训练学生模型是否构成侵权,目前法律界还在讨论中。例如,美国版权局认为,通过机器学习生成的内容可能不受版权保护,但如果训练数据包含受版权保护的材料,使用这些数据可能引发法律问题。

然后,我需要分析用户可能的真实需求。用户可能是担心他们的模型被他人通过知识蒸馏技术盗用,或者他们想了解在使用知识蒸馏时如何避免法律风险。因此,回答需要明确知识蒸馏的合法性边界,以及在何种情况下可能构成侵权。

另外,用户提到的“偷窃”可能还涉及到模型的逆向工程或数据泄露。需要区分知识蒸馏与直接复制模型参数或数据的行为,前者是合法的模型优化方法,后者可能涉及非法行为。

还要考虑实际案例,比如已有的一些法律纠纷,如GitHub Copilot被指控使用开源代码训练模型,这可能与知识蒸馏有关联,但具体情况不同。需要指出这些案例的差异,说明知识蒸馏在其中的角色。

最后,总结回答时需要强调,知识蒸馏本身是一种中立的技术,其合法性取决于具体使用场景和是否遵守相关法律法规。如果用户担心被侵权,建议采取技术保护措施,如模型加密、输出扰动,并关注法律动态,确保合规使用。

一、技术层面:知识蒸馏的本质

  1. 不直接复制数据或代码

  • 知识蒸馏的核心是学习教师模型的行为模式(例如分类概率、中间层特征),而非窃取其训练数据或参数。学生模型的训练数据可以是公开数据集,或是用户提供的自有数据。
  • 即使教师模型的训练数据包含敏感信息,知识蒸馏也难以直接“还原”原始数据,因为学生模型仅模仿输出逻辑,而非记忆具体样本。
  • 知识迁移的局限性

    • 学生模型的能力上限通常低于教师模型,且无法完全复现其所有细节。例如,教师模型中某些依赖海量数据的复杂模式可能无法被蒸馏到轻量学生模型中。
  • 技术防御手段

    • 输出扰动:对教师模型的预测概率添加噪声,干扰学生模型的学习。
    • 模型加密:限制对模型输出的访问(如API调用频率控制)。
    • 水印技术:在输出中嵌入隐蔽标记,追踪非法使用。
    • 教师模型可通过技术手段防止蒸馏滥用,例如:

    二、法律与伦理争议

    1. 知识产权边界模糊

    • 模型权重通常被视为商业秘密,受法律保护。但教师模型的输出结果(如预测概率)是否属于知识产权范畴,目前尚无明确界定。
    • 若教师模型的输出基于受版权保护的数据(如文本、图像),学生模型通过蒸馏学习这些输出,可能引发衍生作品争议(类似AI生成内容版权问题)。
    • 模型权重与输出的法律属性
  • 潜在侵权场景

    • 如果教师模型是闭源的,且用户通过逆向工程(如频繁调用API)获取大量输出用于蒸馏,可能违反服务条款或构成不正当竞争。
    • 典型案例:某些公司曾指控竞争对手通过API调用“盗用”其模型能力(如Scraping AI Services引发的法律纠纷)。
    • 未经授权的模型复制
  • 伦理争议

    • 即使法律未明确禁止,未经许可使用他人模型输出来训练竞争性产品,可能被视为“搭便车”行为,损害原创者的商业利益。

    三、知识蒸馏的合法与非合法用例

    合法场景争议或高风险场景
    使用开源模型作为教师(如BERT、ResNet)通过破解或滥用API获取闭源模型的输出进行蒸馏
    蒸馏自有模型以部署到边缘设备模仿受版权保护的数据生成逻辑(如代码、艺术作品)
    学术界公开的蒸馏方法研究利用蒸馏绕过模型许可证限制(如商用条款)

    四、如何规避风险?

    1. 对模型提供方

    • 在服务协议中明确禁止未经授权的蒸馏行为,并监控API调用模式。
    • 技术层面添加防御(如动态噪声、输出限速)。
  • 对模型使用方

    • 确保教师模型的输出获取符合法律法规和合同约定。
    • 优先使用开源模型或获得明确授权的模型进行蒸馏。
  • 对立法与行业

    • 推动明确AI生成内容、模型输出的权属规则(如欧盟《AI法案》的探索)。
    • 建立行业共识,区分合理优化与恶意竞争行为。

    总结

    知识蒸馏本身是一种中立的模型优化技术,但其是否构成“偷窃”取决于使用场景的合法性

    • 技术上,它不直接窃取数据或代码,但可能间接复现模型的行为逻辑。
    • 法律上,需遵守知识产权条款和服务协议,避免滥用闭源模型的输出。
    • 伦理上,需平衡技术创新与对原创者的尊重。

    未来,随着AI监管的完善,知识蒸馏的合规边界将逐渐清晰,但其“灰色地带”仍可能引发争议。



    问:DeepSeek使用的蒸馏技术有可能用来“偷窃”吗?一文读懂 “知识蒸馏”

    ChatGPT回答:

    知识蒸馏(Knowledge Distillation)是一种机器学习技术,主要用于将复杂的“大模型”的知识“压缩”到较小的“学生模型”中,以提高模型效率、减少计算成本和内存占用。它的基本原理和过程类似于“教师教学生”,但在这其中也引发了一些有关数据隐私和知识产权的争议。让我们一步步剖析这项技术的原理、应用与潜在风险。


    一、知识蒸馏的原理

    1. 教师模型(Teacher Model):
      通常是一个训练成本高、精度高的大型模型,经过大量标注数据训练而成。

    2. 学生模型(Student Model):
      是一个结构较小的模型,目标是学习教师模型的输出或行为,达到近似教师模型的性能。

    3. 过程:

    • 教师模型将输入数据的输出(如预测概率分布)传递给学生模型。
    • 学生模型通过模仿这些输出分布进行训练,不一定需要完全依赖原始训练数据。
    • 通过模仿教师模型的“软标签”(Soft Labels),学生模型能够捕捉到更多隐含的知识。

    二、知识蒸馏的优点与应用

    1. 模型压缩: 让小模型在移动设备、嵌入式系统等资源有限的场景中运行。
    2. 提高推理效率: 适用于实时应用,如自动驾驶、图像识别和语音处理。
    3. 迁移学习: 将特定领域的大模型知识转移到小模型上,适用于不同语言、任务和领域。

    三、知识蒸馏的潜在风险

    尽管知识蒸馏在技术上具有重要价值,但也引发了一些关于“知识窃取”的担忧。

    1. 侵犯模型知识产权:

    • 如果学生模型未经许可使用了由他人开发、训练的教师模型,它可能被视为侵犯了原模型的知识产权。
    • 例如,一些企业可能会通过知识蒸馏从竞争对手的模型中“复制”核心功能。
  • 模型“黑盒”攻击:

    • 即使无法直接访问原始数据,通过知识蒸馏技术,攻击者可以通过输入和输出的关系来逆向工程一个性能接近的模型。
    • 这种技术可能会在敏感领域(如金融、医疗)造成数据和模型安全威胁。
  • 数据隐私风险:

    • 蒸馏过程可能间接“泄漏”原始数据的信息,尤其是在原始数据对输出分布有明显影响的情况下。

    四、如何防范知识窃取?

    1. 模型加密和访问控制:
      通过加密技术或访问权限管理,限制他人对模型输入和输出的直接访问。

    2. 水印和模型指纹技术:
      给模型嵌入不可见的“水印”或“指纹”,用于追踪和验证模型来源。

    3. 法律和监管措施:
      确立相关法律法规,明确模型知识产权和数据隐私的保护范围与责任。


    五、总结:

    知识蒸馏技术本身并不是一种“偷窃”行为,但在未经授权的情况下使用他人模型进行蒸馏,可能触及法律和道德边界。为此,企业和研究机构在使用这项技术时应加强知识产权和数据隐私的保护措施。


    以下文章转自

    https://www.cnblogs.com/ZOMI/articles/18561270

    如涉版权请加编辑微信iwish89联系

    哲学园鸣谢

    【AI系统】知识蒸馏原理

    本文将介绍知识蒸馏(Knowledge Distillation, KD)的原理,这是一种通过从大型的教师模型向小型的学生模型转移知识来实现模型压缩和优化的技术。知识蒸馏的核心思想是利用教师模型在大量数据上积累的丰富知识,通过特定的蒸馏算法,使学生模型能够学习并吸收这些知识,从而达到与教师模型相似的性能。

    我们将探讨知识蒸馏的不同知识类型,包括基于响应的、基于特征的和基于关系的知识点,以及不同的知识蒸馏方式,如离线蒸馏、在线蒸馏和自蒸馏。此外,还将解读 Hinton 提出的经典知识蒸馏算法,以及知识蒸馏与自然界中物理蒸馏过程的相似之处。通过本文内容,读者将深入理解知识蒸馏如何作为一种有效的模型优化手段,在减少模型复杂度和计算开销的同时,保留高性能模型的关键知识。

    知识蒸馏概述

    知识蒸馏 (Knowledge Distillation, KD) 是一种用于模型压缩和优化的技术,最初由 Hinton 在文章“Distilling the Knowledge in a Neural Network”中提出,核心思想是从一个复杂的较大的模型(通常称为教师模型)中提取知识,将这些知识转移到一个精简的小模型(通常称为学生模型)中。

    这个过程能够显著减少模型的复杂度和计算开销,同时尽可能保留较大模型的性能。Hinton 在文章中使用了一个生动形象的比喻,将神经网络的知识蒸馏与自然界中昆虫的变态发育进行了类比:为了更加轻松地从非常大的、高度冗余的数据集中提取知识,神经网络模型一般会被设计的非常庞大复杂,对该模型的训练就像幼虫从环境中吸收养分一样,通过这个过程,模型逐渐积累了丰富的知识和能力。

    而知识蒸馏过程类似于幼虫变为成虫,通过蒸馏技术,庞大复杂模型中的知识被压缩并转移到一个较小的模型中。这个较小的模型与之相比更紧凑,它保留了较大模型中的重要知识,具备了很强的泛化能力和实用性。蒸馏后的模型就像成虫一样,能够在不同的应用场景中高效地运行,执行各种实际任务,解决实际问题。

    知识蒸馏通常应用于那些结构复杂的神经网络模型上,这些模型具有众多层次和大量参数,被当作教师模型来使用。如下图所示,在知识蒸馏过程中,一个小的“学生”模型通过模仿大的“教师”模型,学习和吸收教师模型中的知识,从而获得与教师模型相似甚至更高的准确度。

    随着深度学习在过去十年的迅猛发展,知识蒸馏技术已经在多个领域取得了显著的成功,包括语音识别、图像识别和自然语言处理等,知识蒸馏技术在实际应用中越来越受到重视,成为优化模型性能和部署效率的重要手段。

    知识蒸馏系统通常由三部分组成,分别是知识(Knowledge)、蒸馏算法(Distillation algorithm)、师生架构(Teacher-student architecture)。

    • 知识部分指的是从教师模型中提取的有价值的信息,可以是输出的 logits(未归一化概率)、中间层的特征表示或者模型参数等。
    • 蒸馏算法是用于将教师模型的知识传递给学生模型的具体方法和技术,确保学生模型能够有效学习和吸收这些知识。
    • 师生架构则是指教师模型和学生模型的设计和配置方式,包括它们之间的交互模式和训练过程。通过这三部分的协同工作,知识蒸馏系统能够实现从大模型向小模型的高效知识传递。

    知识类型

    大型神经网络中的知识来源非常丰富,不仅仅局限于模型在训练过程中学习到的权重(weights)和偏置(biases),还包括其他多种形式的信息。

    知识的类型可以分为四类,主要有 Response-based、Feature-based、Relation-based 三种,另外还有一种较少提及的类型,即 Architecture-based 的知识。

    response-based knowledge

    基于响应的知识通常是指教师模型的输出,例如分类任务中通过 softmax 函数处理后输出的类型概率分布(软标签)。这种方法利用教师模型对输入数据的预测结果来帮助学生模型学习,从而提高其性能。

    当知识蒸馏对这部分知识进行转移时,学生模型直接学习教师模型的最终输出,以使学生模型获得与教师模型一样的预测性能。

    通俗的说法就是老师充分学习知识后,直接将结论告诉学生。假设张量 zt" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 为教师模型的输出 logits,张量 zs" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 为学生模型的输出 logits,蒸馏学习的目标是让 zs" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 模仿 zt" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">,降低上图中的 distillation loss。图中基于响应的知识的 distillation loss 被表示为

    LResD(zt,zs)=LR(zt,zs)" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">(,)=(,)

    其中,LR()" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">() 为 zt" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 和 zs" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 的散度损失函数。使用基于响应的知识蒸馏方法的最大优势在于直接利用模型对样本的预测输出,而无需关注神经网络模型的内在结构或特征表达。

    这种方法简单而高效,适用于各种学习任务,包括普通的监督学习、涉及不同领域和模态的学习任务,以及一些特殊情况下的学习场景,如多模型学习、自监督学习。另外,基于响应的知识蒸馏与其他知识蒸馏方法的组合十分灵活,并且无需额外的设计,进一步提高了其适用性和实用性。

    feature-based knowledge

    上面一种方法学习目标非常直接,学生模型直接学习教师模型的最后预测结果,然而输出层提供的信息是有限的。在神经网络中,数据通过多个层次的神经元进行传递和处理,每一层都可以看作是对数据的一种特征提取和变换。

    随着网络的深度增加,每一层提取的特征都越来越抽象和高级,可以捕捉到数据中更加复杂和抽象的模式和结构。考虑到神经网络擅长学习不同抽象级别的多层特征表示,因此模型中间层的输出,即特征图,也可以作为指导学生模型学习的知识。

    这些来自中间层基于特征的知识是对基于响应的知识的良好扩展,特别适用于训练更瘦更深的网络。上图展示了 Feature-based knowledge 的知识蒸馏过程。

    基于特征的知识转移的蒸馏损失函数可以表示为:

    LFeaD(ft(x),fs(x))=LF(ϕt(ft(x)),ϕs(fs(x)))" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">((),())=((()),(()))

    其中 ft(x)" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">() 和 fs(x)" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">() 分别为教师模型和学生模型的中间层特征图。转换函数 ϕt(ft(x))" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">(()) 和 ϕs(fs(x))" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">(()) 通常在教师模型和学生模型的特征图形状不一致时使用。 LF()" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">() 是教师模型和学生模型的中间层特征图的相似度函数。

    虽然基于特征的知识转移为学生模型的学习提供了更多信息,但由于学生模型和教师模型的结构不一定相同,如何从教师模型中选择哪一层网络(提示层),从学生模型中选择哪一层(引导层)模仿教师模型的特征,是一个需要探究的问题。

    另外,当提示层和引导层大小存在差异时,如何正确匹配教师与学生的特征表示也需要进一步探究。

    relation-based knowledge

    上述两种方法都使用了教师模型中特定网络层中特征的输出,而基于关系的知识进一步探索了各网络层输出之间的关系或样本之间的关系。基于关系的知识蒸馏认为,知识的不仅仅是特征输出结果,而且还是网络层与层之间以及样本数据之间的关系。

    其重点在于提供一个一致的关系映射,使得学生模型能够更好地学习教师模型中的关系知识。例如将教师模型中某两层特征图的 Gram 矩阵(网络层输出之间的关系)作为知识,或者将数据样本之间的关系表示为数据样本在教师模型中的特征表征的概率分布,将这种概率分布(数据样本间的关系)作为知识供学生模型学习。

    上图展示了数据样本之间的关系知识蒸馏的过程,其蒸馏损失函数可以表述为:

    LRelD(Ft,Fs)=LR2(ψt(ti,tj),ψs(si,sj))" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">(,)=2((,),(,))

    其中,Fs" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 和 Ft" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 分别表示一组样本数据的从学生模型和教师模型得到的特征表征,而 ti" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">tjFt" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 表示单个样本在教师模型中的特征表征,同理 si" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> , sjFs" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> ,而 ψt()" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">() 与 ψs()" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">() 分别是 (ti,tj)" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">(,) 和 (si,sj)" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">(,) 的相似度函数,LR2()" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">2() 是关联函数(correlation function)。

    基于网络层的关系蒸馏只关注每个样本在不同网络层之间的关系知识,而忽略了同样存在于教师模型的空间结构中不同样本之间的关系信息。基于样本间关系的特征知识蒸馏正是利用了这种知识,将教师模型中捕捉到的样本间关系信息传递到学生模型中。

    知识蒸馏方式

    类似于人类教师和学生之间的学习模式,神经网络的知识蒸馏在学习方式上也有多种模式,一般分为三种:离线蒸馏(offline distillation),在线蒸馏(online distillation)以及自蒸馏(self-distillation)。

    offline distillation

    在离线蒸馏中,教师模型在学生模型训练之前已经完成训练,并且其参数在整个蒸馏过程中保持不变。这种方法是大部分知识蒸馏算法采用的方法,主要包含三个过程:

    1. 蒸馏前教师模型预训练:首先,教师模型在大规模数据集上进行训练,达到理想的性能水平。这个过程通常耗时较长且需要大量计算资源;
    2. 知识提取:将教师模型的知识提取出来,通常以教师模型对训练数据的输出(如概率分布或特征表示)的形式表示;
    3. 学生模型的训练:在学生模型的训练过程中,使用教师模型的输出作为指导。学生模型通过一个额外的蒸馏损失函数,学习如何模拟教师模型的输出。常见的蒸馏损失函数包括交叉熵损失和均方误差损失。

    该方法主要侧重于知识迁移部分,教师模型通常参数量大,一些庞大复杂模型会通过这种方式得到较小模型,比如 BERT 通过蒸馏学习得到 tinyBERT。

    它的主要优点在于能灵活选择预训练好的大型模型作教师,在蒸馏过程中教师模型不需要参数更新,而只需要关注学生模型的学习,这使得训练过程的部署简单可控,大大减少了知识蒸馏的资源消耗和成本,但这种方法的缺点是学生模型非常依赖教师模型。

    online distillation

    在线知识蒸馏中,教师模型和学生模型在同一训练过程中共同学习。教师模型不再是预先训练好的,而是与学生模型同步更新,教师模型和学生模型相互影响,共同提升性能,相互学习和调整。这种协同学习使得教师模型和学生模型可以动态适应数据变化和任务需求。

    在线知识蒸馏能够在没有预训练模型的情况下,针对不同任务实现知识学习和蒸馏,有助于多个模型在学习过程中互相调整和更新学到的知识,实现优势互补。特别是对于多任务学习等特殊场景,具有很大优势。相比于模型压缩,在线学习更适合于知识融合以及多模态、跨领域等场景。然而训练过程中,增加的模型数量可能会导致计算资源的消耗增加。

    self-distillation

    自蒸馏是一种比较特殊的知识蒸馏模式,可以看作是的一种特例,即教师模型和学生模型采用相同的网络模型的在线蒸馏。自蒸馏过程中,学生模型从自身的输出中进行学习,这意味着学生模型将深层的信息传递给浅层,以指导自身的训练过程,而无需依赖外部的教师模型。用学习过程比喻,离线蒸馏是知识渊博的老师向学生传授知识;在线蒸馏是老师和学生一起学习、共同进步;自蒸馏是学生自学成才。

    自蒸馏的提出主要是为了解决传统两阶段蒸馏方法的一些问题。传统方法需要预先训练大型教师模型,这会消耗大量的时间和计算资源。而且,教师模型和学生模型之间可能存在能力不匹配的问题,导致学生无法有效地学习教师模型的表征。

    自蒸馏方法克服了这些问题,它不需要依赖教师模型进行指导,而是通过学生模型自身的输出来提升性能。这种方法使得学生模型能够在没有外部指导的情况下自我提升,并且可以更加高效地进行模型训练。

    经典算法解读

    这一部分介绍 Hinton 在文章 "Distilling the Knowledge in a Neural Network" 中针对多分类任务提出的知识蒸馏方法。该算法流程主要可以概括为以下 4 个步骤:

    1. 训练教师模型;
    2. 教师模型的 logits 输出,在高温 T 下生成 soft target;
    3. 使用 Lsoft" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 与 Lhard" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 同时训练学生模型;
    4. 将温度 T 调为 1,学生模型用于线上推理。

    详细算法过程

    对于用于多分类任务的神经网络模型,最后全连接层输出的未归一化类别概率向量 z" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 被称为 logits,经过 softmax 函数处理后,这些 logits 会被转换成模型的类别预测概率。

    具体来说,softmax 函数会将每个 logit 值指数化,并对所有类别的指数化值进行归一化,使得它们的总和为 1。这样,softmax 函数输出的每个值都可以被解释为模型对相应类别的预测概率。这一过程使得 logits 转换为一组可以用于分类决策的概率分布,从而得出最终的预测类别。

    softmax 函数计算方法如下:

    qi=exp(zi)jexp(zj)" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">=exp()exp()

    其中 qi" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 表示不同类别的预测概率。这个预测结果是 soft target,而真实目标是 hard target,一般机器学习的目标就是让 soft target 逼近 hard target。

    Hinton 等人引入“蒸馏”的概念,在上式基础上添加一个温度系数 T" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">

    qi=exp(zi/T)jexp(zj/T)" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">=exp(/)exp(/)

    当 T=1" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">=1 时,就是标准的 softmax 函数。T 越大,得到的概率分布的熵越大,负标签携带的信息会被放大,负标签的概率分布会对损失函数有更明显的影响,模型训练会更关注这部分信息。为什么要重视负标签的信息?

    Hinton 举了一个例子,BMW 宝马被当做垃圾箱的概率很低,基本接近于 0,但还是比被当做胡萝卜的概率要高得多。当负标签的概率都很低时,负标签之间的概率差异仍然包含了一部分信息,而这部分信息往往被模型忽略(因为所有负标签概率接近于 0)。

    例如 MNIST 数据集中存在一个数字 2 的样本被预测为 3 的概率为 106" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">106,被预测为 7 的概率为 109" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">109,这部分负标签的信息就意味着这个数字 2 有可能与 3 和 7 有些相像。

    通常,在蒸馏学习过程中,将 T 适当调高并保持不变,使得学生模型可以学习到负标签的信息,等学生模型训练完成后,将 T 设为 1,用于推理。

    该蒸馏学习算法采用 offline distillation 的形式、教师-学生架构,其中教师是知识输出者,学生是知识接受者。算法过程分为两个部分:教师模型训练、学生模型蒸馏。教师模型特点是模型较为复杂,精度较高,对教师模型不做任何关于模型架构、参数量等方面的限制。

    论文中,Hinton 将问题限定为分类问题,即模型最终输出会经过 softmax 处理,得到一个概率分布。蒸馏过程中除了教师模型和学生模型,一个重要的部分是数据集,数据集可以是训练教师模型所用的数据集,也可以是其他的辅助数据集,可以是有标签的数据集,也可以是无标签的数据集。

    如果蒸馏过程中使用的数据集有标签,则学生模型的训练目标有两个,一个是模仿教师模型的输出,另一个是接近真实标签,而一般前者是主要目标,后者是次要目标。损失函数可写为:

    L=Lsoft+λLhard" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">=+

    Lsoft=jpjTlog(qjT)" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">=()

    Lhard=jcjlog(qj)" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">=()

    其中 pjT" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 表示教师模型在 T" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 下(T" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 通常大于 1)的预测结果,qjT" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 表示学生模型在 T" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 下的预测结果,cj" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 表示真实标签,qj" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; "> 表示学生模型在 T=1" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">=1 时的预测结果。当数据集无标签时,只能用 Lsoft" role="presentation" style=" padding-top: 1px; padding-bottom: 1px; display: inline-block; line-height: 0; font-size: 15.86px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">

    补充

    1. 知识蒸馏与物理蒸馏的相似之处:
    • 知识蒸馏通过 T 系数控制模型输出的熵;物理蒸馏通过温度改变混合物的形态,影响物理系统的熵
    • 温度系数 T 训练时提高,最后变回 1;物理蒸馏时温度先上升使液体变为气体,气体再回到常温变回液体
  • 知识从何说起:在神经网络模型中,对模型中的知识是难以观察的,从更抽象的角度理解,模型的知识就是模型输入向量和输出向量的映射关系。