[深度学习论文笔记][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

相关文章

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

SpringBoot利用dynamic-datasource-spring-boot-starter解决多数据源问题

《SpringBoot利用dynamic-datasource-spring-boot-starter解决多数据源问题》dynamic-datasource-spring-boot-starter是一... 目录概要整体架构构想操作步骤创建数据源切换数据源后续问题小结概要自己闲暇时间想实现一个多租户平台,

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR