前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >让 Java 开发人员在机器学习领域披荆斩棘

让 Java 开发人员在机器学习领域披荆斩棘

作者头像
CSDN技术头条
发布2019-11-19 15:46:56
8600
发布2019-11-19 15:46:56
举报
文章被收录于专栏:CSDN技术头条CSDN技术头条

随着深度学习在语音、图像、自然语言等领域取得了广泛的成功,越来越多的企业、高校和科研单位开始投入大量的资源研发 AI 项目。同时,为了方便广大研发人员快速开发深度学习应用,专注于算法应用本身,避免重复造轮子的问题,各大科技公司先后开源了各自的深度学习框架,例如:TensorFlow(Google)、Torch/PyTorch(Facebook)、Caffe(BVLC)、CNTK(Microsoft)、PaddlePaddle(百度)等。

以上框架基本都是基于 Python 或者 C/C++ 开发的。而且很多基于 Python 的科学计算库,如 NumPy、Pandas 等都可以直接参与数据的建模,非常快捷高效。

然而,对于很多 IT 企业及政府网站,大量的应用都依赖于 Java 生态圈中的开源项目,如 Spring/Structs/Hibernate、Lucene、Elasticsearch、Neo4j 等。主流的分布式计算框架,如 Hadoop、Spark 都运行在 JVM 之上,很多海量数据的存储也基于 Hive、HDFS、HBase 这些存储介质,这是一个不容忽视的事实。

有鉴于此,如果有可以跑在 JVM 上的深度学习框架,那么不光可以方便更多的 Java/JVM 工程师参与到人工智能的浪潮中,更重要的是可以与企业已有的 Java 技术无缝衔接。无论是 Java EE 系统,还是分布式计算框架,都可以与深度学习技术高度集成。Deeplearning4j 正是具备这些特点的深度学习框架。

01

Deeplearning4j 是什么

Deeplearning4j 是由美国 AI 创业公司 Skymind 开源并维护的一个基于 Java/JVM 的深度学习框架。同时也是在 Apache Spark 平台上为数不多的,可以原生态支持分布式模型训练的框架之一。此外,Deeplearning4j 还支持多 GPU/GPU 集群,可以与高性能异构计算框架无缝衔接,从而进一步提升运算性能。在 2017 年下半年,Deeplearning4j 正式被 Eclipse 社区接收,同 Java EE 一道成为 Eclipse 社区的一员。

另外,就在今年的 4 月 7 号,Deeplearning4j 发布了最新版本 1.0.0-alpha,该版本的正式发布不仅提供了一系列新功能和模型结构,也意味着整个 Deeplearning4j 项目的趋于稳定和完善。

Deeplearning4j 提供了对经典神经网络结构的支持,例如:

  • 多层感知机/全连接网络(MLP)
  • 受限玻尔兹曼机(RBM)
  • 卷积神经网络(CNN)及相关操作,如池化(Pooling)、解卷积(Deconvolution)、空洞卷积(Dilated/Atrous Convolution)等
  • 循环神经网络(RNN)及其变种,如长短时记忆网络(LSTM)、双向 LSTM(Bi-LSTM)等
  • 词/句的分布式表达,如 word2vec/GloVe/doc2vec 等

在最新的 1.0.0-alpha 版本中,Deeplearning4j 在开始支持自动微分机制的同时,也提供了对 TensorFlow 模型的导入,因此在新版本的 Deeplearning4j 中可以支持的网络结构将不再局限于自身框架。

DeepLerning4j 基于数据并行化理论,对分布式建模提供了支持(准确来说是基于参数同步机制的数据并行化,并在 0.9.0 版本后新增了 Gradients Sharing 的机制)。此外,Apache 基金会下另一个分布式计算的顶级项目 Flink 正在积极考虑将 Deeplearning4j 进行集成。

Deeplearning4j 生态圈中除了深度神经网络这个核心框架以外,还包括像 DataVec、ND4J、RL4J 等一些非常实用的子项目。

02

为什么要学习 Deeplearning4j

目前开源的深度学习框架有很多,那么选择一个适合工程师自己、同时也可以达到团队业务要求的框架就非常重要了。在这个部分中,我们将从计算速度、接口设计与学习成本,和其他开源库的兼容性等几个方面,给出 Deeplearning4j 这个开源框架的特点及使用场景。

ND4J 加速张量运算

JVM 的执行速度一直为人所诟病。虽然 Hotspot 机制可以将一些对运行效率有影响的代码编译成 Native Code,从而在一定程度上加速 Java 程序的执行速度,但毕竟无法优化所有的逻辑。另外,Garbage Collector(GC)在帮助程序员管理内存的同时,其实也束缚了程序员的手脚,毕竟是否需要垃圾回收并不是程序员说了算;而在其他语言如 C/C++ 中,我们可以 free 掉内存块。

对于机器学习/深度学习来说,优化迭代的过程往往非常耗时,也非常耗资源,因此尽可能地加速迭代过程十分重要。运算速度也往往成为评价一个开源库质量高低的指标之一。鉴于 JVM 自身的局限性,Deeplearning4j 的张量运算通过 ND4J 在堆外内存(Off-Heap Memory/Direct Memory)上进行。

大量的张量运算可以依赖底层的 BLAS 库(如 OpenBLAS、Intel MKL),由于这些 BLAS 库多数由 Fortran 或 C/C++ 写成,且经过了细致地优化,因此可以大大提高张量运算的速度。对于这些张量对象,在堆上内存(On-Heap Memory)仅存储一个指针/引用对象,这样的处理也大大减少了堆上内存的使用。

总结来说,至少有以下 4 种场景可以考虑使用 Deeplearning4j:

  • 如果你身边的系统多数基于 JVM,那么 Deeplearning4j 是你的一个选择;
  • 如果你需要在 Spark 上进行分布式深度神经网络的训练,那么 Deeplearning4j 可以帮你做到;
  • 如果你需要在多 GPU/GPU 集群上加快建模速度,那么 Deeplearning4j 也同样可以支持;
  • 如果你需要在 Android 移动端加入 AI 技术,那么 Deeplearning4j 可能是你最方便的选择之一。

以上四点,不仅仅是 Deeplearning4j 自身的特性,也是一些 AI 工程师选择它的理由。

虽然 Deeplearning4j 并不是 GitHub 上 Fork 或者 Star 最多的深度学习框架,但这并不妨碍其成为 AI 工程师的一种选择。就 Skymind 官方发布的信息看,在美国有像 IBM、埃森哲、NASA 喷气推进实验室等多家明星企业和实验机构,在使用 Deeplearning4j 或者其生态圈中的项目,如 ND4J。算法团队结合自身的实际情况选择合适的框架,在多数时候可以做到事半功倍。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GitChat精品课 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Deeplearning4j 是什么
  • 为什么要学习 Deeplearning4j
    • ND4J 加速张量运算
    相关产品与服务
    GPU 云服务器
    GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档