teacher-student network

2023-11-18

最近读到一篇文章《An On-device Deep Neural Network for Face Detection》,讲的是苹果如何将基于深度学习的人脸识别方法应用到iPhone上,同时解决多任务并行及能耗的问题。文中提到了一个teacher-student network的概念。概括地讲,就是用一个更宽更复杂的,但是已经训练好的神经网络(教师网络),去训练另一个窄而深的网络(学生网络)。

    在Adriana Romero等人2014年发表的paper《FitNets: Hints for Thin Deep Nets》中给出了一种参数较少的解决方案,以下内容主要翻译自这篇paper。

1、介绍

本文提出了利用深度的方法来解决网络压缩问题。我们提出了一种新的方法来训练窄而深的网络,叫做fitnet,来压缩较宽宽较浅(实际上仍然很深)的网络。这个方法根植于最近提出的KD算法(Knowledge Distillation)(Hinton和Dean,2014),并扩展了这个想法,使其适用于更窄、更深的学生网络模型。我们从老师网络的隐藏层中引入了intermediate-level hints来引导训练学生的过程,我们希望学生网络(FitNet)来学习中间表示(对教师网络的中间表示的预测)。Hints可以训练更薄、更深的网络。结果证实,拥有更深层的模型可以让我们获得更好的范性,同时这些模型很窄,有助于我们显著减轻计算负担。我们验证了我们的方法可以匹配或胜过老师网络的性能,同时需要更少的参数和运算。

2、KD算法(KNOWLEDGE DISTILLATION)

    这个算法训练了一个学生网络,用一个来自更宽网络,教师网络的softened output。这样做的目的是让学生网络不仅能捕捉到由真实的标签提供的信息,但也包括由教师网络学习的更精细的结构。这个框架可以总结如下。
    举个例子,让T成为一个教师网络,它的输出是softmax PT=softmax(aT),它是教师的前软最大激活的向量。在这种情况下,教师模型是一个单独的网络,代表了输出层的加权和,而如果教师模型是一个集合,PT或是aT结果是通过不同网络的平均输出得到的(分别用于算术或几何平均)。让S成为一个包含参数 WS 和输出概率 PS=softmax(aS) 的学生网络,as是学生网络的pre-softmax输出。学生网络将接受训练,使其输出PS与教师的输出PT类似,以及真正的标签ytrue。由于PT可能与样本真实标签的一个热代码表示非常接近,因此引入了一个放松τ > 1来减轻教师网络输出所产生的信号,从而在培训过程中提供更多的信息。当与教师的软输出(PT)相比较时,同样的放松也适用于学生网络(PS)的输出:


然后训练学生网络以优化下面的损失函数:


这里H代表交叉熵,   是一个可调的参数,用来平衡两个交叉熵。我们注意到这个式子的第一项就是一个网络的输出和标签之间传统的交叉熵,而第二项则强制学生网络从教师网络的‘软’输出中学习。

    所以说,KD的设计使学生网络模仿教师网络架构,所以有类似的深度。尽管当学生网络的结构稍深一些时,我们发现了KD框架来达到令人鼓舞的效果。但随着我们增加学生网络的深度,KD训练仍然面临着优化深层网络的困难。

3、基于Hint的训练

为了训练很深的FitNet,也就是学生网络(比教师网络更深),我们从教师网络中引入hints的概念。hint 定义为教师网络隐藏层的输出,作用是指导学生网络的学习过程。类似地,我们选择了一个隐藏的FitNet层,即被引导层(the guided layer),从老师的提示层中学习。我们希望被引导层能够预测提示层的输出。注意,有提示是正则化的一种形式,因此,必须选择一对hint/被引导层,这样学生网络就不会过度调整。我们越深入地设置被引导层,我们给网络的灵活性就越小,因此,fitnets就越有可能受到过度调整的影响。在我们的例子中,我们选择hint为教师网络的中间层。类似地,我们选择学生网络的中间层作为被引导层。
考虑到教师网络通常比FitNet更宽,选择的提示层可能比被引导层有更多的输出。出于这个原因,我们向被引导层添加一个回归,它的输出与提示层的大小匹配。然后,我们将训练从第一层到被引导层的FitNet参数,以及回归的参数,通过最小化以下损失函数:


这里uh和vg是老师/学生网络的深度嵌套函数,它们取决于各自提示/被引导层的参数WH/WG,r是Wr参数下最顶端被引导层的回归函数。注意到uh和r的输出必须是可比较的,也就是说uh和r必须是同样非线性的。

