APP下载

基于Julia云平台的交互式深度学习模式

2016-04-15唐舸轩党云龙张常有周艺华

太原理工大学学报 2016年1期
关键词:交互式深度学习

唐舸轩,党云龙,张常有,周艺华

(1.北京工业大学 计算机科学与技术学院,北京 100124;

2.中国科学院软件所并行软件与计算科学实验室,北京 100190;

3.石家庄铁道大学 信息科学与技术学院,石家庄 050043)



基于Julia云平台的交互式深度学习模式

唐舸轩1,2,党云龙3,张常有2,周艺华1

(1.北京工业大学 计算机科学与技术学院,北京 100124;

2.中国科学院软件所并行软件与计算科学实验室,北京 100190;

3.石家庄铁道大学 信息科学与技术学院,石家庄 050043)

摘要:为降低深度学习程序的开发难度,提出了一种基于Julia云平台的交互式深度学习模式。设计了一套深度学习原语,用Julia实现原语,为Julia程序员提供调用接口,构建交互分析系统;并提供GPU/CPU实现接口,由云端系统根据用户情形自动优选;最后实现了基于深度学习的图像交互分析案例,验证原语体系的完备性和Julia云平台的交互支持能力。实验结果表明,GPU的运行速度比CPU快近30倍。Julia程序员只需通过调用原语,设置相关参数,就可以使用并行化的算法。

关键词:Julia;高性能云;交互式;深度学习

近年来在人工智能领域的研究中,深度学习成为了热点。自2006年GEOFFERY,et al在Science杂志发表那篇著名的论文开始[1],深度学习的热潮从学术界席卷到工业界。放眼国外,“谷歌大脑(Google Brain)”项目用1.6万个CPU核的并行计算平台训练深度神经网络(Deep Neural Networks,DNN)的机器学习模型,在语音和图像识别等领域取得了巨大的成功。国内方面,百度深度学习研究院将深度学习技术运用到广告系统、网页搜索、图像识别等领域,也取得了很大成就。

从近年来国内公司实践来看,深度学习主要拥有如下三个方面的优势[2]。深度学习符合大数据的发展潮流。它集中体现了机器学习算法的三个大趋势:用较为复杂的模型降低偏差,用大数据提升统计估计的准确度,用可扩展的梯度下降算法求解大规模优化问题。深度学习是一个端到端的学习系统。直接作用于原始数据,自动逐层进行特征学习,最终得到正确的答案。深度学习是一个建模框架,其内部的特征并非全然不可知。利用这种框架,可以表达数据内在的丰富关系和结构,比如可以用递归神经网络(Recurrent Neural Network,RNN)处理自然语言等数据的时序问题,用卷积处理图像中的二维空间结构,解决图像识别中的问题。

如何充分利用深度学习的优势,使用户更加方便的处理深度学习领域的问题,成为了关注的方向。Julia云平台提供了一种有效的解决方法。

Julia从语言上支持并行和分布式计算,易编程,是一种动态高性能的高级编程语言,适合科学和数值计算,性能可与传统静态类型语言媲美。Julia语言基于消息传递机制为多处理器或多核环境提供并行计算环境,程序能够运行于分布式存储的集群。不同于MPI的消息传递机制,Julia采用“单边”通信机制。程序员只需在程序中显示控制多个处理器,调用高层操作实现协同计算。

Julia语言支持并行和分布式计算,很好地适应了深度学习在大数据环境下的应用需求。基于Julia云平台的深度学习模式具有如下优势:1)将深度学习模型封装成简单原语,方便了程序员对深度学习模型的使用。程序员不需要关注深度学习模型的具体实现细节,只需简单的原语操作就可实现深度学习模型的训练、测试等过程。2)基于Julia云平台的深度学习模式,不需要程序员在本机上配置模型运行环境,减轻了程序员使用深度学习模型的困难。3)该模式支持CPU和GPU两种方案,程序员可以通过简单的参数设置,使用不同的深度学习模型,同时平台根据用户情况自动优选CPU或GPU的运行方式。

1相关工作

传统的深度学习模型包括受限制玻尔兹曼机、深度置信网络、递归神经网络、卷积神经网络。不同的模型在处理各自领域的问题时都取得了成功。在图像识别领域中,卷积神经网络的发展相对成熟。

1.1卷积神经网络

卷积神经网络(Convolutional Neural Networks,CNNs)是一个权值共享的网络结构,这种结构降低了网络模型的复杂程度,有效的减少了权值的数量,避免了传统识别算法当中复杂的特征提取和数据重建过程,从而能够直接使用原始图片,因而在图像识别领域得到了广泛运用。

