『』AI市场开发人员访谈录( 六 )


(+) 处理稀疏的编码
(-) 亚马逊可能不会共享要得到其样本的最好结果所必需的所有信息
Speed
Deeplearning4j 使用 ND4J 执行的线性代数计算展现出了在大型矩阵相乘上的至少比 Numpy 快两倍的速度 。这也是为什么我们的 Deeplearning4j 被 NASA 喷气推进实验室里的团队采用的原因之一 。此外 , Deeplearning4j 在多种芯片上的运行已经被优化 , 包括 x86、CUDA C 的 GPU 。
尽管 Torch7 和 DL4J 都可并行 , 但 DL4J 的并行是自动化的 。也就是说 , 我们对工作节点和连接进行了自动化 , 在 Spark、Hadoop 或者与 Akka 和 AWS 上建立大规模并行的时候 , 能让用户对库进行分流 。Deeplearning4j 最适合于解决特定问题 , 而且速度很快 。
为什么要用 JVM(Java 虚拟机)?
我们常被问到我们为什么要为 JVM 实现一个开源深度学习项目 , 毕竟现在深度学习社区的相当大一部分的重点都是 Python 。Python 有很好的句法元素(syntactic elements)让你可以不用创建明确的类就能进行矩阵相加 , 而 Java 却需要这么做 。另外 , Python 还有丰富的科学计算环境 , 带有 Theano 和 Numpy 这样的原生扩展 。
但 JVM 及其主要语言(Java 和 Scala)也有一些优势 。
首先 , 大部分主要的企业和大型政府机构严重依赖于 Java 或基于 JVM 的系统 。他们已经进行了巨大的投资 , 他们可以通过基于 JVM 的人工智能利用这些投资 。Java 仍然是企业中使用最广泛的语言 。Java 是 Hadoop、ElasticSearch、Hive、Lucene 和 Pig 的语言 , 而这些工具正好对机器学习问题很有用 。另一种 JVM 语言 Scala 也是 Spark 和 Kafka 的编程语言 。也就是说 , 许多正在解决真实世界问题的程序员可以从深度学习中受益 , 但它们却被一些语言上的障碍隔开了 。我们想要使深度学习对许多新的受众更有用 , 让他们可以直接将其拿来使用 。在全世界 1000 万开发者中 , 他们使用得最多的语言就是 Java 。
第二 , Java 和 Scala 实际上比 Python 更快 。任何使用 Python 本身写成的东西——不管其是否依赖 Cython——都会更慢 。当然啦 , 大多数计算成本较高的运算都是使用 C 或 C++ 编写的 。(当我们谈论运算时 , 我们也考虑字符串等涉及到更高层面的机器学习过程的任务 。)大多数最初使用 Python 编写的深度学习项目如果要被投入生产 , 就不得不被重写 。Deeplearning4j 可以依靠 JavaCPP 来调用预编译的原生 C++ , 这能极大地加快训练速度 。许多 Python 程序员选择使用 Scala 做深度学习 , 因为当在一个共享代码基础上与其他人合作时 , 他们更喜欢静态类型和函数式编程 。
第三 , 虽然 Java 缺乏稳健的科学计算库 , 但把它们编写出来不就好了 , 这个我们可以通过 ND4J 完成 。ND4J 运行在分布式 GPU 或 CPU 上 , 可以通过 Java 或 Scala API 接入 。
最后 , Java 是一种安全的、网络的语言 , 本身就能在 Linux 服务器、Windows 和 OS X 桌面、安卓手机和使用嵌入式 Java 的物联网的低内存传感器上跨平台工作 。尽管 Torch 和 Pylearn2 可以通过 C++ 优化 , 但其优化和维护却比较困难;而 Java 是一种「一次编程 , 到处使用」的语言 , 适合那些需要在许多平台上使用深度学习的公司 。
生态系统
Java 的普及只能通过其生态系统加强 。Hadoop 是用 Java 实现的;Spark 在 Hadoop 的 Yarn 运行时间内运行;Akka 这样的库使得为 Deeplearning4j 构建分布式系统是可行的 。
总的来说 , Java 拥有经过了高度检验的基础设施 , 拥有大量各种各样的应用 , 而且使用 Java 编写的深度学习网络也能与数据保持紧密 , 这可以让程序员的工作更简单 。Deeplearning4j 可作为一种 YARN 应用而运行和供应 。
Java 也可以从 Scala、Clojure、Python 和 Ruby 等流行的语言中被原生地使用 。通过选择 Java , 我们能尽可能最少地排除主要的编程社区 。


推荐阅读