Rocket Training: 一种提升轻量网络性能的训练方法 by leona

Rocket Training: 一种提升轻量网络性能的训练方法

参考博客:

https://www.jianshu.com/p/ec28185510b7

https://blog.csdn.net/cskywit/article/details/78987500

https://mp.weixin.qq.com/s/UkqwPBYgYQuIB9_jGMt2QQ

论文及代码:

paper: https://arxiv.org/abs/1708.04106

code: https://github.com/zhougr1993/Rocket-Launching

针对问题:

工业上很多问题需要快速的响应时间,例如在线广告推荐系统需要在几毫秒内预测数以百计的广告,需要很短的响应时间。

背景:

通常有两种解决方法可以在保证运行效果的前提下提高运行速度,一种是压缩模型减小计算量,如SVD,MobilleNet,ShuffleNet;另外一种是采用teacher-student策略(本文采用此种策略),实际运行的时候使用层数较少参数量较少的light net,此网络在训练的时候会借助一种复杂的teacher network来辅助训练。可以有效减小运行时间,还可以与第一种方法相结合。

Light net 可以在训练阶段从额外的训练好的模型中获得信息,大规模的复杂的网络中的信息可以转化到一个轻量的网络中。

算法思想:

轻量的网络也可以得到和复杂的深层网络相似的效果。

本文提出一种新的网络训练方法,rocket network,同时训练两个网络:light net 和booster net,light net 是用于推断的目标网络,booster具有更深更复杂的网络。在训练过程中,light net 和booster net针对同一问题同时训练。此外,light net还通过优化hint loss不断获取booster学习到的知识,目标函数中也包含了这一点,使两网在训练过程中具有相似的行为。Booster在整个训练过程中指导light的优化。应用阶段,只使用light推理。

本文主要贡献:

1、 提出一种新的训练方法

2、 分析不同的hint loss functions在light和booster之间的信息传递效果;

3、 为了使light更像booster,使用了gradient block来消除hint loss的反向传播对booster的影响,使booster更新参数的时候更多的依赖于gt,有利于网络之后的表现。

实现细节:

网络结构:

期望在训练的过程中,除了light net的学习结果接近label之外,也与booster学习到的具有更强表现能力的结果相近。使用hint loss来将booster的学习结果转化到light net。

损失函数:

最后一项为hint loss

参数共享:

与通常的teacher-student方法不同的是,本文的light和booster共用了一些较低层,并对他们同时进行训练。有一部分参数共享可以让light更好的近似booster的学习结果。在多任务方式中共用底层参数,可以减少参数量,提高泛化能力,更快收敛。

同时训练:

在大多数teacher-student方式中,teacher网络提前训练好,在指导student网络的过程中,参数是不变的。本文认为从teacher网络中学习的内容不仅仅存在于teacher网络的输出结果上,更存在与整个训练过程中,因此让两个网路一起训练。Light不仅学习复杂网络的输出与gt的区别,同时也近似学习能力更强的复杂网络的到最终结果的过程。这样也比单独训练两个网络的用时短。

Hint loss functions:

最小化hint loss, 使light和booster更接近。考虑了3种不同的hint loss:

MSE的梯度:

梯度与light net网络的输出成正比,如果li(x)是绝对值非常大的负数,将导致pi(x)接近于0,梯度会消失,学习不到输出的差异。

Lmimic(x)的梯度:

避免了MSE的梯度消失的缺点,实验效果最好。

KD散度的梯度:

引入了温度参数T使得类间概率分布更柔和,温度很高时,梯度如下:

也会产生梯度非常小的情况。

Gradient block

同时训练两个网络时,light与booster共享部分参数,必不可免的会对booster的训练产生影响,使其不能直接学习任务。因为light的学习性能是比较差的,不可避免的造成booster的学习效果变差。Light学习的信息是从booster传递的,booster性能的降低又会反过来影响light的性能。

为了解决这个问题,在训练阶段,使用gradient block模块来阻止booster受最小化hint loss的影响。

在hint loss的反向传播过程中,固定booster net独有的部分的参数WB,然后使用此刻booster net的分布作为监督light net学习的目标。固定WB的这一操作使得booster不受light net 的影响,可以直接从gt学习,达到它最好的性能。

实验效果:

在CIFAR-10数据集上对wide residual net做了rocket training,WRN有三组block,每个block有两个卷积层,比原来的ResNet的卷积层更宽,有更多的参数,有更强的表达能力。

下图是对WRN应用了rocket training 的网络结构图,红色的是共享层,在较低的组中,黄色的分支是light net,蓝色的是booster部分,在预测阶段会被移除,

原文地址:https://www.cnblogs.com/bupt213/p/11052040.html

时间: 2024-08-28 19:15:41

Rocket Training: 一种提升轻量网络性能的训练方法 by leona的相关文章

一种简单,轻量,灵活的C#对象转Json对象的方案

