蚂蚁金服AAAI收录论文曝光,动态网络剪枝方法、无语预训练的网络剪枝技术有重大突破...
来源 | 蚂蚁金服
责编 | Carol
出品 | AI科技大本营(ID:rgznai100)
一年一度在人工智能方向的顶级会议之一AAAI 2020于2月7日至12日在美国纽约举行,旨在汇集世界各地的人工智能理论和领域应用的最新成果。以下是蚂蚁金服的技术专家对入选论文《基于可解释性通道选择的动态网络剪枝方法》与《无语预训练的网络剪枝技术》做出的深度解读。
让我们先来看看《基于可解释性通道选择的动态网络剪枝方法》。
基于可解释性通道选择的动态网络剪枝方法
动态剪枝网络可以通过根据不同的输入动态决定推理路径,实现实时线上加速目的。之前的方法大多直接对每个权重通道输出连续重要值,来决定权重的使用情况,但缺乏清晰可理解的剪枝过程。
本文中我们提出显式建模权重通道离散选择过程,以便于实现各稀疏多样的运行时推理路径。与此同时,借助于可理解的逐层权重通道选择过程,我们可以清晰地可视化出模型决策过程以供模型理解。同时我们还发现正常样本和对抗样本在动态网络中有着明显不同的决策路径。基于此我们提出一种高效的对抗样本检测方法。
动态剪枝方法相比于静态剪枝方法,可以在实时计算时进行网络计算路径选择,从而可以针对不同输入进行剪枝。相比于静态剪枝方法只能使用单一压缩网络,动态剪枝方法可以在保留完整模型基础上,选择多样的计算路径。然而已有方法对于计算路径,也即权重通道的选择,是直接产生连续控制门值。这无法反映出清晰可理解的剪枝过程。而且所产生的剪枝决策趋于相同缺乏多样性,而这也实际上退化成为静态剪枝。
在本文中我们提出通过显示建模离散权重通道决策来实现动态剪枝算法。具体来说我们针对每一个计算层(如CNN中的卷积层),附属一个决策单元,用以输出对应于一组有限通道选择掩码的概率分布。该分布决定了哪一组通道选择掩码用了提取权重,进行实际上的运算过程。在实验中我们发现该方法可以提供明确且可理解的动态模型决策过程。针对不同输入,模型各层决策单元产生的决策特征与输入类别语义高度相关。
同时我们也观察到对于对抗样本的决策路径与正常样本有显著不同,这反映了模型针对这两大类样本不同的响应特性。我们利用这一现象开发了一种基于动态决策特征的对抗样本检测算法。实验表明我们的动态剪枝网络不仅可以减少模型实时计算量,提高模型预测准确性,同时还可以有效防御对抗样本攻击,构建更为鲁棒的模型。
解读
动态剪枝网络中的核心部分为决策单元,其概览总结如上图所示。首先决策单元其接受输入(
为单元参数),产生一个概率分布
对应于一组通道选择掩码
。而对应于最大概率的选择掩码将被用来构建实际用来运算的权重。在训练阶段,由于存在离散选择输出,在训练过程中为解决不可导问题,我们采用了连续松弛技术,将选择指标重参数化成为:
其中为输出概率,
为Gumbel随机变量,
为温度参数控制概率聚集度。而对于选择掩码则采用端到端学习,自动调整权重通道重要值。为了使其产生尽量稀疏的通道掩码,我们增加了正则项:
目的是让整体控制门变量稀疏度接近于目标稀疏度r。
我们在CIFAR10和ImageNet数据上进行实验,下表示总结和其他静态和动态剪枝方法对比结果。可以看出相比于其他剪枝方法,我们的动态剪枝策略可以达到更高的动态剪枝率和预测性能。
除了带来剪枝结果的提升,我们还发现将各层决策单元对每个样本所产生的决策概率拼接在一起,作为一种新的依赖于样本输入的“决策特征”,则此特征与样本类别有强相关性。同时该特征对于正常样本和对抗样本有明显的区分特性。
上图展示了CIFAR10上50000个样本共十类决策特征在三种对抗攻击下UMAP可视化方法下的结果。可以看出,彩色点代表正常样本点,其相似类别的决策特征有明显聚集特性;而灰色代表所有对抗样本点,会发现与所有正常样本点均有区分。鉴于此,我们利用简单的二分类器,在此决策特征上进行训练,实现对抗样本检测算法。下表展示了我们提出的对抗样本算法和其他检测算法的对比,我们的算法均取得了检测性能的提升。
前景
在蚂蚁金服中,对于异常样本和对抗攻击样本的检测防御至关重要,因为这影响着服务模型系统的安全性和稳定性。上文从动态剪枝网络出发,在减少模型实时运算量同时,利用其可理解的决策过程和决策特征,实现对抗样本检测算法,为构建鲁棒安全稳定的机器学习系统提供基础。
无语预训练的网络剪枝技术
而说到网络剪枝,不可否认,网络剪枝是一项重要的研究领域,其旨在通过减少神经网络中冗余参数和结构,达到加速推理目的。传统方法遵循固定流程,即先训练一个冗余大网络,然和通过各种剪枝策略决定将不重要的权重通道进行删除,最后再进行微调提升性能。
通过研究发现,我们无需利用预训练及冗余参数即可得到有效的压缩网络结构。实际上我们完全可从随机初始化权重即可得到剪枝结构。因此我们提出全新的无预训练完全从头开始的剪枝流程,可以大大减少剪枝过程开销,并且得到网络结构在充分训练后可以达到更高的预测性能。
随着深度学习网络被广泛应用,减少模型大小和运行延时也成为逐渐关注的需求,这对于部署于边缘移动端设备有实际应用价值。网络剪枝技术即通过去除模型中冗余参数结构,来达到模型压缩和推理加速的目的。
传统网络剪枝方法基本采取三阶段流程,即预训练,剪枝和微调。其中预训练提供冗余参数和结构,剪枝利用不同策略去除参数,微调负责最后进一步提升模型性能。但是这些环节引入了繁琐耗时的网络优化过程,而且最终压缩网络结构及参数和原始模型甚至无依赖关系。因此我们自然提出疑问:是否必需要从一个预训练好的模型中才可以得到剪枝模型结构?
在本文中我们通过实证发现,一个有效的剪枝结构无需从预训练权重得到。实际上预训练权重得到的剪枝结构往往是同质缺乏多样性的,这很有可能限制了更好性能结构的探索。我们发现直接从随机初始化权重即可以剪枝得到更多样且最终性能更好的剪枝结构。这不仅极大的加速了模型剪枝流程,减少费时繁重的训练过程,同时也为模型剪枝领域提供了一个强有力的基准结果。
解读
对于一个神经网络f(x;W),其中为输入样本,为W模型参数,为了高效的学习到关于各层权重通道重要性的系数,我们对于每一层权重,按照其通道维度附属一个控制门变量。该变量将会直接与模型输出逐通道相乘,调节每层实际输出响应。因此一个接近于0值的控制门代表对应权重通道可以被删除。对于所有控制门变量
,整体优化目标为:
其中为样本对应标签,
为交叉熵损失函数。相比与传统剪枝策略,此处我们有两点不同。第一在优化过程中,不更新模型权重。第二我们使用随机初始化的权重而非来依赖于预训练模型。
在得到一组优化后的控制门值,我们可以设置阈值去决定哪些通道被删除。为此,我们通过一种简单的二分搜索策略来去搜索阈值,使得所对应的剪枝结构刚好满足计算量约束。整体算法总结在此。
我们在CIFAR10和ImageNet数据集上,针对各种模型进行了广泛的实验。在同样计算量约束下,我们的剪枝方法流程所得到模型可以达到更高的预测性能,更小的模型参数和更少的计算延迟。
前景
在蚂蚁金服中,我们存在着诸多移动端设备深度学习模型的应用。为了解决模型在满足计算量和延时的约束下,需要经过手工设计调整实现模型缩减。但这也导致整个流程重复且繁重。我们的研究指出,可以在给定计算约束下,直接从随机网络权重出发,实现压缩结构的搜索。这不仅减少了大量人工调整的环节,也取得了性能更好更高效的模型结构。
【end】
◆
精彩推荐
◆
福利直达!CSDN技术公开课评选进行中,参与投票即有机会参与抽奖!大奖福利请见下方海报,承担你的2020全年技术干货!
推荐阅读
技术驰援抗疫一线, Python 线上峰会免费学!
11年艺术学习“转投”数学,他出版首本TensorFlow中文教材,成为蚂蚁金服技术大军一员
2.7 亿学生宅家上课,家长有意见了......
2020 年,远程办公太难?技术大佬齐支招!
数据分析如何帮助揭示冠状病毒的真相?
2020年区块链领域最具影响力人物Top 2
你点的每个“在看”,我都认真当成了AI
相关文章:

