随着机器学习、深度学习为主要代表的人工智能技术的逐渐成熟,越来越多的 AI 产品得到了真正的落地。
无论是以语音识别和自然语言处理为基础的个人助理软件,还是以人脸识别为基础的刷脸付费系统,这些都是 AI 技术在现实生活中的实际应用。
应当说 AI 正在走进千家万户,来到你我的身边。
另一方面,从研发角度来讲,AI 产品的落地并不是一件容易的事情:
AI 技术数学理论要求高,数理统计、神经理论与脑科学、优化理论、矩阵论……
AI 硬件层面要求非常高,GPU、TPU、FPGA……
如何基于目前的主流研究成果和硬件,对 AI 产品进行一站式的开发?这正是当前企业工程师面临的实际痛点。
对此,多家企业及研究机构推出了自己的解决方案,如 Google 推出并开源了 TensorFlow,Facebook 主导 PyTorch 和 Caffe 2,Amazon 选择 MXNet 并打算投资围绕 MXNet 的系统,微软开发并大力推广 CNTK......
这些都是以 Python 和 C/C++ 语言为主,而在目前企业项目中,无论是 Web 应用、Andriod 开发还是大数据应用,Java 语言都占有很大的比例。
此外,我们必须看到,越来越多的从事传统 Java 应用开发的工程师尝试将 AI 技术融入到项目中,或者自身在尝试转型 AI 领域。
因此如果有类似 TensorFlow、Caffe 这些 AI 解决方案而又同时基于 Java 的,那么无疑会为项目的推进及个人的发展带来很多便利。
Deeplearning4j 正是这类解决方案中的佼佼者。
01
Deeplearning4j 是什么?
Deeplearning4j 是由美国 AI 创业公司 Skymind 开源并维护的一个基于 Java/JVM 的深度学习框架。
同时也是在 Apache Spark 平台上为数不多的,可以原生态支持分布式模型训练的框架之一。
此外,Deeplearning4j 还支持多 CPU/GPU 集群,可以与高性能异构计算框架无缝衔接,从而进一步提升运算性能。
在 2017 年下半年,Deeplearning4j 正式被 Eclipse 社区接收,同 Java EE 一道成为 Eclipse 社区的一员。
02
为什么选择 Deeplearning4j?
1. 基于 Java,专为企业应用而生
Deeplearning4j 是基于 Java 的深度学习开源框架。从实际开发的角度上,它是面向 Layer 编程的神经网络开发框架,对很多常见的神经网络结构做了高度的封装。
熟悉 Keras 的朋友可以认为 Deeplearning4j 是 Java 版本的 Keras。
同时 Deeplearning4j 也完美兼容 Scala 和 Clojure。
2. 丰富的开源生态圈,遵循 Apache 2.0
Deeplearning4j 也拥有自己的生态。在 Deeplearning4j 的相关开源项目中,就有专门为张量运算而开发的 ND4J 和数据处理的 DataVec。它们的作用相当于 Python 中的 NumPy 和 Pandas。
当然,除了这些项目以外,Arbiter、RL4J 等项目也大大丰富了 Deeplearning4j 的生态圈。
3. 与 Hadoop 和 Spark 集成,支持分布式 CPU 和 GPU
Deeplearning4j 是原生支持在 Apache Spark 上构建分布式深度学习解决方案的框架。
由于在企业的实际应用场景中,大数据的统计和存储往往会依赖 Hive/HDFS 等存储介质。
而算法模型的构建必须依赖庞大的数据,因此如果可以完成一站式的数据存储、数据提取和清洗、训练数据的构建、模型训练和调优的所有开发环节,无疑是非常理想的解决方案。
Deeplearning4j 以数据并行化为理论基础构建了分布式神经网络建模的解决方案,为大数据 + 算法的开发提供了直接的支持。
Deepleanring4j 支持多 CPU/GPU 集群的建模。就像在上文中提到的,GPU 等硬件的成熟大大加速了 AI 的发展。
Deeplearning4j 通过 JavaCPP 技术调用 cuBLAS 来实现在 GPU 上的加速建模。对于 GPU 集群的支持则需要依赖 Spark。
4. 越来越受开发人员欢迎
自 Deeplearning4j 从 2016 年左右开源以来,功能优化与新特性的丰富使得项目本身不断得到完善,在 GitHub 上的 Commiter 活跃度与 Star 数量也不断增加,使得该开源框架越来越得到国内外企业的关注。
就目前 Skymind 官网提供的信息来看,就有数十家明星企业和研发机构在部署使用 Deeplearning4j,其中就不乏有 Oracle、Cisco、IBM、软银、亚马逊、阿里巴巴等知名企业。
而随着 Deeplearning4j 在工业界的使用逐渐增多,更多的研发人员希望有一套教程可以用来辅助开发和作为参考。
因此我在 GitChat 平台编写了这门《Deepleraning4j 快速入门》,希望可以帮助读者尽可能轻松与快速地掌握 Deeplearning4j 的使用。
03
Deeplearning4j 的最新进展
目前 Deeplearning4j 已经来到了 1.0.0-beta3 的阶段,马上也要发布正式的 1.0.0 版本。
本课程我们主要围绕 0.8.0 和 1.0.0-alpha 展开(1.0.0-beta3 核心功能部分升级不大),这里罗列下从 0.7.0 版本到 1.0.0-alpha 版本主要新增的几个功能点:
Spark 2.x 的支持(>0.8.0)
支持迁移学习(>0.8.0)
内存优化策略 Workspace 的引入(>0.9.0)
增加基于梯度共享(Gradients Sharing)策略的并行化训练方式(>0.9.0)
LSTM 结构增加 cuDNN 的支持(>0.9.0)
自动微分机制的支持,并支持导入 TensorFlow 模型(>1.0.0-alpha)
YOLO9000 模型的支持(>1.0.0-aplpha)
CUDA 9.0 的支持(>1.0.0-aplpha)
Keras 2.x 模型导入的支持(>1.0.0-alpha)
增加卷积、池化等操作的 3D 版本(>1.0.0-beta)
除此之外,在已经提及的 Issue 上,已经考虑在 1.0.0 正式版本中增加对 YOLO v3、GAN、MobileNet、ShiftNet 等成果的支持,进一步丰富 Model Zoo 的直接支持范围,满足更多开发者的需求。
04
你能从课程学到什么?
本课程主要面向:
对 Deeplearning4j 入门感兴趣的初学者
希望转型人工智能领域的 Java 工程师
有科学计算背景的高校/企业工作人员
我将结合 Deeplearning4j 的特性来介绍目前主流深度学习研究成果,通过大量的实际案例来讲解 Deeplearning4j 在结构化数据、自然语言处理、机器视觉领域的应用,具体内容涉及:
多层感知机在分类和回归问题上的应用
深度信念网络在数据压缩问题上的应用
卷积神经网络在图像分类和目标检测问题上的应用
循环神经网络在文本分类/文本生成/序列标注等问题上的应用
……
课程还将结合 Deeplearning4j 支持的特性,从本地单 CPU/多 CPU 建模开始介绍,循序渐进,逐步将单 GPU / 多 GPU 并行以及 Spark 集群建模的详细内容介绍给大家,从而在宏观层面尽可能对 Deeplearning4j 的内容介绍得详尽且实用。
由于 Deeplearning4j 生态圈的内容丰富,我将着重就最常用的 ND4J、DataVec、RL4J 做详细介绍。
05
学习建议
由于 AI 是一项跨多学科且对理论和工程开发都有着一定要求的技术,因此实际动手操作非常重要。
只有自己动手做过一两个项目或者参加过一些算法比赛,研发人员才会对如何做好算法项目和产品有感性的认识,而不会仅仅停留在理论层面。
踩坑虽然痛苦,但其实也是加深对理论理解的必需过程,在这个方面并没有太多捷径可走。
在学习本课程前,希望读者有一定的 Java 工程基础,以及对机器学习/深度学习理论的简单了解。
对优化理论、微分学、概率统计有一定的认识,对理解神经网络的基础理论(如 BP 算法)将大有裨益。
最后需要说明的是,机器学习、深度学习领域发展迅速,我个人虽然专注机器学习领域的开发与应用多年,但是经验依然处于初窥门径的阶段,因此课程中难免存在错误和疏漏。
希望大家在学习过程中发现任何问题及时帮忙指出,我会尽可能在第一时间修正。
同时,我自己也希望和所有喜欢 AI 技术和本课程的朋友多些交流,不断完善和提高课程的质量。
06
课程脑图
·点击查看大图·
万宫玺,苏宁易购高级算法工程师。现任职于苏宁易购搜索研发中心,对机器学习/深度学习在自然语言处理、机器视觉等领域的应用开发有着丰富的经验,先后参与部门反作弊系统、智能问答机器人、Query 语义挖掘与分析系统等机器学习项目的开发。
题图:出自电影《Wall · E》