简单,是因为只有一个类 轻量,是因为整个类代码只有300行 灵活,是因为扩展方式只需要继承重写某个方法即可 首先我将这个类称之为JsonBuilder,我希望它以StringBuilder的方式来实现Json字符串的转换 public class JsonBuilder { protected StringBuilder Buff = new StringBuilder(4096);//字符缓冲区 public string ToJsonString(object obj) { .......

elasticsearch(4) 轻量搜索

一 空搜索 搜索API的最基础的形式是没有指定任何查询的空搜索 ,它简单地返回集群中所有索引下的所有文档: 示例 GET 127.0.0.1:9200/_search 响应 { "took": 166, "timed_out": false, "_shards": { "total": 10, "successful": 10, "skipped": 0, "failed&qu

阿里云轻量服务器价格及轻量与ECS服务器区别比较

https://yq.aliyun.com/articles/221647 摘要: 阿里云轻量应用服务器价格表及介绍,关于轻量应用服务器和ECS服务器的性能对比 阿里云轻量应用服务器是阿里云新推出的服务器,本文介绍阿里云轻量服务器的价格,已经何为"轻量"?轻量与阿里云ECS服务器有什么区别?轻量性能就一定不如ECS服务器吗? 什么是轻量应用服务器?轻量应用服务器是面向单机应用场景的新一代计算服务,提供精品应用一键部署,支持一站式的域名.网站.安全.运维.应用管理等服务,极大地优化了搭建

Wenaox 一款轻量性能好的微信小程序状态管理库

前言 感慨一下!!! 从开始开发 wenaox 从开始到现在,,时不时更新一下,改一改 bug,却发现已经快 1 年了 orz 虽然很少人用 hhh,但偶尔也会有人提一些问题,我就知道还有人用的~ Wenaox 是不是应该介绍一下 wenaox ? 特点 支持中间件 中大型项目可多个 contro 区分模块 asyncs 自带 loading 轻量.性能好 哎?其实好像也没什么好说的,不如感兴趣的朋友直接去 github 看文档吧(捂脸 点击我查看 wenaox 文档 不介意给个 star,鼓励

提升高并发量服务器性能解决思路

刚刚在网上淘了一个提升高并发量服务器性能解决思路,个人感觉非常不错,给大家分享出来,希望给您有所帮助. 提升高并发量服务器性能解决思路 一个小型的网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单.随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件.编程语言.数据库.WebServer.防火墙等各个领域都有

OWIN轻量型框架介绍

OWIN轻量型框架介绍 阅读目录 引言 框架的特色 如何启动 各项功能 静态路由的3种写法 伪静态路由的支持 处理Form表单提交的文件 流式处理Post请求的数据 多种请求类型自动识别 响应处理 请求响应上下文 自定义默认处理函数 内置各种便捷函数 复合类型的请求处理 框架的扩展 静态内容的支持 跨域Post的支持 基础类型继承灵活处理 尾声 回到顶部 引言 什么是OWIN,我就不介绍了,请自行搜索,这里主要是介绍自行开发的OWIN框架的特点和用法.由于.NET的web框架都比较庞大,导致性能

faked 一个用于 mock 后端 API 的轻量工具

一.简介 faked 是一个在前端开发中用于 mock 服务端接口的模块,轻量简单,无需要在本地启动 Server 也无需其它更多的资源,仅在浏览器中完成「请求拉截」,配合完整的「路由系统」轻而易举的 mock 后端 API. GitHub Rep 地址:https://github.com/Houfeng/faked 二.安装 faked 有两种可选安装方式,你可以通过传统的 sciprt 方式引入 faked,如果你采用了 CommonJs 或 ES6 Modules 模块方案,也可通过安装

巧用命令行工具UCloud CLI,轻量操作API管理云资源

截止目前,UCloud已提供Python/Java/Golang等不同语言的API SDK.为进一步降低用户的运维人力投入,又推出了基于Golang SDK的命令行工具CLI(Command Line Interface),提供轻量化的API命令行调用方式,并在GitHub开源(https://github.com/ucloud/ucloud-cli).CLI的命令行交互方式更符合研发运维的操作习惯,并且一些典型使用场景通过CLI也更容易代码化的沉淀和维护. 下面是一些用户遇到的实际场景, 用C

Metricbeat 轻量型指标采集器

一.介绍 用于从系统和服务收集指标.从 CPU 到内存,从 Redis 到 Nginx,Metricbeat 能够以一种轻量型的方式,输送各种系统和服务统计数据. 1.系统级监控,更简洁(轻量型指标采集器) 将 Metricbeat 部署到您所有的 Linux.Windows 和 Mac 主机,并将它连接到 Elasticsearch 就大功告成啦:您可以获取系统级的 CPU 使用率.内存.文件系统.磁盘 IO 和网络 IO 统计数据,以及获得如同系统上 top 命令类似的各个进程的统计数据.