尽管如此,使用一个完全连接的回归模型,在被引导和提示层是卷积的情况下,还是会显著增加参数的数量和内存消耗。令Nh,1*Nh,2、Oh分别表示教师网络提示层的空间大小和通道数量。相似的,让Ng,1*Ng,2、Og为FitNet被引导层的空间大小和通道数量。在一个完全连接的回归矩阵的权重矩阵中,参数的个数是Nh,1*Nh,2*Oh*Ng,1*Ng,2*Og。为了减少参数数量,我们使用了一个卷积的回归。设计卷积的回归使它与教师网络的提示层输入图像的空间区域大致相同。因此,“回归”的输出与教师的hint有相同的空间大小。

给定一个教师网络的提示层,大小Nh,1*Nh,2,回归函数使用了学生网络被引导层输出的大小Ng,1*Ng,2,同时通过一个式子调整内核的形状k1*k2:Ng,i-ki+1=Nh,i ,这样,参数数量为k1*k2*Oh*Og ,显然比之前少得多。

最后,一张图概括一下训练过程。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

teacher-student network 的相关文章

  • VS2017打开自身项目提示项目不兼容问题解决

    几天前用VS2017建的控制台程序 今天打开弹出对话框 提示版本不兼容 这我就很纳闷 VS2010的项目你打不开就算了 怎么自己的也提示版本不兼容 这重新创建一个再导入太麻烦了 在试了多次无果 而且百度到的都牛头不对马嘴 用NOTEPAD
  • PLSQL Developer的详细安装步骤

    1 下载地址http www allroundautomations com 下载下来 得到 2 解压到当前文件夹 3 双击plsqldev1105 x64 exe 安装PLSQL Developer 开发工具 点击plsqlev1105
  • uboot分析之第一阶段

    1 初始化 关看门狗 初始化时钟 初始化SDRAM 2 把程序从Nand flash 拷贝到 SDAM 3 设置SP sp指向某块内存 因为要调用c函数 就要使用栈 4 c函数就是读出内核 启动内核 1 起始位置 2 跳转到reset 3
  • 2020年高教社建模国赛真题A题--炉温曲线

    2020年高教社杯全国大学生数学建模竞赛题目 请先阅读 全国大学生数学建模竞赛论文格式规范 A题 炉温曲线 在集成电路板等电子产品生产中 需要将安装有各种电子元件的印刷电路板放置在回焊炉中 通过加热 将电子元件自动焊接到电路板上 在这个生产
  • StandardScaler类中transform和fit_transform

    StandardScaler类中transform和fit transform方法里 fit transform X train 找出X train的均值和 标准差 并应用在X train上 对于X test 直接使用transform方法
  • 机器学习常用十大算法

    基本的机器学习算法 线性回归算法 Linear Regression 逻辑回归算法 Logistic Regression 朴素贝叶斯算法 Naive Bayes 最近邻居 k 近邻算法 K Nearest Neighbors KNN 支持
  • 中路对线发现正在攻防演练中投毒的红队大佬

    背景 2023年8月14日晚 墨菲安全实验室发布 首起针对国内金融企业的开源组件投毒攻击事件 NPM投毒事件分析文章 紧接着我们在8月17日监控到一个新的npm投毒组件包 hreport preview 该投毒组件用来下载木马文件的域名地址
  • 信息收集 (一)Google Hack & robots文件

    一 Google Hack 在渗透测试中 信息收集是尤为重要的一部分 甚至可以占到整个渗透的百分之六十至七十 可见掌握好信息收集的方法十分重要 那GoogleHacking作为常用且方便的信息收集搜索引擎工具 它是利用谷歌搜索强大 可以搜出
  • nvm的安装

    当项目启动时npm i报错时 提示版本问题时 是因为项目中使用node版本过低而本地node版本太高时 需要切换低版本node 此时需要安装nvm node版本控制器 来进行版本切换 1 首先必须卸载本地node js 在我的电脑搜索nod
  • Dubbo 接口异常处理逻辑

    API 接口中抛出的异常类型 有一系列的规则 代码在 ExceptionFilter 的 onResponse 中 1 如果是受检异常 非Runtime 就直接抛出 这是因为如果是受检异常 接口定义的 throws 中需要涵盖 调用端需要捕
  • SQL server 基本增删改查(带练习示例)

    目录 建表sql语句 需要自己插数据 一 增加数据 1 插入单条数据 2 插入多条数据 二 修改数据 1 修改单列 修改刘德华的密码为123456 2 修改多列 修改小红的性别为女 年龄为30 三 删除数据 1 删除用户编号为3的用户信息
  • Python基本数据类型(三)

    一 set的函数说明 集合 set 是一个无序不重复元素的序列 基本功能是进行成员关系测试和删除重复元素 可以使用大括号 或者 set 函数创建集合 注 创建一个空集合必须用set 而不是 因为 是用来创建一个空字典 在python中set
  • python Django web 框架 (二十)之ORM

    Django之模型层第一篇 单表操作 一 ORM简介 我们在使用Django框架开发web应用的过程中 不可避免地会涉及到数据的管理操作 如增 删 改 查 而一旦谈到数据的管理操作 就需要用到数据库管理软件 例如mysql oracle M
  • 拿什么拯救你? rm -r

    天雷滚滚 天雷滚滚 天雷滚滚 作为一个Linux程序员 你能碰到的最伤心的事情 莫过于 编译了一整天的工程 不小心被rm r掉了 错误的执行了rm r 把文件系统都删除了 在嵌入式板子和PC之间切换的时候 不小心删错了目标 不要说你没有遇到
  • C++之数组

    C 基础 3 数组 3 1 一维数组 3 1 1 一维数组定义方式 3 1 2 一维数组数组名 3 2 二维数组 3 2 1 二维数组定义方式 3 2 2 二维数组数组名 3 数组 3 1 一维数组 概述 数组就是一个集合 里面存放了相同类
  • 进程、线程、管程、纤程、协程概念以及区别

    进程 进程是指在操作系统中能独立运行并作为资源分配的基本单位 由一组机器指令 数据和堆栈等组成的能独立运行的活动实体 进程在运行是需要一定的资源 如CPU 存储空间和I O设备等 进程是资源分配的基本单位 进程的调度涉及到的内容比较多 存储
  • WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connec

    python安装包错误 网络原因 直接改用阿里云镜像 然后再安装 pip config set global index url https mirrors aliyun com pypi simple 这就修改成功 接下来正常执行安装命令
  • docker 编辑容器内文件

    docker 编辑容器内文件 近期在学习docker 为编辑容器中文件 可以使用以下几种方法 特此记录 方法1 在容器中修改 使用vi命令编辑文件 注 如果vi命令没有 可以使用yum y install vim或者apt get inst
  • js-table2excel

    eslint disable let idTmr const getExplorer gt let explorer window navigator userAgent ie if explorer indexOf MSIE gt 0 r
  • 流程图中的实线_XMind如何在流程图中绘制实线箭头?XMind使用技巧

    如何利用xmind制作自己的思维导图 你好 建议你可以这样试试看 打开画图工具点击上方栏目 思维导图 在跳转专的页面点击 立即属体验 进入在线绘制界面 在画布的四周有很多的工具栏 这些在绘制的过程中都是可以使用的 首先 将中心主题进行确立