1962年,Hubel和Wiesel提出了基于猫视觉皮层的结构模型[3],同时提出了感受野的概念。1984年,日本学者Fukushima提出了基于感受野的神经认知机[4],这是感受野概念第一次在人工神经网络领域出现,也可以认为是卷积神经网络的第一个实现网络。随后,Lecun,et al[5-6]基于误差梯度算法设计并训练出了卷积神经网络,并且在一些模式识别任务中展现出了相对于当时其他方法的领先性能。

卷积神经网络通过3个方法来实现识别位移、缩放和扭曲不变性:局部感受野、权值共享和次抽样。局部感受野指的是每一个网络层的神经元只与上一层的小领域内的神经单元连接,通过局部感受野,每个神经元可以提取初级的视觉特证,如方向线段、端点、角点等。权值共享使得卷积神经网络具有更小的参数。次抽样可以减少特征的分辨率,实现对位移、缩放和其他形式扭曲的不变性。一般来说,卷积层紧接一个次抽样层,以此减少计算时间和建立空间结构的不变性。

卷积神经网络的的迅速发展,出现了一些比较著名的基于卷积神经网络的深度模型框架,其中最有名的是Caffe深度学习框架。

1.2Caffe深度学习模型

Caffe是一个清晰、高效并且模块化的深度学习框架,由Berkeley Vision and Learning Center (BVLC)开发。

Caffe深度学习模型的优势主要体现在:强大的表达能力,Caffe所有的模型定义、优化设置、以及预训练的权重等都是以文本而非代码的形式给出。速度快,Caffe能够运行各种优秀的模型并且处理海量的数据。Caffe可以在一个NVIDIA K40 GPU基础上,每天处理60 MB的图像,训练一张图片只需要4 ms。高度模块化,Caffe模块化的设计,使之能够非常方便的扩展到新任务和设置上。开源与社区,Caffe发布之初便参与到了BSD的社区讨论之中,Caffe的源码可以在github上直接下载。

1.3Julia云平台

面向高性能计算的云平台包括三个子系统:用户编程环境(UPE),支持用户编写、修订、调试Julia程序;消息通信传递系统(MPS,Message Passing System),在编程环境和运行环境之间传递源码程序和资源参数的消息传递系统;高性能计算环境(HCE)。各系统之间的关系如图1所示。在Julia云平台上使用深度学习模式,程序员可以更加关注任务的实现,不需知道深度学习实现的具体方法,甚至不用安装Julia编程环境和深度学习模型运行环境,这为程序员的编程提供了极大的便利。

图1 编程环境图体系结构Fig.1 The architecture of programming environment

1.4基于云平台的深度学习

目前,深度学习各种模型存在较为分散,少有针对深度学习模式的统一库。本文基于云平台,利用Julia语言,将不同深度学习模型封装成库供用户使用,简化了用户操作。以卷及神经网络为例,用户如果需要使用卷及神经网络模型,需要在本机上安装配置相应环境,而利用Julia语言将其封装成基本原语之后,可以将运行过程移至后端服务器,用户不必关心不同模型需要的不同环境。Caffe深度学习框架提供了Matlab等对外接口,在此基础上,利用Julia语言提供一套简洁的原语对外使用,充分利用Julia语言支持并行和分布式计算的特点,提高数据预处理过程的效率,进而提高深度学习模型的训练和测试效率。

2案例研究

在Julia云平台的交互式深度学习模式中,各种深度学习模型对用户来说是透明的,用户不需要去了解深度学习模型是如何实现的,只需要专注大粒度任务。

通过调整参数选择不同的深度学习模型,平台根据用户情形自动优选CPU或GPU运行策略。

实现深度神经网络一般包括如下过程:模型的定义、数据的预处理、训练、测试等。将这些过程提取为基本原语并提供给Julia云平台,用户在云平台环境下,只需输入简单的Julia命令,调整参数,就可以实现这些过程。利用Caffe深度学习框架,以单个图像的识别分类为案例,说明Julia云平台和深度学习模型是如何协同工作。

测试案例用到的主要函数为test-images(const char* model-filename,const char* weights-filename,const char* image-filename,float* output-result-ptr,int nSize);

其中model-filename为深度学习模型文件;weights-filename为与模型文件对应的权值文件;image-filename为需要测试的图片;output-result-ptr为输出参数,返回一个大小为nSize的分类结果数组。用户可以将不同的模型赋值给model-filename实现多个深度学习模型的使用,案例中我们选择ImageNet竞赛模型。

测试案例实现步骤如下:

1) 图片规则化:将输入图片统一处理为固定大小,保证长宽比例为1∶1;

2) 子图抽样:依次从图的左上、右上、左下、右下,中间抽样,并对抽样的子图翻转,得到10张输入数据。保证识别内容在抽样子图中;

3) 装载库:调用test-images函数,将图片数据输入模型,得到分类结果;

4) 对分类结果进行加权投票统计,得票最高的即为这张测试图片的最终分类;

5) 测试结果可视化。

测试流程见图2所示:

图2 测试案例流程Fig.2 Test case procedure

3深度学习原语封装

3.1基本原语

为深度学习模型设计了一套基本原语,供Julia云平台使用。程序员通过基本原语操作,即可调用不同的深度学习模型。同时还能根据用户具体情况,最优化的选择CPU/GPU的运行策略,减轻了用户编写并行程序的负担,本文列举了深度学习常用原语,见表1。

表1 深度学习常用原语

3.2函数库层次结构

为Julia云平台提供了一个深度学习模式库。模式库从结构上分为模型层、接口层、优化策略层、原语层,如图3所示。

1) 模型层:包含深度学习领域的各种基本模型,为更上层接口提供深度学习方法;

2) 接口层:基本原语的底层实现源码,为Julia平台提供API接口,根据用户需求,同一原语包含不同实现,而具体实现方法由接口层提供。由优化策略层自行调度;

3) 优化策略层:对于相同原语的不同实现,平台按照最优化的策略选择最佳性能的实现方式提供给用户,同样该策略允许根据用户的不同偏好指定函数实现;

4) 原语层:原语层直接面向用户,为Julia程序员提供接口。对用户来说,优化策略层、接口层、模型层是完全透明的。

4实验结果

实验平台参数为:CPU Intel(R),E5-2620,2.10 GHZ*24核心,Matrox GPU,操作系统为Ubuntu14.04,Julia版本为Julia3.0.7,采用ImageNet竞赛的深度学习模型VGG-CNN-S-deploy.prototxt[11]。本文选择10张图片作为测试数据如图4所示。

对于每一张图,进行抽样预处理,将预处理后的图输入模型,得到分类结果,如图5所示。

图4 10张测试数据Fig.4 10 test images

图5 单张图片的抽样提取Fig.5 The sample sub-image of a single image

以lion为例,抽样子图所属类别的概率分布如图6所示,其中横坐标表示1000个分类结果,纵坐标表示所属某个类别的概率。从图中可以清晰的看到,分类到lion类别的概率明显高于其他类别概率。

图6 抽样子图所属类别概率分布Fig.6 The classification probabillity of sub-image

最终,对抽样的10张图片进行加权求值,并统计得票数,可知该测试图片属于lion类别的得票最高,如图7所示。

图7 投票结果Fig.7 Classification resule

在用来测试的10张图片当中,9张图片正确分类。用户不需要理解深度学习模型的工作过程,只需要选择测试所用的模型,就可以准确完成图片分类工作,从而减少了编程负担。

5性能分析

从实验结果可知,Julia云平台上的深度学习模式具有准确性、灵活高效性、易操作的优点。用户不必了解深度学习模型具体实现过程,就可以使用深度学习领域的模型。

5.1准确性

深度学习在处理图像分类问题中具有明显优势,案例结果表明,在测试的图片当中,只有一张分类错误。深度学习在MNIST手写体数字识别上的准确率高达99%,本文案例所用模型在ImageNet数据集上的Top-5错误率也只有13.1%。

5.2灵活高效性

Julia云平台的深度学习支持CPU和GPU两种模式,在调用原语时只需将model设置为GPU,就可以使用并行化的深度学习模型,减少了编写并行程序的麻烦。以MNIST数据集测试为例,数据训练集包含60 000张手写体数字图片。在训练一个神经网络过程中,GPU运行时间比CPU运行时间快近30倍;而在测试过程中,随着迭代次数的增加,GPU的加速效果愈发明显,如图8所示。

图8 CPU与GPU运行时间对比Fig.8 The comparison of CPU and GPU running time

5.3易操作

Julia语言可以通过ccall语法直接调用动态库中的函数,在云平台当中,Julia对用户提供的接口都是已封装好的基本原语,深度学习模型的实现对用户来说是完全透明的,这样用户只需关心大粒度的任务。在本文案例中,只需编写简单的Julia语句,就可以实现单张图片的分类测试,如图9所示。这使得用户在使用深度学习模型时更加方便,提高了开发效率。同时,深度学习模式支持CPU和GPU两种实现,用户使用GPU的深度学习模型,只需将参数mode设置为GPU即可,使之更方便。

mode_file=model.prototxt

weight_file=weight.caffemodel

jinit(mode_file) #初始化深度学习模型

jtrain(model_file,data,GPU)

#训练神经网络模型

img=imresize(original, new_size)

#进行图像规范尺寸变换 cutedImg=prepare_image(img) #子图抽样

jtest(model_file,weight_file,cutedImg,GPU)

#调用测试图片过程 vplot() #可视化操作

图9Julia测试所用源码

Fig.9The source code of Julia Language test

6结论

为Julia云平台设计了一套深度学习模型原语,并封装成动态库,供Julia程序员调用,构建了Julia与深度学习模式的交互式分析系统。同时提供了GPU/CPU两种实现方案,用户通过设置接口参数即可实现不同深度学习模型的使用,系统根据用户情况自动优选CPU/GPU实现方案。为用户使用深度学习模型提供了便捷,同时减少了编写并行化深度学习程序的繁琐。

笔者今后将更加注重原语的提取与开发,满足用户使用深度学习的多种要求,让用户使用模型时更加方便灵活。同时,也将充分利用Julia支持并行化的特点,在诸如图像预处理过程中,采用并行化的策略,提高效率与程序运行速度。

参考文献:

[1]GEOFFERY E H,RUSLAN R S.Reducing the dimensionality of data with neural networks[J].Science,2006,313(5786):504-507.

[2]都大龙,余轶男,罗恒.基于深度学习的图像识别进展:百度的若干实践[J].中国计算机学会通讯,2015,11(4):11-16.

[3]HUBEL D H,WIESEL T N.Recptive fields,binocular interaction,and functional architecture in the cat’s visual cortex[J].Journal of Physiology,1962,160(1):106-154.

[4]FUKUSHIMA K.Neocognition:a self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in postion[J].Biological Cybernetics,1980,36(4):193-202.

[5]LECUN Y,BOTTOU L,HAFFNER P.Gradient-based learning applied to document recognition[J].Proceedings of the IEEE,1998,86(11):2278-2324.

[6]LECUN Y,Boser B,Denker J S,et al.Backpropagation applied to handwritten zip code recognition[J].Neural Computation,1989, 1(4):541-551.

[7]CHATFIELD K,SIMONYAN K,VEDALDI A,et al.Return of the devil in the details:delving deep into convolutional nets[C]∥Machine Vision Conference,British:Eprint Arxiv,2014.

(编辑:刘笑达)

An Interactive Deep Learning Model Based on Julia Cloud Platform

TANG Gexuan1,2,DANG Yunlong3,ZHANG Changyou2,ZHOU Yihua1

(1.SchoolofComputerScienceandTechnology,BeijingUniversityofTechnology,Beijing100124,China;2.StateKeyLaboratoryofComputingScience,theChineseAcademyofSciences,Beijing100190,China;3.InformationScienceandTechnology,ShijiazhuangTiedaoUniversity,ShijiazhuangHebei050043,China)

Abstract:In order to simplify the program development based on deep learning model,an interactive deep learning model based on Julia Cloud Platform is introduced in this paper. The content of our study includes:Design a deep learning primitive function: Implement primitive function in Julia language, supply interface for Julia programmer and construct interactive analysis system. Implement both GPU and CPU interfaces,which can be automatically selected by the Cloud Platform according to whichever situation the clients are in. Implement image interactive analysis case based on deep learning and verify the completeness of primitive function and interactive support ability of Julia Cloud Platform. The experiment result shows that running speed of GPU case is up to 30 times faster than that of CPU case.Julia programmer only needs to call primitive function and set some parameters to use the parallel algorithm.

Key words:julia;high-performance cloud;interactive;deep learning

中图分类号:TP312.1

文献标识码:A

DOI:10.16355/j.cnki.issn1007-9432tyut.2016.01.017

作者简介:唐舸轩(1992-),男,湖南湘潭人,硕士生,主要从事深度学习、并行与分布式计算研究,(E-mail)Charlietong 515@163.com通讯作者:张常有,教授,博士,主要从事并行与分布式计算、协同计算等研究,(E-mail)changyou@iscas.ac.cn

基金项目:国家自然科学基金:项目资助“面向企业创新计算的高性能云服务平台”(61379048)

收稿日期:2015-05-26

文章编号:1007-9432(2016)01-0085-06

猜你喜欢

交互式深度学习
有体验的学习才是有意义的学习
电子商务中基于深度学习的虚假交易识别研究
探析高中物理教学中运用交互式电子白板的实践应用
MOOC与翻转课堂融合的深度学习场域建构
大数据技术在反恐怖主义中的应用展望
深度学习算法应用于岩石图像处理的可行性研究
基于深度卷积网络的人脸年龄分析算法与实现
试论“交互式”课堂模式在初中英语阅读教学中的运用
交互式电子白板在历史教学中的应用研究