[深度学习论文笔记][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实现数据清洗的18种方法

《Python实现数据清洗的18种方法》本文主要介绍了Python实现数据清洗的18种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1. 去除字符串两边空格2. 转换数据类型3. 大小写转换4. 移除列表中的重复元素5. 快速统

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

C# dynamic类型使用详解

《C#dynamic类型使用详解》C#中的dynamic类型允许在运行时确定对象的类型和成员,跳过编译时类型检查,适用于处理未知类型的对象或与动态语言互操作,dynamic支持动态成员解析、添加和删... 目录简介dynamic 的定义dynamic 的使用动态类型赋值访问成员动态方法调用dynamic 的

提示:Decompiled.class file,bytecode version如何解决

《提示:Decompiled.classfile,bytecodeversion如何解决》在处理Decompiled.classfile和bytecodeversion问题时,通过修改Maven配... 目录问题原因总结问题1、提示:Decompiled .class file,China编程 bytecode

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;