近日国外一小哥在 tryolabs 上写了一篇博文,为我们详尽地介绍了 Python 的缺陷與相比之下 Swift 的优势解释了为什么 Swift 版的 TensorFlow 未来在机器学习领域有非常好的发展前景。其中包含大量swift代码后面的X示例展示了如何用 Swift 优雅地编寫机器学习程序。 两年之前谷歌的一个小团队开始研究让 Swift 语言成为首个在语言层面上一流地整合了可微分编程能力的主流语言。该项目嘚研究范围着实与众不同而且也取得了一些出色的初期研究成果,似乎离公众应用也并不很远了 尽管如此,该项目却并未在机器学习社区引起多大反响而且很多实践者还对此浑然不觉。造成这种结果的主要原因之一是语言的选择机器学习社区的很多人很大程度上并鈈关心 Swift,谷歌研究它也让人们感到疑惑;因为 Swift 主要用来开发 iOS 应用而已在数据科学生态系统中几乎毫无存在感。 不过事实却并非如此,呮需粗略地看看谷歌这个项目就能发现这是一个庞大且雄心勃勃的计划,甚至足以将 Swift 确立为机器学习领域的关键成员此外,即使我们 Tryolabs 吔主要使用 Python但我们还是认为 Swift 是一个绝佳的选择;也因此,我们决定写这篇文章以帮助世人了解谷歌的计划 但在深入 Swift 以及「可微分编程」的真正含义之前,我们应该先回顾一下当前的状况 Python,你怎么了! 到目前为止,Python 都依然是机器学习领域最常被使用的语言谷歌也有夶量用 Python 编写的机器学习软件库和工具。那么为什么还要用 Swift?Python 有什么问题吗 直接说吧,Python 太慢了另外,Python 的并行性表现并不好 为了应对這些缺点,大多数机器学习项目在运行计算密集型算法时都会使用用 C/C++/Fortran/CUDA 写的软件库,然后再使用 Python 将不同的底层运算组合到一起对于大部汾项目而言,这种做法其实效果很好;但总体概况而言这会产生一些问题。我们先看看其中一些问题 为每个计算密集型运算都调用外蔀二进制文件会限制开发者的工作,让他们只能在算法的表层的一小部分上进行开发比如,编写自定义的卷积执行方式是无法实现的除非开发者愿意使用 C 等语言来进行开发。大部分程序员都不会选择这么做要么是因为他们没有编写低层高性能swift代码后面的X的经验,要么則是因为在 Python 开发环境与某个低层语言环境之间来回切换会变得过于麻烦 这会造成一种不幸的情况:程序员会尽力尽量少地写复杂swift代码后媔的X,并且默认情况更倾向于调用外部软件库的运算对于机器学习这样动态发展的领域来说,这并不是一个好现象因为很多东西都还並未确定下来,还非常需要新想法 让 Python swift代码后面的X调用更低层swift代码后面的X并不如将 Python 函数映射成 C 函数那么简单。不幸的现实是:机器学习软件库的创建者必须为了性能而做出一些开发上的选择而这又会让事情变得更加复杂。举个例子在 TensorFlow 图(graph)模式中(这是该软件库中唯一嘚性能模式),你的 Python swift代码后面的X在你认为会运行时常常并不运行在这里,Python 其开发流程为:开发者首先使用 Python 定义一个网络然后 TensorFlow 后端使用該定义来构建网络并将其编译为一个 blob,而开发者却再也无法访问其内部编译之后,该网络才终于可以运行开发者可以开始向其馈送数據以便训练和推理。这种工作方式让调试工作变得非常困难因为在网络运行时,你没法使用 Python 了解其中究竟发生了什么你也没法使用 pdb |
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。