随机推荐

  • Java中StringBuffer类常用方法介绍

    StringBuffer类的介绍 StringBuffer是字符串缓存区 当new的时候是在堆内存创建了一个对象 底层是一个长度为16的 字符数组当调用添加的方法时 不会再重新创建对象 在不断向原缓冲区添加字符 查看字符串缓存区容量和长度
  • 快速傅氏变换之旅(一) 概念简介 3

    1 蝶形变换 普通的FFT算法称为基2的FFT算法 这种算法的核心是蝶形变换 长度为n 2 k1的变换共需要做 k1 n 2 次蝶形变换 如上图所示 若需变换数据表示为一个复数数组c 则每次蝶形变换有2个输入 c i c i s 两个输出
  • JS解密日记

    前言 JS混淆是通过改变JS代码的语法结构来使代码难以阅读和理解的技术 然而 请注意 混淆并不能真正保护您的代码 因为它仍然可以被解密和恢复其原始形式 直接上源代码 eval function p a c k e r e function
  • C11:mutex和lock_guard的使用.

    在C 11中 引入了有关线程的一系列库 且都在std命名空间内 下面演示一个使用线程的例子 非常的简单 引入了thread和mutex头文件 include
  • 攻防世界 inget

    打开网页提示 Please enter ID and Try to bypass 输入id绕过 尝试一下万能钥匙 尝试要不要符号闭合 http 61 147 171 105 49280 id 1 or 1 1 加个单引号成功 http 61
  • 【菜鸟C++学习杂记】ASCII码转换和显示

    笔者今年刚考上华东某高校的计算机研究生 本科虽是计算机学院 但期间主攻C 和Unity游戏开发 研究生属于小跨到计算机科学与技术 目前在进行硕导给的假期期间学习C 的任务 此类杂记主要记录下编码过程遇到的一些有趣的小知识 在某网课遇到了一个
  • 运用PL/SQL从1~100(包含边界)偶数之和

    1 第一种 方式实现 代码 set serveroutput on declare number integer 0 i integer 0 begin while i lt 100 loop number number i i i 2 e
  • 巴比特

    摘要 据 科创板日报 报道 当地时间5月9日 Meta宣布开源了一种可以横跨6种不同模态的全新AI模型ImageBind 包括视觉 图像和视频形式 温度 红外图像 文本 音频 深度信息 运动读数 由惯性测量单元或IMU产生 ImageBin
  • 为什么需要进程间通信??

    进程是一个独立的资源分配单元 不同进程 这里所说的进程通常指的是用户进程 之间的资源是独立的 没有关联 不能在一个进程中直接访问另一个进程的资源 例如打开的文件描述符 但是 进程不是孤立的 不同的进程需要进行信息的交互和状态的传递等 因此需
  • 微信公众号支付H5调用支付详解

    原文地址 http blog csdn net fengshizty article details 45564685 微信公众号支付 最近项目需要微信支付 然后看了下微信公众号支付 虽然不难 但是细节还是需要注意的 用了大半天时间写了个d
  • [Java]JAVA获取实体与List 数组的转换

    public class BeanToArray private String beanNames private Object values public BeanToArray public BeanToArray String bea
  • vs添加第三方库详解

    vs添加第三方库详解 一 编写库所生成的文件 核心文件 二 两种使用库的方式 此时添加一个Pro工程调用这个库 三 库导出函数时候的细节情况 四 新建工程使用这个库 以前总是不知道怎么使用第三方库 每次想学习一个库进行开发 总是遇到各种各样
  • Java中关于System.out.println/print的运算规则

    一 输出到控制台 System out println msg 输出一个字符串 带换行 n System out print msg 输出一个字符串 不带换行 n System out printf format msg 格式化输出 注 p
  • SpringMVC的请求(参数绑定注解、Restful风格的参数的获取、自定义类型转换器、获得Servlet相关API)

    SpringMVC的请求 获得请求参数 SpringMVC的请求 获得请求参数 SpringMVC的请求 获得请求参数 1 SpringMVC的请求 获得请求参数 配置全局乱码过滤器 2 SpringMVC的请求 获得请求参数 参数绑定注解
  • Serializable简单介绍

    Serializable 序列化 什么是序列化 序列化是将对象状态转化为可保持或者传输的格式过程 与序列化相反的是反序列化 完成序列化和反序列化 可以存储或传输数据 一般情况下 在定义实体类时会使用Serializable 为什么要序列化对
  • 硬件学习——I2C

    I2C简单来讲就是2线的串行总线 由SDA Serial Data Line 和SCL Serial Clock Line 构成 它遵循主从结构 允许多主多从 主设备 发起 停止数据输出 并且通过控制时钟来控制数据传输过程 从设备 响应主设
  • 若依vue分离版使用字典

    首先来看官方文档 接下来我们进行操作 第一步已经添加完 来做第二步 打开index vue 在index vue中 找到变量定义的位置 一般在data 中 定义一个新数组
  • LayUI中的基本元素之面板

    前言 最近在准备找工作的事项 但是作为一个后台也是需要了解一些前端框架的 就目前的来说有大火的VUE 但是VUE还是存在一定的学习成本 所以决定先从对后台友好的LayUI开始入手先做一些小项目练练手 后面会考虑使用VUE ElementUI
  • React.Component

    React Component 本章节提供了 React class 组件的详细 API 参考 本章节默认你已熟悉基本的 React 概念 例如 组件 Props 以及 State 生命周期等 概览 React 的组件可以定义为 class
  • teacher-student network

    最近读到一篇文章 An On device Deep Neural Network for Face Detection 讲的是苹果如何将基于深度学习的人脸识别方法应用到iPhone上 同时解决多任务并行及能耗的问题 文中提到了一个teac