安装 Enthought Tool Suite 时遇到的问题
文:fasiondog 来源:http://blog.csdn.net/KongDong/archive/2009/05/26/4217942.aspx 因想研究一下Enthought Tool Suite ,尤其是可能需要使用其中的Chaco 和Envisage 软 件包,便安装试用一下。刚开始装机时曾经使用新立得安装过…

SQL知识累积
详细介绍select的文章,展示原始数据、SQL、查询结果,以及在不同数据库下SQL应该如何写。 https://en.wikipedia.org/wiki/Select_(SQL) 目录如下: Contents [hide] 1 Examples 2 Limiting result rows 2.1 ROW_NUMBER() window fu…
C++拾趣——使用多态减少泛型带来的代码膨胀
泛型编程是C语言中一种非常重要的技术,它可以让我们大大减少相似代码编写量。有时候,我和同事提及该技术时,称它是“一种让编译器帮我们写代码的技术”。(转载请指明出于breaksoftware的csdn博客) C是一门静态语言&…

如何成为一个优秀的程序员
本文给出了十五个评定软件开发人员的标准,可以帮助程序员朋友从一个好的程序员成为一个优秀的程序员,和大家共飨! 怎样评定一名软件开发人员?这是一个颇为奇怪的问题。现在已经有了很多的理论和形式来做这件事,人力资源…
2020年,最适合AI的5种编程语言
来源 | medium编译 | 张涛责编 | Carol出品 | AI科技大本营(ID:rgznai100)AI系统的开发必须有计算机代码,而计算机程序的开发有不同类型的编程语言可以选择。本文分析哪些编程语言最适合你的人工智能或机器学习用例开发。文中给出了一个想要在…

