[关闭]
@atry 2017-05-13T01:19:39.000000Z 字数 3579 阅读 2035

DeepLearning.scala 2.0 采访小抄


DeepLearning.scala 2.0 的唯一功能

DeepLearning.scala一共只有一个功能:把程序本身当成神经网络

这一个功能可以从两个角度理解

  1. 看成Differiable Programming,认为是内置了学习能力的编程语言。
  2. 看成动态神经网络,认为是具备了ifelsefor等动态控制流的神经网络。

目前,动态神经网络被认为是下一代深度学习框架必备的功能。(此处希望佟达补充一下大佬原文出处)
是否具备动态神经网络的区别可以看成代差,今后几个月我希望能有机会和晓雷一起实现一些TensorFlow实现不出来的算法,体现这种代差。

DeepLearning.scala 怎么用?

对于程序员来说,他还是和以前一样写程序,可以使用Scala和Java里的一切普通函数、一切普通控制结构和一切第三方库。只不过他写的程序中,可以额外使用三种具有学习能力的类型,differentiable.Floatdifferentiable.Doubledifferentiable.INDArray。使用这三种类型的代码和其他代码都完全一样,没有什么特殊之处,可以和其他代码混在一起写。

把程序本身当成神经网络有什么好处?

  1. 动态神经网络比静态神经网络功能更强大,能实现出静态神经网络实现不出的算法(对王晓雷很有吸引力)。比如,自然语言处理和语音识别中广泛使用的递归神经网络(RNN)可以看成动态神经网络最简单的一种特例。
  2. 普通代码可以调用神经网络,神经网络也可以调用普通代码。所以,从工程角度看,用DeepLearning.scala实现的算法与业务逻辑的集成很容易。(佟达写的未来的IT系统:DITS - Differentiable IT System也是在讲这个话题)

DeepLearning.scala能创建怎样的神经网络?

虽然DeepLearning.scala只有“把程序本身当成神经网络”一个功能,不过可以给DeepLearning.scala创建的神经网络加一些定语。

  1. 支持GPU(目前通过nd4j支持,2.1以后会改用自己写的GPU编译器)
  2. 支持多线程并行计算(单机情况下可以避免GPU饥饿的情况)
  3. 静态类型(更健壮)
  4. 基于ThoughtWorks西安Scala学习小组开发的ThoughtWorks Each提供的语法糖,因此可以同时提供两种编程范式。用户可以根据自己习惯任选:
    • 类似Scalaz语法的函数式编程
    • 类似Java语法的命令式编程。

DeepLearning.scala 2.0 和其他深度学习框架的对比

DeepLearning.scala 2.0 vs TensorFlow 和其他老牌深度学习框架

DeepLearning.scala 2.0 vs Chainer

Chainer是新出的支持动态神经网络的Python深度学习框架。最近比较火。

DeepLearning.scala 2.0 vs Deeplearning4j

Deeplearning4j和DeepLearning.scala类似,都是JVM上的深度学习框架。
Deeplearning4j的公司开发了一个多维数组库 nd4j 。DeepLearning.scala 2.0也使用nd4j。
Deeplearning4j根本不具备任何定制算法的能力,只能调用作者内置的几个网络层。

DeepLearning.scala 2.0 vs DeepLearning.scala 1.0

DeepLearning.scala 1.0的目标也是把程序本身当成神经网络。但DeepLearning.scala 1.0并不能支持所有的编程语言特性。

DeepLearning.scala 2.0支持所有Scala/Java语言特性。

DeepLearning.scala 后续计划

DeepLearning.scala 2.1:MapReduce on GPU

DeepLearning.scala眼下的燃眉之急在于nd4j太弱,既难用又缺功能,导致 DeepLearning.scala 2.0 支持的算法比 TensorFlow 少。

我们正在开发的 DeepLearning.scala 2.1 中将使用我们自己的多维数组库来代替 nd4j。
我们自己的多维数组库使用一个JIT的编译器,能把MapReduce风格的代码编译为GPU上的神经网络。这种MapReduce风格的API用起来很像Spark,但有两个区别:a)运行在GPU上; b)具有学习能力。

届时 DeepLearning.scala 将由两个层次组成:

DeepLearning.scala 2.x:算法应用

在 DeepLearning.scala 2.1 发布以后,我们会暂停主要功能的开发,而把重点放在算法应用和生态环境建设上。

DeepLearning.scala 3.0+:分布式模型

目前DeepLearning.scala 2.0已经支持了异步多线程计算,DeepLearning.scala 3.0以后将在异步多线程计算的基础上支持集群上的分布式模型。

DeepLearning.scala 3.0+:Java支持

DeepLearning.scala可以很方便的调用Java库,Java代码也可以很方便的调用DeepLearning.scala创建的神经网络。但是目前算法开发者必须用Scala语言来编写神经网络。

我们将在DeepLearning.scala 3.0以后,开发一个Java到定制版Scala的编译器,让算法开发者可以直接使用Java语言编写神经网络,然后我们的编译器把Java代码编译成DeepLearning.scala。

DeepLearning.scala 3.0+:Spark、Hadoop、Kafka等第三方框架集成

DeepLearning.scala本身只是一门特定领域的语言(DSL),可以和任何JVM库交互。然而,用户可能更期待傻瓜式的整合,如果我们能提供一些以Spark Stream、HDFS、Kafka为数据源调用DeepLearning.scala的工具库,用户会更方便些。虽然社区很可能可以帮我们完成这部分工作,但我们至少需要在早期提供整合到第三方框架的样板程序。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注