基于深度学习和Spark计算的移动大数据分析算法

2020-11-17 12:27丁晓梅赵丽红
长沙大学学报 2020年5期
关键词:样本节点深度

丁晓梅,汪 静,赵丽红

(安徽文达信息工程学院计算工程学院,安徽 合肥 231201)

移动设备已经成为廉价且可靠的平台,无处不在地收集数据并做数据处理.根据思科系统公司最新的流量预测报告,2015年全球每月平均售出10亿台移动设备,其中移动设备的流量较上一年增长了74%.移动大数据(Mobile Big Data,MBD)是一个描述大量移动数据且无法使用单台机器处理的专有名词.MBD包含许多实际问题,例如欺诈检测、营销检测、上下文感知计算[1]以及医疗保健等.因此,MBD分析是当前互联网领域高度关注的问题,旨在从原始移动数据中提取有意义的信息和模式.

深度学习即深度神经网络是MBD问题分析中的常用方法.具体来说,深度学习在MBD问题中可以利用先验知识建立高精度的模型,避免了昂贵的手工特征设计,并且可以适用于某些无监督的问题.但是,由于MBD中数据的维度过高,深度学习模型在此类问题中学习速率很慢,并且常规的深度学习计算量过大,往往需要花费几小时甚至几天的时间完成一次模拟.然而,大部分的问题和系统不能容忍精度处理不够或者延迟问题,因此在移动数据分析问题中,如何将深度学习模型在保证精度的同时提高训练速度,一直是研究人员的关注热点.

为了满足可伸缩和自适应系统对数据分析的需求,本文提供了一种基于Spark框架的深度学习方法,使用具有先验知识训练的深度模型来实现省时的MBD分析.本文框架基于Apache Spark构建[2],它提供了一个开源集群计算平台,这样就可以使用集群中的许多计算核心进行分布式学习。在该集群中,将连续访问的数据缓存到运行的内存中,从而将深度模型的学习速度提高了几倍.为了证明所提出框架的可行性,本文在最后实验了一个上下文感知活动识别系统,在计算集群上运行,并使用移动人群感知数据样本训练深度学习模型.在此测试案例中,客户请求包括加速度计信号,并且对服务器进行了编程,以使用深度活动识别模型来提取潜在的人类活动.与传统的机器学习方法相比,深度学习的准确性得到保障,与随机森林相比,深度学习的精度提高了9%,与多层感知相比,深度学习的精度提高了17.8%.此外,与单机计算相比,基于并行Spark的实现减少了深度模型的学习时间.因此,本文的算法可以有效解决当前深度学习在MBD问题上因数据维度过高、计算量过大而导致的学习速率过慢的问题.

1 MBD中的深度学习方法

1.1 MBD

MBD的几种结构如图1.

图1(a)部分显示了用于连接各种类型的便携式设备(如智能手机、可穿戴计算机和IoT小工具)的大型移动系统的典型体系结构.在现代移动设备中广泛安装了各种类型的传感器,例如加速度计、陀螺仪、指南针和GPS传感器,从而允许了许多新应用.本质上,每个移动设备都以无状态数据交换结构(例如Java中的对象符号〈JSON〉格式)封装其服务请求和自己的感知数据.由于移动设备在不同的移动操作系统上运行,因此无状态格式非常重要.基于收集的MBD,服务器利用MBD来分析发现隐藏的模式和信息. MBD分析的重要性源于其可以在小型数据集上组装、配置以及构建复杂的移动系统来分析数据.例如,一个可以灵活地识别各种数据类型的应用程序[3],以及使用移动设备的嵌入式加速度计来收集有关日常人类活动的适当加速度数据[4]等.在接收到请求之后,服务器将加速度计数据映射到最可能的人类活动,比如可以支持许多交互式服务,包括医疗保健、智能建筑和普通游戏等.MBD分析比传统的大数据更具有通用性,因为数据源是便携式的,并且数据流量是打包使用的,MBD会同时处理由数百万个移动设备收集的大量数据.

图1(b)(c)(d)展示了MBD时代的最新主要技术:大规模和高速移动网络、便携性众包以及复杂通信机制[5-6].每种技术都会以不同方式促进形成MBD特性,以及在当前情况下会产生不同难题.第一,大规模和高速移动网络:移动设备和高速移动网络(例如Wi-Fi和蜂窝网络)的增长带来了大规模且有争议的移动数据流量.2015年,每月产生3.7亿字节的移动数据,预计未来几年还会增加.同时,大规模数据的增加会带来 MBD的流率变慢,由此影响为移动用户提供服务时延迟的响应速度.请求的长时间排队会导致用户满意度降低,并增加后期决策的成本.第二,便携性:每个移动设备都可以在多个位置自由移动.因此,MBD是不稳定的(波动性).第三,MBD分析经常应对新收集的数据样本,而由于可移植性,收集的样本质量对于决策是否有效起重要作用.

