[深度学习论文笔记][AAAI 18]Accelerated Training for Massive Classification via Dynamic Class Selection

本文主要是介绍[深度学习论文笔记][AAAI 18]Accelerated Training for Massive Classification via Dynamic Class Selection,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[AAAI 18] Accelerated Training for Massive Classification via Dynamic Class Selection

Xingcheng Zhang, Lei Yang, Junjie Yan, Dahua Lin

from CUHK & SenseTime

paper link

Motivation

这篇文章研究当分类器分类个数非常大的时候,如何高效训练分类器的问题。在网络的输出层,Softmax分类器会对每一个类产生一个输出。因此输出层的参数量、占用的空间和计算量是和分类个数呈正相关的。当在某些实际应用场景下,如人脸识别、自然语言处理等,其分类个数(如人的身份数量、单词种类数)会非常大,以至于使网络的输出层的参数多到无法存储在显卡中,而且无法承受如此量级的计算。这篇文章针对这个问题提出一点观察结果和一个解决该问题的方案。其分析和观察的结果是:

  1. 对于一个输入样本,其输出概率只集中在少量的类别中,可以称这些类别为活跃类(active class);
  2. 在同一迭代过程中,回传梯度主要受这些活跃类影响,其他类别的贡献很小。

因此一个解决方案便是前向和反向过程中只计算和这些活跃类相关的东西。本文提出的解决方案便是如何动态搜索得到这些活跃类到底是哪些。下面就详细介绍这篇文章的分析和观察的细节,以及解决方案的内容。

An Empirical Study of Softmax

作者通过实验来验证其关于Softmax概率分布的分析结论。为此提出了两个新的概念,

  1. top K累积概率:将输出的概率向量里最大的K个值相加(k=1,100,1000),其结果往往接近于1;
  2. 归一化的top K梯度累积能量:虽然名字很拗口,但是其实质是输出层所有梯度与top K类产生的梯度的余弦相似度,用来衡量top K类产生的梯度占所有梯度的比例。

作者在MS-Celeb-1M数据库上训练人脸识别网络,下图为统计结果。可见活跃类确实在产生的概率(图中(a))和回传的梯度(图中(b))上都占主导作用。

这里写图片描述

Selective Softmax

在上个图中,即便K=1000,其top K类仍占总类别数很小的比例(如MS-Celeb-1M中只占1.5%)。因此在训练过程中能针对不同的样本找到对应的活跃类是降低计算和存储代价的关键。

对一个输入特征x,输出层的权重矩阵为W。寻找top K类即是找到W中和这些活跃类关联的k个列向量。因为每个活跃类的概率由 wix w i x 得到,且最终的结果都很大,因此搜索活跃类过程可以转化为对W的列项量 wi w i 进行聚类。最终选取可以使 wix w i x 结果最大的那一类。

Hashing Forest

为了快速实现聚类,作者使用了构建哈希树的方法,即不停将各个列向量二分类,构建两个叶子节点。之后在叶子节点上递归二分类,继续二分叶子节点,直至每个叶子节点的向量个数小于某个值。

每次对W的列向量二分类的操作如下:

  1. 随机抽取两个列向量 wi,wj w i , w j ,求两个向量的平均作为分类基准 h=wi+wj2 h = w i + w j 2
  2. 将每个向量同该分类基准向量作点积 wTih w i T h ,依据点积结果大于0与否将其放到左、右子节点中;
  3. 当待操作的叶子节点向量个数小于某个值的时候,停止操作。

因为构建每个哈希树存在随机因素,实际使用中可以并行构建多个哈希树,组成森林以提高可靠性。

当给定输入特征x,查找top K类对应的权重向量时,搜索过程从哈希树的根节点开始。每次搜索的时候,x都会和分类基准向量作点积,同样根据结果大于0与否决定选择左节点还是右节点。该过程直到搜索抵达某个叶子节点位置。

Adaptive Allocation

在训练过程中,所搜活跃类的过程中有三个变量需要进行控制:

  1. 每次搜索活跃类的个数M;
  2. 构建哈希树的个数L;
  3. 重新构建哈希森林的间隔迭代次数T。

