余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

Python并不完美,Swift正在成长为深度学习语言

xiyangw 2022-12-03 13:13 14 浏览 0 评论

「人生苦短,我用 Python。」但在 Python 如日中天的今天,深度学习可能又需要一种新的编程语言。机器学习工程师 Max Pechyonkin 认为 Swift 可能将成为重要的深度学习语言,他在一篇博客中简要阐述了 Swift 的优势和发展前景。你会考虑学习 Swift 吗?

如果你懂编程,在听到 Swift 时,你可能会想到为 iOS 或 MacOS 开发应用程序。如果你懂深度学习,那么你肯定听闻过 Swift for Tensorflow(简称 S4TF):https://www.tensorflow.org/swift。那么你可能会问自己:「谷歌为什么要为 Swift 创建一个 TensorFlow 版本呢?毕竟已经有 Python 和 C++版本了;为什么还要增加一种语言?」我将在本文中尝试回答这一问题,并会列出你应该认真关注 S4TF 以及 Swift 语言本身的原因。本文的目的并非进行详尽的解释,而是要提供一般性的概述,文中也会带有大量链接以帮助你更深度地了解。

Swift 背后有强有力的支持

Swift 是 Chris Lattner 在苹果公司工作时创造的。现在,Chris Lattner 在谷歌大脑工作,而谷歌大脑是当今世界上最优秀的人工智能团队之一。Swift 语言的创造者现在正在一家研究深度学习的实验室工作,这足以说明这个项目是严肃的。

一段时间前,谷歌的人意识到,即使 Python 语言非常出色,也仍然存在一些难以克服的局限性。TensorFlow 需要一种新语言。经过长时间的斟酌之后,Swift 成为了一个候选项。我这里不会谈及细节,但这里有一份文档描述了 Python 以及其它被考虑过的语言的缺陷,还会解释为何最终将范围缩小到了 Swift:https://github.com/tensorflow/swift/blob/master/docs/WhySwiftForTensorFlow.md

Swift for TensorFlow 不只是一个软件库

Swift for TensorFlow 不只是另一种语言的 TensorFlow。它本质上是 Swift 语言本身的另一个分支。也就是说,S4TF 不只是一个软件库;它本身即是一门语言,其中内置了支持 TensorFlow 所需的所有功能。举个例子,S4TF 自带非常强大的自动微分系统,这是深度学习在计算梯度时所需的基础功能之一。对比一下 Python——自动微分并非该语言的核心组件。S4TF 中某些新开发的功能之后也被整合进了 Swift 语言。

Swift 速度很快

在我刚得知 Swift 的运行速度和 C 语言代码一样快时,我震惊了。我知道 C 语言经过高度优化,能够达到非常高的速度,但这需要对内存进行微管理(这让 C 语言不能保证内存安全)。另外,C 语言也非常不容易学习。

现在,Swift 在数值运算方面与 C 语言一样快,而且还没有内存安全问题,学习难度也低得多。Swift 背后的 LLVM 非常强大,能够进行非常高效的优化,这能确保你的代码高速运行。

你可以在 Swift 中使用 Python、C 和 C++ 代码

因为用于机器学习的 Swift 还处于非常早期的阶段,所以目前针对 Swift 的机器学习库还不多。但你也不用过于担心这一点,因为 Swift 具备出色的 Python 解释能力。你可以直接将任何 Python 库导入 Swift 进行使用。类似地,你也可将 C 和 C++ 库导入 Swift(对于 C++,你要确保头文件是以 C 语言写的,没有 C++ 的特性)。

总的来说,如果你需要特定的功能,但 Swift 中尚未实现,那么你可以导入对应的 Python、C 或 C++ 软件包。很了不起!

Swift 可以做到非常低层

如果你用过 TensorFlow,那么你很可能是通过 Python 使用的。在表层之下,Python 版本的 TensorFlow 库的下面是 C 代码。所以当你调用 TensorFlow 中的任意函数时,你都会在某个层级上遇到 C 代码。这意味着如果你要检查其源代码,你所能到达的层级是很有限的。比如说,如果你想要查看卷积的实现方式,那么你不会看到为此编写的 Python 代码,因为它是用 C 语言实现的。