1.2 MBD中的深度学习

深度学习是机器学习的一个新分支,可以解决MBD分析中的一系列复杂问题,例如分类和回归[6-8].深度学习模型由模拟的神经元和突触组成,可以从现有MBD样本中对其进行训练以学习数据特征.生成的深度模型可以泛化和处理看不见的流MBD样本.如图2所示.

生成式深度网络可以缩放为包含许多隐藏层和数百万个难以一次训练的参数.其中,文献[5]、[6]给出了基于堆叠式的去噪自动编码思路的贪婪逐层学习算法.具体如下:

(1)生成式模型预训练:此阶段仅需要未标记的数据,这些数据通常使用众包,因此很容易在移动数据流中收集.图2中展示了深度模型的逐层调整的方法.首先,使用未标记的数据样本训练第一层神经元,学习输入数据的数据结构,其中每个层都包括编码和解码功能:编码功能使用输入数据和各层参数来生成一组新功能.然后,解码功能使用特征向量和隐藏层参数来生成输入数据的重构.最后,在第一层的输出处产生第一组特征.之后,在第一层的顶部添加第二层神经元,在此将第一层的输出作为第二层的输入.通过添加更多层来重复此过程,直到形成合适的深度模型为止.因此,基于在其下层生成的特征,在每一层学习更复杂的特征.

(2)判别式模型微调方法:第一步中初始化的模型参数会使用一组可用的标记数据进行微调,来进一步调整参数,优化模型.

2 基于Spark的深度学习方法

2.1 大数据分析中的Spark深度学习方法

在MBD分析中深度学习模型的学习速度很慢,而且对计算的精度要求也很高.通常这是深层模型参数和MBD样本数量太大所导致.一方面,深度学习可以从未标记的移动数据中学习,从而减少数据标记工作量.因为在大多数移动系统[9-11]中,标记数据是有限的,而手动数据注释需要人工干预,既昂贵又耗时;另一方面,未标记的数据样本数量庞大但容易获得.因此,深度学习模型在训练前阶段将未标记的数据样本用于生成数据的探索,这样可以尽可能地减少MBD分析期间对标记数据的需求.

Apache Spark是用于集群上可伸缩Map Reduce计算的开源平台.该框架的主要目标是通过将深度模型的学习与高性能计算集群并行化来加快MBD决策.简而言之,深度模型的并行化是通过将MBD切片为多个分区来执行的.每个分区都包含在弹性分布式数据集(RDD)中,该数据集为Spark引擎提供了数据分发的抽象.除了数据缓存之外,Spark项目中RDD本身还支持容错执行并恢复工作节点上的程序操作.

因此,本文基于Spark的框架包含两个主要组件:(1)一个Spark主控件;(2)多个Spark相关控件.主计算机初始化Spark驱动程序用于实例,该实例管理一组Spark Worker上其他部分模型的执行.在深度学习算法的每次迭代中(图2), 每个工作节点在MBD的小分区上优化部分深度模型,并发送计算出的优化参数,最后返回主节点.之后,主节点通过均值化所有执行者节点的模型来重建主深度模型.

2.2 并行计算模块

学习深度模型主要通过两个主要步骤执行:大量的梯度计算和参数更新步骤(请参见文献[8]、[9]等).而在本文框架中,使用以下几个步骤来进行梯度计算和更新:第一步,学习算法独立地遍历所有数据批次,以计算模型参数的梯度更新(即变化率).第二步,通过对所有数据批次上计算的梯度更新取平均值来更新模型的参数.这两个步骤适合学习Map Reduce编程模型中的深层模型[12].特别地,并行梯度计算可以用来实现映射过程[13],这样简化了参数的更新迭代过程.在Apache Spark上进行深度学习的迭代Map Reduce计算是按照如下步骤执行的:

(1)MBD分区:首先使用Spark的parallelize的API将整个MBD分为多个分区.生成的MBD分区存储到RDD中并分发到工作程序节点.这些RDD对于加快深度模型的学习至关重要,影响着内存数据访问磁盘数据的操作.

(2)深度学习并行性[13-15]:深度学习问题的解决方案取决于具有较小数据集的同一学习问题的解决方案.尤其是,深度学习工作分为多个学习阶段,每个学习阶段都包含一组独立的Map Reduce迭代,其中一个迭代的解决方案是下一个迭代的输入.在每次Map Reduce迭代期间,将在可用MBD的单独分区上训练部分模型,步骤如下:

