课程亮点
- 机器学习经典案例基于 DL4J 的实现
- Spark 分布式场景下的模型训练及调优
- 多 GPU 环境下的并行建模
- 迁移和强化学习的模型训练
- 搭建在线服务环境实战演练
本课程是关于 Eclipse Deeplearning4j 的基础课程。Deeplearning4j 是基于 Java/JVM 的深度学习开源库,课程内容涵盖了 Deeplearning4j 生态圈中核心框架的使用(如 ND4J/DataVec/RL4J),介绍了深度神经网络在 CV/NLP 领域的建模、训练、部署、上线一站式开发流程,以及单机/并行/分布式(Apache Spark)场景下的模型训练过程,异构计算框架(CPU+GPU)硬件架构下的加速优化步骤等内容。
大咖推荐
作为最早一批加入到开源平台社区的技术人员,万老师也是在社区对 Deeplearning4j 最有经验的人之一,期间他也很努力地帮助其他社区的人。课程内容涵盖全面,完全满足入门级学员们对于 Deeplearning4j 的学习需求。
——吴书卫博士,Skymind 大中华区负责人&CTO
作者介绍
万宫玺,苏宁易购高级算法工程师。现任职于苏宁易购搜索研发中心,对机器学习/深度学习在自然语言处理、机器视觉等领域的应用开发有着丰富的经验,先后参与部门反作弊系统、智能问答机器人、Query 语义挖掘与分析系统等机器学习项目的开发。
课程大纲
* 实际更新文章题目可能与框架略有出入
适宜人群
- 对 Deeplearning4j 入门感兴趣的初学者
- 希望转型 AI 开发的 Java 工程师
- 有科学计算背景的高校/企业工作人员
课程内容
推荐序:《Deeplearning4j 快速入门》课程,深度学习必备秘籍
从 1956 年 Dartmouth 学会上提出的“人工智能”一词,到时下火热的人脸识别技术、车牌识别技术、智能语音应答,再到未来汽车发展趋势的自动驾驶技术,“人工智能”已然成为了科技未来的发展大势。对于广大 IT 行业从业人员而言,单纯地掌握 Java 等软件编程技术是远远不够的,学习 Deeplearning4j 技术就成为了进军“人工智能”行业的敲门砖。作为 Skymind 在亚洲的 CTO,我要为广大对 Deeplearning4j 入门感兴趣的初学者、希望转型 AI 开发的 Java 工程师、有科学计算背景的高校/企业工作人员推荐一门名为《Deeplearning4j 快速入门》的课程。
推荐理由之授课教师
担任本次课程的主讲老师是苏宁易购高级算法工程师的万宫玺工程师,现任职于苏宁易购搜索研发中心,对机器学习/深度学习在自然语言处理、机器视觉等领域的应用开发有着丰富的经验,先后参与部门反作弊系统、智能问答机器人、Query 语义挖掘与分析系统等机器学习项目的开发。过硬的技术能力水平,让万老师在授课的过程中能够深入浅出的将 Deeplearning4j 的理论呈现给学员。此外,因为万老师拥有多年的行业从业经验,所以在实践方面的授课中可以让学员进一步了解 Deeplearning4j 的具体应用技巧。此外,作为最早一批加入到开源平台社区的技术人员,万老师也是在社区对 Deeplearning4j 最有经验的人之一,期间他也很努力地帮助其他社区的人。
推荐理由之课程涵盖的具体内容及课程亮点
课程内容涵盖全面,完全满足入门级学员们对于 Deeplearning4j 的学习需求。
《Deeplearning4j 快速入门》课程是关于 Eclipse Deeplearning4j 的基础课程。而课程内容中的 Deeplearning4j 是基于 Java/JVM 的深度学习开源库,课程内容涵盖了 Deeplearning4j 生态圈中核心框架的使用(如 ND4J/DataVec/RL4J),用浅显易懂的授课言语介绍了深度神经网络在 CV/NLP 领域的建模、训练、部署、上线一站式开发流程,以及单机/并行/分布式(Apache Spark)场景下的模型训练过程,异构计算框架(CPU+GPU)硬件架构下的加速优化步骤等内容,让学员们在学习的过程中感受到知识的由浅入深,技术能力的不断提高。课程的最大亮点包含以下几个方面:
- 机器学习经典案例基于 DL4J 的实现
- Spark 分布式场景下的模型训练及调优
- 多 GPU 环境下的并行建模
- 迁移和强化学习的模型训练
- 搭建在线服务环境实战演练
推荐理由之耐心细致的引导
众所周知,学习 Deeplearning4j 的过程中会不可避免地接触并学习数学和编程概念,而对于对这方面比较头痛的学员也大可放心,万宫玺老师在讲解的过程中采用了循序渐进的讲解过程,从授课伊始便能保证学员们可以对数学与代码一直保持着极高的学习热情。
推荐理由之获得更多收获
学习本门课程不仅可以让广大学员们掌握对 Deeplearning4j 基本理论及技术的应用,更可以在实际操作过程中获得顺利完成的满足感,以此刺激大脑中的多巴胺的分泌。
结语
学习是一门修行,而学习 Deeplearning4j 技术可谓是一场苦行,但有了万宫玺老师主讲的《Deeplearning4j 快速入门》课程,就可以让学员们不再畏惧 Deeplearning4j 中晦涩难懂的知识及术语,更可以让我们在之后从事的“人工智能”工作呈现出“长风破浪会有时”的气魄!
开篇词:DL4J——让 Java 开发人员在机器学习领域披荆斩棘
随着深度学习在语音、图像、自然语言等领域取得了广泛的成功,越来越多的企业、高校和科研单位开始投入大量的资源研发 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 正是具备这些特点的深度学习框架。
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 的机制)。需要注意的是,Deeplearning4j 并没有创建自己的分布式通信框架,对于 CPU/GPU 集群的分布式建模仍然需要依赖 Apache Spark。在早期的版本中,Deeplearning4j 同样支持基于 MapReduce 的 Hadoop,但由于其在模型训练期间 Shuffle 等因素导致的迭代效率低下,加上 Spark 基于内存的数据存储模型的高效性,使得其在最近版本中已经停止了对 Hadoop 的支持。
此外,Apache 基金会下另一个分布式计算的顶级项目 Flink 正在积极考虑将 Deeplearning4j 进行集成,详见这里。
Deeplearning4j 生态圈中除了深度神经网络这个核心框架以外,还包括像 DataVec、ND4J、RL4J 等一些非常实用的子项目,下面就对这些子项目的主要功能模块做下介绍。
1. ND4J & LibND4J
这两个子项目是 Deeplearning4j 所依赖的张量运算框架。其中,ND4J 提供上层张量运算的各种接口,而 LibND4J 用于适配底层基于 C++/Fortran 的张量运算库,如 OpenBLAS、MKL 等。
2. DataVec
这是数据预处理的框架,该框架提供对一些典型非结构化数据(语音、图像、文本)的读取和预处理(归一化、正则化等特征工程常用的处理方法)。此外,对于一些常用的数据格式,如 JSON/XML/MAT(MATLAB 数据格式)/LIBSVM 也都提供了直接或间接的支持。
3. RL4J
这是基于 Java/JVM 的深度强化学习框架,它提供了对大部分基于 Value-Based 强化学习算法的支持,具体有:Deep Q-leaning/Dual DQN、A3C、Async NStepQLearning。
4. dl4j-examples
这是 Deeplearning4j 核心功能的一些常见使用案例,包括经典神经网络结构的一些单机版本的应用,与 Apache Spark 结合的分布式建模的例子,基于 GPU 的模型训练的案例以及自定义损失函数、激活函数等方便开发者需求的例子。
5. dl4j-model-z
顾名思义这个框架实现了一些常用的网络结构,例如:
- ImageNet 比赛中获奖的一些网络结构 AlexNet/GoogLeNet/VGG/ResNet;
- 人脸识别的一些网络结构 FaceNet/DeepFace;
- 目标检测的网络结构 Tiny YOLO/YOLO9000。
在最近 Release 的一些版本中,dl4j-model-z 已经不再作为单独的项目,而是被纳入 Deeplearning4j 核心框架中,成为其中一个模块。
6. ScalNet
这是 Deeplearning4j 的 Scala 版本,主要是对神经网络框架部分基于 Scala 语言的封装。
对这些生态圈中子项目的使用案例,我会在后续的文章中详细地介绍,在这里就不赘述了。
为什么要学习 Deeplearning4j
在引言中我们谈到,目前开源的深度学习框架有很多,那么选择一个