AI(人工智能)为应用开发者开创了一个全新的可能性。通过利用机器学习或深度学习,您可以生成更好的用户配置文件、个性化设置和推荐,或者整合更智能的搜索、语音界面或智能助手,或者以其他数种方式改进您的应用。你甚至可以构建看得懂、听得懂,并与人类互动的应用。
你应该学习哪种编程语言来深度探索 AI ?当然,一个拥有许多优秀的机器学习和深度学习库的语言是受欢迎的。它还应具有良好的运行时性能、良好的工具支持、具有大量程序员的社区以及健康的支持包生态系统。经过筛选,符合这些条件的语言仍然很多。
下面是我认为最适合 AI 开发的五种编程语言,按照适合程度排序。此外我还提到了三个备选项。其中一些语言正在兴起,而另一些似乎正在没落。几个月后回来,你可能会发现排名已经发生了变化。
1. Python
第一名毫无疑问是 Python。尽管 Python 有些特性令人不爽(whitespace、Python 2.x 和 Python 3.x 之间的巨大差异、五种不同的包机制都在不同程度上有缺陷)但如果你正在从事 AI 工作,你几乎肯定会在某些时候用到 Python。
Python 中可用库的数量是其他语言所无法企及的。NumPy 已经变得如此普遍,以至于几乎成为了张量运算的标准 API,Pandas 将 R 的强大而灵活的数据帧带入 Python。对于自然语言处理(NLP),您可以使用久负盛名的 NLTK 和快如闪电的 SpaCy。对于机器学习,有经过实战检验的 Scikit-learn。当谈到深度学习时,当前所有的库(TensorFlow,PyTorch,Chainer,Apache MXNet,Theano 等)都是在 Python 上首先实现的项目。
来自德国的 AI 研究者正在 LiveEdu 上讲解如何用 Python 搭建机器学习模型
如果您正在阅读关于 arXiv 的顶尖深度学习研究,那么几乎可以肯定您会在 Python 中找到源代码。 此外,Python 生态系统中还有其他部分。虽然 IPython 已经改名为 Jupyter Notebook,看上去不再以 Python 为中心,但您仍然会发现绝大多数 Jupyter Notebook 用户以及大多数在线共享笔记本都使用 Python。
Python 是人工智能研究的前沿语言,这是拥有最多机器学习和深度学习框架的语言,也是 AI 研究者几乎都掌握的语言。由于这些原因,尽管笔者每天都要咒骂一次 whitespace 问题,Python 仍然是人工智能编程语言之王,您没法绕过它。
2. Java 和相关语言
JVM 系列语言(Java,Scala,Kotlin,Clojure 等)也是 AI 应用开发的绝佳选择。无论是自然语言处理(CoreNLP)、张量运算(ND4J)还是完整的 GPU 加速深度学习堆栈(DL4J),您都可以使用大量的库来管理流水线的各个部分。另外,您还可以轻松访问 Apache Spark 和 Apache Hadoop 等大数据平台。
Java 是大多数企业的通用语言,在 Java 8 和 Java 9 中提供了新的语言结构,这使得编写 Java 代码的体验不再像我们过去所记得的那样糟糕。使用 Java 编写人工智能应用可能会让人觉得无聊,但它确实能完成工作,并且您可以使用所有现成的 Java 基础架构来开发、部署和监视。
3. C/C++
在开发 AI 应用时,C / C ++ 不太可能成为您的首选,但如果您在嵌入式环境中工作,并且无法承受 Java 虚拟机或 Python 解释器的开销,那么 C / C ++ 就是最好的解决方案。当你需要榨干系统的每一滴性能时,你就得面对可怕的指针世界。
幸运的是,现代 C / C ++ 写起来体验还不错(实话实说!)。您可以从下列方法中选择一个最适合的:您可以一头扎进堆栈底部,使用 CUDA 等库来编写自己的代码,这些代码将直接在 GPU 上运行;您也可以使用 TensorFlow 或 Caffe 以访问灵活的高级 API。后者还允许您导入数据科学家用 Python 写的模型,然后以 C / C ++ 级别的速度在生产环境中运行它们。
在未来一年中,请密切留意 Rust 在 AI 领域的一些动作。结合 C / C ++ 级别的速度与类型和数据安全性,Rust 是实现产品级性能却不会造成安全问题的最佳选择。并且它现在已经可以与 TensorFlow 绑定了。
4. JavaScript
蛤?!JavaScript?我没听错吧?其实,谷歌最近发布了 TensorFlow.js,这是一个 WebGL 加速库,允许您在 Web 浏览器中训练和运行机器学习模型。它还包括 Keras API 以及加载和使用在常规 TensorFlow 中训练过的模型的功能。这可能会吸引大量的 JS 开发者涌入 AI 领域。虽然 JavaScript 目前能够访问的机器学习库与其他语言相比有所局限,但在不久的将来,开发者在网页中添加神经网络就和添加 React 组件或 CSS 属性一样简单。这听上去既强大又恐怖。
TensorFlow.js 仍处于早期阶段。目前它可在浏览器中运行,但不适用于 Node.js。它还没有实现完整的 TensorFlow API。不过,我预计到 2018 年底,这两个问题都将基本得到解决,并且JavaScript 将在不久之后大举进军 AI 界。
5. R
R 在这份榜单中排名最末,并且看上去将会越来越没落。R 是数据科学家喜欢的语言。但是,其他程序员在第一次接触 R 时会感到有些困惑,因为它采用了以数据帧为中心的方法。如果您有一组专门的 R 开发者,那么将 R 与 TensorFlow、Keras 或 H2O 搭配使用,进行研究、原型设计和实验是有意义的。但基于性能和操作方面的考虑,我不愿意推荐将 R 用于生产。虽然您可以写出能在生产服务器上部署的高性能 R 代码,但将这种用 R 语言编写的原型重新编码为 Java 或 Python 肯定会更容易。
其他 AI 编程语言
当然,Python、Java、C / C ++、JavaScript 和 R 并不是 AI 编程仅有的几个选项。让我们看看其他三种编程语言,虽然它们没有进入我们的前五名榜单。其中两种呈现上升趋势,另外一种则在没落。
Lua
几年前,Lua 在人工智能领域处于领先地位。借助 Torch 框架,Lua 是深度学习开发中最受欢迎的语言之一,您仍然会在 GitHub 上遇到许多用 Lua / Torch 编写模型的深度学习早期项目。我认为,为了研究和了解人们过往的工作,熟悉 Lua 是个好主意。但随着 TensorFlow 和 PyTorch 等框架的诞生,Lua 的使用频率大幅下降。
Julia
Julia 是一款专注于数值计算的高性能编程语言,因此它非常适合 AI 这一侧重数学的领域。尽管它并没有流行到可以成为 AI 编程语言当下的选择之一,但像 TensorFlow.jl 和 Mocha(受 Caffe 影响很大)这样的封装为其提供了良好的深度学习支持。如果你不介意 Julia 目前还没有一个庞大的生态系统,但却想从方便快捷的高性能计算中获益,那么 Julia 就是你的不二选择。
Swift
在笔者发表这篇文章前不久,LLVM 编译器和 Swift 编程语言的作者 Chris Lattner 发布了 Swift for TensorFlow,该项目承诺将结合 Python 所提供的易用性与编译语言所提供的速度及静态类型检查。作为奖励,Swift for TensorFlow 还允许您导入 Python 库(如 NumPy),并将它们用于您的 Swift 代码,其体验可与使用 Swift 库相媲美。
Swift for Tensorflow 目前正处于开发早期,但能够编写现代编程结构并获得快速、安全的编译时保证,这听上去前景十分诱人。即使你还没有开始学习 Swift,我也会建议你长期关注这个项目。