a)学习局部模型:每个工作节点计算其MBD分区的梯度更新(也称为Map过程).在此步骤中,所有Spark工作者都在MBD的不同分区上并行执行相同的Map任务.以此方式,深度模型学习的昂贵的梯度计算任务被分成许多并行的子任务.

b)参数平均:将部分模型的参数发送到主计算机,以通过平均所有Spark工作者的参数计算来构建主深度模型(也称为Reduce过程).

c)参数分发:将Reduce过程后生成的主模型分发给所有工作节点,然后根据更新的参数开始新的Map Reduce迭代.继续该过程,直到满足学习收敛标准为止.

最后生成一个参数合适的深度学习模型,该模型可用于从用户请求中推断信息的问题.

3 实验验证

3.1 实验数据及过程

在本实验中,使用可以公开采集到的Actitracker数据集,来验证以上算法的可行性.

数据集包括来自563个用户的6项常规活动(步行、慢跑、爬楼梯、坐着、站立和躺下)的加速度计样本.图3绘制了6种不同活动的加速度计信号.由于不同的活动包含不同的频率内容,因此这些内容大体上反映了人体的动态.具体包括:第一,收集身体较为剧烈的活动(例如步行、慢跑和爬楼梯)的高频信号.第二,在半静态下进行慢性身体运动的采样,例如在站立、坐下以及躺下的活动收集低频信号.该数据是使用具有20Hz采样率的移动电话收集的,并且将这些数据分为两部分,一部分作为训练数据使用,另一部分作为测试数据使用.

由于实验使用了生活实例型数据,与未标记数据相比,标记数据数量很有限,因此,数据标记需要人工干预.使用10s开窗功能对数据进行构图,该功能会生成200个时间序列样本.在实验中,首先只对未标记的数据样本进行深度模型预训练,然后使用标记的数据集对模型进行微调.为了增强活动识别性能,本文还使用了加速度计信号的频谱图作为深度模型的输入来优化参数.

数据进行合理的标记之后,运行负载分配工具(LSF)管理平台和Red Hat Linux系统.每个节点都具有8个核心(时钟速度为2.93GHz的Intel Xeon 5570 CPU)以及24GB RAM.实验中,将核心计算设备设置为8的倍数,以分配整个节点的资源.每个计算核心初始化一个局部模型学习任务.每个任务使用包含100个样本的数据,分批进行100次迭代学习.显然,增加核心数量可以更快地训练深度模型.最后,需要注意的是,分布式深度学习是一种强类型的正则化学习方法.因此,不建议使用正则化术语(例如稀疏性和辍学约束)来避免拟合不足的问题.

3.2 实验结果及分析

基于本文深度学习模型,与其他模型识别率对比,如表1所示.

表1 深度学习模型与其他模型识别误差的对比

根据实验结果可以得出如下结论:

(1)本文深度模型在识别率方面优于现有的上下文学习模型:通过表1可知,本文算法在实验中表现出最好的识别错误率,为14%,比未使用Spark计算引擎多层感知机准确率提高了18%,同时也优于随机森林、基于实例等传统方法.证明了基于Spark计算引擎的深度学习模型可以提高深度学习在MBD问题上的准确率.

(2)深度模型的学习层次特征消除了常规方法中对手工统计特征的需求.当层数一定时,本文的算法识别的准确率一直是四种方法中最高的,且本文算法的错误率曲线一直呈下降趋势,并没有出现波动.也就是说,本文算法在实验过程中,并未出现传统深度学习网络的过拟合问题.由此可以得出结论:通过使用后期标记数据微调的方法来优化模型,解决了优化参数的问题并避免了过度拟合.

4 结论及展望

本文介绍了基于Spark的框架以及深度学习模型用于移动大数据分析问题的算法.该模型可以对具有许多隐藏层和数以百万计参数的深度模型进行调整和优化,同时具有较好的扩展性.通常,深度学习虽然为移动大数据问题提供了识别率较高的方法,但是难以克服运算复杂度、时间复杂度过高的问题.而通过使用Spark框架,以及其易于并行计算的特性,能帮助传统的深度学习模型更高效地解决移动大数据分析问题.最后,通过一个互联网上下文情感分析的实例,证明了该模型的可行性,并且通过与其他传统方法的对比,更直观地展示了本文算法的有效性.

猜你喜欢
样本节点深度
四增四减 深度推进
深度思考之不等式
基于图连通支配集的子图匹配优化算法
用样本估计总体复习点拨
结合概率路由的机会网络自私节点检测算法
面向复杂网络的节点相似性度量*
采用贪婪启发式的异构WSNs 部分覆盖算法*
简约教学 深度学习
规划·样本
随机微分方程的样本Lyapunov二次型估计