APP下载

大规模深度学习在动态结构中的应用

2019-08-10来学伟

电脑知识与技术 2019年17期

来学伟

摘要:该文简单介绍了大规模的深度学习在动态结构中的应用原理,重点介绍了级联分类器的原理,接着分析了使用动态结构化系统的主要障碍。并提出了解决方案。

关键词:动态结构;级联分类器;批量卷积

中图分类号:TP181       文献标识码:A

文章编号:1009-3044(2019)17-0199-02

开放科学(资源服务)标识码(OSID):

Abstract: this paper briefly introduces the application principle of large-scale deep learning in dynamic structure, especially the principle of cascade classifier, and then analyzes the main obstacles of using dynamic structured system.And put forward the solution.

Key words: dynamic structure; vascade classifier; batch convolution

1 背景

一般来说,加速数据处理系统的一种策略是构造一个系统,这个系统用动态结构(dynamic structure) 描述图中处理输入的所需计算过程。在给定一个输入的情况中,数据处理系统可以动态地决定运行神经网络系统的哪一部分。单个神经网络内部同样也存在动态结构,给定输入信息,决定特征(隐藏单元)哪一部分用于计算。这种神经网络中的动态结构有时被称为条件计算 (conditional computation)(Bengioet al., 2013b,c)。由于模型结构许多部分可能只跟输入的一小部分有关,只计算那些需要的特征可以起到加速的目的[1]。

2 级联分类器的原理

动态结构计算是一种基础的计算机科学方法,广泛应用于软件工程项目。应用于神经网络的最简单的动态结构基于决定神经网络(或者其他机器学习模型)中的哪些子集需要应用于特定的输入。

在分类器中加速推断的可行策略是使用级联(cascade)的分类器。当目标是检测罕见对象(或事件)的是否存在,可以应用级联策略。要确定对象是否存在,我们必须使用具有高容量、运行昂贵的复杂分类器。然而,因为对象是罕见的,我们通常可以使用更少的计算拒绝不包含对象的输入。在这些情况下,我们可以训练一系列分类器。序列中的第一分类器具有低容量,训练为具有高召回率。换句话说,他们被训练为确保对象存在时,我们不会错误地拒绝输入。最终的分类器训练为具有高精度。在测试时,我们按照顺序运行分类器进行推断,一旦级联中的任何一个拒绝它,就选择抛弃。总的来说,这允许我们使用高容量模型以较高的置信度验证对象的存在,而不是强制我们为每个样本付出完全推断的成本。有两种不同的方式可以使得级联实现高容量。一种方法是使级联中靠后的成员单独具有高容量。在这种情况下,系统作为一个整体显然具有高容量,因为它的一些个体成员是高容量的。还可以使用另一种级联,其中每个单独的模型具有低容量,但是由于许多小型模型的组合,整个系统具有高容量。Viola and Jones (2001) 使用级联的增强决策树实现适合在手持数字相机中使用的快速并且鲁棒的面部检测器。本质上,它们的分类器使用滑动窗口方法来定位面部,许多窗口会被检查,如果它们不包含面部则被拒绝。级联的另一个版本使用早期模型来实现一种硬性的注意机制:级联的早期成员定位对象,并且级联的后续成员在给定对象位置的情况下执行进一步处理。例如,Google使用两步级联从街景视图图像中转换地址编号,首先使用一个机器学习模型查找地址编号,然后使用另一个机器学习模型将其转录 (Goodfellow et al., 2014d)。

决策树本身是动态结构的一个例子,因为树中的每个节点决定应该使用哪个子树来评估输入。一个结合深度学习和动态结构的简单方法是训练一个决策树,其中每个节点使用神经网络做出决策 (Guo and Gelfand, 1992),虽然这种方法没有实现加速推断计算的目标[2]。

类似的,我们可以使用称为选通器 (gater) 的神经网络来选择在给定当前输入的情况下将使用几个专家网络 (expert network) 中的哪一个来计算输出。这个想法的第一个版本被称为专家混合体 (mixture of experts)(Nowlan, 1990; Jacobs et al.,1991),其中选通器为每个专家输出一个概率或权重(通过非线性的softmax 函数获得),并且最终输出由各个专家输出的加权组合获得。在这种情况下,使用选通器不会降低计算成本,但如果每个样本的选通器选择单个专家,我们就会获得一个特殊的硬专家混合体 (hard mixture of experts) (Collobert et al., 2001, 2002),这可以加速推断和训练的时间。当选通器决策的数量很小的时候,这个策略效果会很好,因为它不是组合的。但是当我们想要选择不同的单元或参数子集时,不可能使用“软开关”,因为它需要枚举(和计算输出)所有的选通器配置。为了解决这个问题,许多工作探索了几种方法来训练组合的选通器。Bengio et al. (2013c)提出使用选通器概率梯度的若干估计器,而Bacon et al. (2015); Bengio et al. (2015a) 使用強化学习技术(策略梯度(policy gradient))来学习一种形式的隐藏单元的条件Dropout,减少了实际的计算成本,而不会对近似的质量产生负面影响。另一种动态结构是开关,其中隐藏单元可以根据具体情况从不同单元接收输入。这种动态路由方法可以理解为注意机制(attention mechanism) (Olshausen et al.,1993)。目前为止,硬性开关的使用在大规模应用中还没有被证明是有效的。较为先进的方法一般采用对许多可能的输入使用加权平均,因此不能收获动态结构所有可能的计算益处[3]。

使用动态结构化系统的主要障碍是由于系统针对不同输入的不同代码分支导致的并行度降低。这意味着网络中只有很少的操作可以被描述为对样本minibatch的矩阵乘法或批量卷积。我们可以写更多的专用子程序,用不同的核对样本做卷积,或者通过不同的权重列来乘以设计矩阵的每一行。不幸的是,这些专用的子程序难以高效地实现。由于缺乏高速缓存的一致性,CPU实现将是缓慢的。GPU的实现也将是缓慢的,因为缺乏级联的内存操作以及warp成员使用不同分支时需要串行化操作。在一些情况下,可以将样本分成组缓解这些问题,这些组都采用相同的分支并且同时处理这些样本组[4]。在离线环境中,这是最小化处理固定量样本所需时间的一项可接受的策略。在实时系统中,样本必须连续处理,对工作负载进行分区可能会导致负载均衡问题。例如,如果我们分配一台机器处理级联中的第一步,另一台机器处理级联中的最后一步,那么第一台机器将倾向于过载,最后一个机器倾向于欠载。如果每个机器被分配以实现神经决策树的不同节点,也会出现类似的问题。

3 总结

本文介绍了大规模的深度学习在动态结构中的应用原理,重点介绍了级联分类器的原理,接着分析了使用动态结构化系统的主要障碍。并提出了解决方案。对大规模的深度学习在动态结构中的应用具有一定的实际意义。

参考文献:

[1] 深度学习已成功应用于这三大领域[EB/OL]. http://bigdata.idcquan.com/dsjjs/122448.shtml.

[2] 闵腾飞. 基于协同过滤和深度学习的临床决策支持方法研究[D]. 哈尔滨: 哈尔滨工业大学, 2018.

[3] 张骞予. 深度学习在医学图像识别中的研究与应用[D]. 太原: 太原理工大学硕士论文, 2018.

[4] 颜志鹏. 基于深度强化学习的游戏控制算法研究与实现[D]. 西安: 电子科技大学, 2018.

【通联编辑:谢媛媛】