其中M和L决定了搜索活跃类的可靠性,T的存在是因为权重W在训练过程中也在不停变化。三个变量的选取也决定了算法的速度。作者认为随着网络迭代,模型逐渐趋稳,因此当迭代次数增加时:

  1. M要满足top M类的概率和大于一个门槛,该门槛线性增加;
  2. T线性减少;
  3. L线性增加。

对于一个训练batch,其选取的活跃类是各个输入选取得到的活跃类的集成。

Experiment

作者在几个不同的大型人脸数据集上进行了训练,来验证本文提出方案的有效性。
同时也展示了几个重要参数的敏感性。举其中一例,作者在MS-Celeb-1M和Megaface合并的数据集上训练ResNet-101模型进行人脸识别,总类别数达到了75万。其对比结果如下图所示,本文提出的方法较传统训练方法和随机选取“伪”活跃类的方法相比都很大优势:

这里写图片描述

这篇关于[深度学习论文笔记][AAAI 18]Accelerated Training for Massive Classification via Dynamic Class Selection的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967413

相关文章

Linux命令学习之二

每日一结 ​               命令置换:是将一个命令的输出作为另一个命令的参数,命令格式如下: commond1 `command2` 其中,命令command2的输出将作为命令command1的参数,需要注意的是, 命令置换的单引号为ESC键下方的 ` 其意思就是说,先运行单引号内的命令,再将其命令作为

Linux命令学习之一

每日一结                                                                                        注:当用户不确定一个软件包的类型时, 可使用file命令查看文件类型

javaweb学习-jstl-c:forEach中 varStatus的属性简介

varStatus是<c:forEach>jstl循环标签的一个属性,varStatus属性。就拿varStatus=“status”来说,事实上定义了一个status名的对象作为varStatus的绑定值。该绑定值也就是status封装了当前遍历的状态,比如,可以从该对象上查看是遍历到了第几个元素:${status.count} 我们常会用c标签来遍历需要的数据,为了方便使用,varSta

java学习—null和isEmpty 区别

String fly1 = new String(); String fly2 = ""; String fly3 = null; 解释如下: 此时fly1是分配了内存空间,但值为空,是绝对的空,是一种有值(值存在为空而已) 此时fly2是分配了内存空间,值为空字符串,是相对的空,是一种有值(值存在为空字串) 此时fly3是未分配内存空间,无值,是一种无值(

javaWeb学习—getRequestURI,getRequestURL等的学习

我使用的是SpringMVC框架,做一个小的例子,说明一下对这个内容的学习和理解! 1:我的项目名称为 dufyun_SpringMVC  2:我测试的地址为 ${pageContext.servletContext.contextPath}/testName 3;后台获取的代码为: @RequestMapping(value="/testName",method=Req

maven学习系列——(五)maven聚合与继承

这一篇学习和整理maven的聚合和继承! 并用具体的项目讲解说明! 参考: http://www.cnblogs.com/xdp-gacl/p/4242221.html

maven学习系列——(四)maven仓库

这一篇学习和整理maven仓库的一些知识点 ! 参考: http://blog.csdn.net/wanghantong/article/details/36427433

maven学习系列——(三)maven项目的创建

这一篇大概会整理和总结到有如下知识点: (1):maven的使用入门一些命令 (2):用命令创建项目 (3):使用IDE集成工具创建项目–Eclipse和idea 3:使用Maven命令和Eclipse的Maven插件,创建Maven项目 (1)maven命令生成项目 新建一个文件目录,dos进入该目录并执行下面命令: mvn archetype:create -DgroupId=c

maven学习系列——(二)maven的安装和一些基本的配置

这一篇主要会总结maven在window上的安装,以及Eclipse安装maven插件。 会整理和贴出具体的安装步骤等! 配置大概会整理一下,方便自己查看和使用! Maven 的使用在Windows上使用比较多,一般的开发都是在Windows上;Linux上的使用相对比较少,不过会总结Windows和Linux系统两种安装方式。 首先会介绍在Windows和Eclipse安装Maven,L

maven学习系列——(一)maven简介

这个系列学习maven,主要是看maven实战和其他网站上整理出自己一些知识点,方便自己以后查找和使用! 这个系列的我先根据自己在公司经常使用到的一些知识点进行整理,后期在做完善! 计划:要在2017 年之前学习和整理完成! 1:什么 Maven ? - Maven意为“知识的积累”、“专家”或者“内行”的意思,maven是一个跨平台的项目管理工具,是 Apache的一个成功的开源