Swift 则不一样。Chris Lattner 将 Swift 称为「LLVM(汇编语言)的句法糖果(https://www.fast.ai/2019/03/06/fastai-swift/)」。这意味着 Swift 本质上非常靠近硬件,其间没有用 C 语言编写的其它层的代码。这也意味着 Swift 代码非常快,就像前面提到的那样。这样的特性让开发者既能在非常高的层级上检查代码,也能深入非常低的层级,同时无需涉及 C 语言。

Swift 的未来发展

Swift 只是谷歌在深度学习领域的创新的一部分。另外还有一个非常相关的组件:MLIR:https://medium.com/tensorflow/mlir-a-new-intermediate-representation-and-compiler-framework-beba999ed18d。MLIR 全称为 Multi-Level Intermediate Representation,即多级中间表示。MLIR 将会成为谷歌的统一编译器基础设施,让开发者可以用 Swift(或其它任何支持的语言)写代码,然后将其编译到任何支持的硬件。目前,针对不同的目标硬件有很多不同的编译器,而 MLIR 将改变这种情况。这不仅能让代码实现复用,而且还支持开发者为该编译器编写定制的低层组件。它还允许研究者应用机器学习来优化低层算法:

尽管 MLIR 是用作机器学习的编译器,我们也看到它也能在编译器内部实现机器学习技术的应用!这是尤其重要的,因为开发数值库的工程师的增长速度赶不上机器学习模型或硬件多样化的速度。

想象一下,如果能够基于数据使用深度学习来帮助优化低层的内存分片算法(这正是 Halide 语言想要实现的功能),会怎么样?有关 Halide 语言的更多信息:https://www.youtube.com/watch?v=3uiEyEKji0M。这还仅仅是个开始,机器学习在编译器中更多有创意的应用正在路上!

总结

如果你在深度学习领域,那么你可能就应该开始学习 Swift 了。它相比于 Python 有很多优势。谷歌正在大力投入,想要将 Swift 打造成 TensorFlow 机器学习基础设施的一大关键组成部分,而且 Swift 很有可能会变成一门深度学习语言。所以,早点参与到 Swift 的发展中能为你提供先发优势。

进一步探索

  • fast.ai《拥抱用于深度学习的 Swift》:https://www.fast.ai/2019/03/06/fastai-swift/
  • 了解 Swift for TensorFlow:https://towardsdatascience.com/machine-learning-with-swift-for-tensorflow-9167df128912


原文链接:https://pechyonkin.me/portfolio/why-swift-for-tensorflow/

相关推荐

Vue的框架(了解)

前端MVC设计模式MVC设计模式,其实就是将前端实现某个业务的所有代码划分为三部分Model:模型,指数据模型,这个数据一般来自于服务器View:视图,指页面标签内容Controller:控制...

Vue.js实战 第五章练习一

练习要求:在原有表格基础上,新增一项是否选中该商品的功能,总价变为只计算选中商品的总价,同时提供一个全选的按钮。实现思路:按照vue数据和dom元素双向绑定的特性,定义allCheckStatus变量...

Vue基础到进阶教程之class和style绑定

关于class和style我们并不陌生,这个在学习css的时候就是家常便饭了,操作元素的class列表和内联样式是数据绑定的一个常见需求。因为它们都是属性,所以我们可以用v-bind处理它们,...

深入Vue 必学高阶组件 HOC「进阶篇」

作者:ssh转发连接:https://mp.weixin.qq.com/s/seKoLSIMtTd1sU4uDrgZCA前言高阶组件这个概念在React中一度非常流行,但是在Vue的社区里讨论...

周末大礼包,23道高质量中级前端面试题。金九银十,建议收藏

这套面试题考察的内容比较常见,涉及到JavaScript、ES6、CSS、Vue、简单算法,浏览器相关知识等。题目列表1.JavaScript的数据类型有哪些2.什么是同源策略3.跨域的方法...

vue3.0-摒弃Object.defineProperty,基于 Proxy 的观察者机制

写在前面:11月16日早上,Vue.js的作者尤大大在VueToronto的主题演讲中预演了Vue.js3.0的一些新特性,其中一个很重要的改变就是Vue3将使用ES6的Proxy作...

程序员都必掌握的前端教程之VUE基础教程(七)

阅读本文约需要10分钟,您可以先关注我们,避免下次无法找到。本篇文章成哥继续带大家来学习前端VUE教程,今天主要讲解VUE的表单处理等知识点。下面我们就一起来学习该块内容吧!01简介在日常开发中,我...

web前端开之网站搭建框架之vue详解

网站搭建框架之vueVue是web前端快速搭建网站的框架之一。它与jQuery有所不同,是以数据驱动web界面(以操作数据改变页面,而jQuery是以操作节点来改变页面),同时,vue还实现了数据的双...

vue3.0尝鲜-基于 Proxy 的观察者机制探索

Vue.js的作者尤大大在VueToronto的主题演讲中预演了Vue.js3.0的一些新特性,其中一个很重要的改变就是Vue3将使用ES6的Proxy作为其观察者机制,取代之前使用...

TypeScript 设计模式之观察者模式

一、模式介绍1.背景介绍在软件系统中经常碰到这类需求:当一个对象的状态发生改变,某些与它相关的对象也要随之做出相应的变化。这是建立一种「对象与对象之间的依赖关系」,一个对象发生改变时将「自动通知其他...

vue面试3

1.单页面应用与多页面应用的去别2.简述一下Sass、Less,且说明区别?他们是动态的样式语言,是CSS预处理器,CSS上的一种抽象层。他们是一种特殊的语法/语言而编译成CSS。变量符不一样,les...

VUE v-bind 数据绑定

动态的绑定一个或多个attribute,也可以是组件的prop。缩写::或者.(当使用.prop修饰符)期望:any(带参数)|Object(不带参数)参数:attrOrP...

vue初学习之自定义选择框实现

v-model简单介绍在使用vue的过程中会经常用到input和textarea这类表单元素,vue对于这些元素的数据绑定和我们以前经常用的jQuery有些区别。vue使用v-model实现这些标签...

Vue实现拖拽穿梭框功能四种方式

一、使用原生js实现拖拽打开视频讲解更加详细Vue实现拖拽穿梭框功能的四种方式_哔哩哔哩_bilibili<html><head><meta...

Vue3.x setup 语法糖实现props双向绑定

1.背景为了封装一下Element-Plus的分页插件,需要实现父子组件之间的传值。2.父组件<scriptsetuplang="ts">letqueryPa...

取消回复欢迎 发表评论: