Spark与深度学习框架——H2O、deeplearning4j、SparkNet

阅读原文请点击

摘要: 引言:你可能对使用Spark服务比较感兴趣。Spark已经提供了很多功能,也有一个好用的界面,而且背后有强大的社区,开发者十分活跃,这也是人们对Spark寄予厚望的原因。深度学习是当前正在进行中的Spark项目之一。

引言:你可能对使用Spark服务比较感兴趣。Spark已经提供了很多功能,也有一个好用的界面,而且背后有强大的社区,开发者十分活跃,这也是人们对Spark寄予厚望的原因。深度学习是当前正在进行中的Spark项目之一。本文我们将介绍一些Spark能用的深度学习框架。
本文选自《Spark:大数据集群计算的生产实践》。

  深度学习因其高准确率及通用性,成为机器学习中最受关注的领域。这种算法在2011—2012年期间出现,并超过了很多竞争对手。最开始,深度学习在音频及图像识别方面取得了成功。此外,像机器翻译之类的自然语言处理或者画图也能使用深度学习算法来完成。深度学习是自1980年以来就开始被使用的一种神经网络。神经网络被看作能进行普适近似(universal approximation)的一种机器。换句话说,这种网络能模仿任何其他函数。例如,深度学习算法能创建一个识别动物图片的函数:给一张动物的图片,它能分辨出图片上的动物是一只猫还是一只狗。深度学习可以看作是组合了许多神经网络的一种深度结构。
  与其他已有的机器学习算法相比,深度学习需要大量参数及训练数据。这也是我们介绍能在Spark上运行的深度学习框架的原因。要想在企业环境中稳定地进行深度学习的训练,必须要有一个可靠而快速的分布式引擎。
  Spark被视为目前最适合运行深度学习算法的平台,是因为:

  • 基于内存的处理架构对于使用机器学习的迭代计算,特别是深度学习,十分适合。
  • Spark的几个生态系统如MLlib及Tachyon对于开发深度学习模型很有用。

本文我们将介绍一些Spark能用的深度学习框架。这些框架和深度学习一样,都是比较新的库。很可能你在使用它们的过程中遇到一些bug或者缺少一些操作工具,但是报告问题(issue)及发送补丁将会使它更加成熟。

H2O

  H2O是用h2o.ai开发的具有可扩展性的机器学习框架,它不限于深度学习。H2O支持许多API(例如,R、Python、Scala和Java)。当然它是开源软件,所以要研究它的代码及算法也很容易。H2O框架支持所有常见的数据库及文件类型,可以轻松将模型导出为各种类型的存储。深度学习算法是在另一个叫作sparkling-water的库中实现的(http://h2o.ai/product/sparkling-water/)。它主要由h2o.ai开发。要运行sparkling-water,需要使用Spark 1.3或以上的版本。

安装

1.首先需要从h2o网站下载最新的sparking-water。
http://h2o-release.s3.amazonaws.com/sparkling-water/rel-1.3/1/index.html)
2.把它指向Spark的安装目录。

$ export Spark_HOME=/path/to/your/spark

3.启动sparkling-shell,这个接口与spark-shell类似。

$ cd ~/Downloads
$ unzip Sparkling-water-1.3.1.zip
$ cd Sparkling-water-1.3.1
$ bin/Sparkling-shell

  sparkling-water源码中包含几个例子。不幸的是,有些例子在Spark 1.5.2版本上无法正常运行。深度学习的demo也有相同的问题。你得等待这些问题被解决,或者自己写几个能在Spark运行的补丁。

deeplearning4j

  deeplearning4j是由Skymind开发的,Skymind是一家致力于为企业进行商业化深度学习的公司。deeplearning4j框架是创建来在Hadoop及Spark上运行的。这个设计用于商业环境而不是许多深度学习框架及库目前所大量应用的研究领域。Skymind是主要的支持者,但deeplearning4j是开源软件,因此也欢迎大家提交补丁。deeplearning4j框架中实现了如下算法:

  • 受限玻尔兹曼机(Restricted Boltzmann Machine)
  • 卷积神经网络(Convolutional Neural Network)
  • 循环神经网络(Recurrent Neural Network)
  • 递归自编码器(Recursive Autoencoder)
  • 深度信念网络(Deep-Belief Network)
  • 深度自编码器(Deep Autoencoder)
  • 栈式降噪自编码(Stacked Denoising Autoencoder)

这里要注意的是,这些模型能在细粒度级别进行配置。你可以设置隐藏的层数、每个神经元的激活函数以及迭代的次数。deeplearning4j提供了不同种类的网络实现及灵活的模型参数。Skymind也开发了许多工具,对于更稳定地运行机器学习算法很有帮助。下面列出了其中的一些工具。

Canova (https://github.com/deeplearning4j/Canoba)是一个向量库。机器学习算法能以向量格式处理所有数据。所有的图片、音频及文本数据必须用某种方法转换为向量。虽然训练机器学习模型是十分常见的工作,但它会重新造轮子还会引起bug。Canova能为你做这种转换。Canova当前支持的输入数据格式为:
-- CSV
--原始文本格式(推文、文档)
--图像(图片、图画)
--定制文件格式(例如MNIST)

  • 由于Canova主要是用Java编写的,所以它能运行在所有的JVM平台上。因此,可以在Spark集群上使用它。即使你不做机器学习,Canova对你的机器学习任务可能也会有所裨益。

阅读原文请点击

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