kafka生产者、消费者java示例
1. 生产者 import java.util.Properties; import kafka.javaapi.producer.Producer; import kafka.producer.KeyedMessage; import kafka.producer.ProducerConfig; public class MyProducer { public static void main(String[] args) { Properties props new Properti…
bug诞生记——临时变量、栈变量导致的双杀
这是《bug诞生记》的第一篇文章。本来想起个文艺点的名字,比如《Satan(撒旦)来了》,但是最后还是想让这系列的重心放在“bug的产生过程”和“缺失的知识点”上,于是就有了本系列这个稍微中性的名称。(转载请…
波士顿动力的机器狗上班了!巡逻、检测不在话下,挪威公司为其编发工号
作者 | 神经小刀来源 | HyperAI超神经(ID: HyperAI)AI 界的网红,波士顿动力机器狗 Spot ,近日获得了新的工作岗位,它将入职挪威的石油天然气开采公司 Aker ,负责巡检工作,还破天荒地获得了工牌和…

C语言运算符的优先级
() [] -> . (--->) ! ~ -- - (type类型) * & sizeof (<---) 单目运算符 * / % (--->) - (--->) << >> (--->) 移位运算符 < < > > (--->) 关系运算符 ! (--->) 等于或不等于&…

Java 多线程(六) synchronized关键字详解
多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同步用以解决多个线程同时访问时可能出现的问题。 同步机制可以使用synchronized关键字实现。 当synchronized关键字修饰一个方法的时候,该方法叫做同…

bug诞生记——const_cast引发只读数据区域写违例
对于C这种强类型的语言,明确的类型既带来了执行的高效,又让错误的发生提前到编译期。所以像const这类体现设计者意图的关键字,可以隐性的透露给我们它描述的对象的使用边界。它是我们的朋友,我们要学会和它相处,而不是…
听说Java被玩儿淘汰了?骨灰级程序员:远比你们想象的强大!
听过Java快被淘汰了?告诉你:没那么容易!Java从诞生至今,已经走过了20多年的历史,虽然相比新型的技术语言算是“老古董”,但是它的应用依然最为广泛,并且有着非常成熟的生态。而且我相信…

RapidFramework使用Oracle的步骤
1.在lib包中加入Oracle驱动2.修改generator.properties,注释掉mysql,打开oracle注释 jdbc.urljdbc:oracle:thin:127.0.0.1:1521:orcljdbc.driveroracle.jdbc.driver.OracleDriver 3.设置jdbc.schemaMEETRICEjdbc.catalog 注意:jdbc.schema的值为大写 4.修改jdbc.properties jdb…

拇指接龙游戏升级记录03(升级MainScene.cpp)
MainScene是拇指接龙游戏的主游戏场景文件,拥有近5000行代码。说实在的,实现自cocos2d-x 2.x版本向当下最新的3.8.1版本的升级过程,其中涉及的技术不是一下能够说明的。有些是形式上的简单修改,更多的则是性能上的提升相应的修改。…

Flex与.NET互操作(十二):FluorineFx.Net的及时通信应用(Remote Shared Objects)(三)
远程共享对象(Remote Shared Objects) 可以用来跟踪、存储、共享以及做多客户端的数据同步操作。只要共享对象上的数据发生了改变,将会把最新数据同步到所有连接到该共享对象的应用程序客户端。FluorineFx所提供的远程共享对象(Remote Shared Objects)和FMS的共享对…

ffmpeg api的应用——提取视频图片
这些年来,“短视频”吸引了无数网民的注意。相对于丰富有趣的内容,我们码农可能更关心其底层技术实现。本系列文章将结合ffmpeg,讲解几则视频处理案例。(转载请指明出于breaksoftware的csdn博客) “短视频”都是以“文…
蚂蚁金服AAAI论文:基于长短期老师的样本蒸馏方法和自动车险定损系统的最新突破...
来源 | 蚂蚁金服出品 | AI科技大本营(ID:rgznai100)一年一度在人工智能方向的顶级会议之一AAAI 2020于2月7日至12日在美国纽约举行,旨在汇集世界各地的人工智能理论和领域应用的最新成果。以下是蚂蚁金服的技术专家对入选论文《基于长短期老师…

C# 实现HTML转换成图片的方法
/// <summary> /// 通过WebBrowser控件来实现从HTML到Bmp图片的生成。 /// </summary> /// <param name"htmPath">HTML路径</param> /// <returns>Bmp图片路径</returns> private static st…
一套使用注入和Hook技术托管入口函数的方案
工作中,我们可能会经常使用开源项目解决一些领域中的问题。这种“拿来主义”是一种“专业人干专业事”的思想,非常实用。(转载请指明出于breaksoftware的csdn博客) 一般场景下,我们都是把开源项目代码编译到我们自己的…

微软发布虚机管理SCVMM 2008 R2 RC版
来源:IT168服务器频道近日,微软发布了SCVMM(系统中心虚拟机管理器,System Center Virtual Machine Manager)2008 R2的RC版本。据了解,新的SCVMM相比去年的版本增加了六大新功能,目前用户可以从W…
AI芯片行业发展的来龙去脉
作者 | 清华大学微电子学研究所尹首一来源 | 《微纳电子与智能制造》期刊引言人 工 智 能( aritificial intelligence ,AI )是 一 门融合了数学 、计算机科学 、统计学 、脑神经学和社会科学 的前沿综合性技术。它的目标是希望计算机可以像 人一样思考 ,…

8)排序②排序算法之选择排序[1]直接选择排序
1 #include<iostream>2 using namespace std;3 4 //*******直接选择排序*********5 int select_sort(int n,int array[100]){6 int i,j;7 for(i0;i<n;i){8 for(ji;j<n;j){9 if(array[i]>array[j]){ 10 int temparr…

一份招聘需求的分析
今早,长期合作伙伴又给我们一份招聘需求,以下是招聘条件: 工作性质:全职 工作地点:南京 发布日期:2009/6/15 截止日期:2009/6/30 招聘人数:6 工作经验:不限 学 历&…

bug诞生记——隐蔽的指针偏移计算导致的数据错乱
C语言为了兼容C语言,做了很多设计方面的考量。但是有些兼容设计产生了不清晰的认识。本文就将讨论一个因为认知不清晰而导致的bug。(转载请指明出于breaksoftware的csdn博客) class Base { public:Base() default;void set_v_b(int v_b) {_…
福利直投!这个活动承包你2020全年技术干货
CSDN技术公开课有奖评选开始啦~~听过课的小伙伴们,哪位讲师的分享让你获益匪浅?记得给TA投票哦!投票后获取入群方式,参与抽奖,奖品很丰厚哦~~进入付费时代,如今我们看似只要招招手,一切知识随手…

第四章 Controller接口控制器详解(5)——跟着开涛学SpringMVC
2019独角兽企业重金招聘Python工程师标准>>> 原创内容,转载请注明iteye http://jinnianshilongnian.iteye.com/ 4.15、MultiActionController 之前学过的控制器如AbstractCommandController、SimpleFormController等一般对应一个功能处理方法ÿ…
自动机器学习:团队如何在自动学习项目中一起工作?(附链接)
来源 | 数据派THU作者 | Francesca Lazzeri翻译 | 王琦责编 | Carol出品 | AI科技大本营(ID:rgznai100)去年11月,我写了一篇关于使用自动机器学习来进行AI民主化(democratization)的文章(见下面链接&#x…
C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——插入
操作系统是ubuntu 18.04.1 server amd64,gcc是 7.3.0。编译产出是64位测试程序。(转载请指明出于breaksoftware的csdn博客) 因为加入测量,就会导致误差。我已经尽量将环境影响降低,但是还是难免有误差。大家可以通过文…

SSIS中的记录集目标
这一篇,我们来看看另外一个特殊的目标组件:记录集目标。它与DataReader目标有些类似,也是在内存中的。但与DataReader目标不同的是,它可以被下游任务使用。 它的使用也比较简单,我们一般指定一个变量来接收它的结果&am…

Leetcode: Maximum Depth of Binary Tree
题目:算出二叉树的最大深度 解决方案:(1)BFS (2)DFS (1)BFS 一层一层往下搜索,一直找到最深的点,这里由于节点的val是没有用的,所以可以用来存储当前节点的深度ÿ…