首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

开发者向Swift递交了优秀的可微分编程提案

在可微分编程Mega提案(Differentiable Programming Mega-Proposal)项目工作了一年半后,Richard Wei,一位来自谷歌大脑的开发者和他所在的团队,在Swift开发论坛(Swift Evolution forum)递交了一个提案。该提案旨在“在数值方面和机器学习方面,把Swift的能力推向另一高度”,实现这一目标的方式正是在Swift中引入可微分编程,这一新的语言特征。它是Swift for Tensorflow项目的一部分,团队成员通过这个项目把Tensorflow直接集成到Swift语言中,向开发者提供下一代机器学习平台。

可微分编程是什么?

随着深度学习模型日益增加的复杂度,以及现代化深度学习框架的引入,很多研究人员开始意识到构建神经网络和编程很相似。

Yann LeCun,Facebook的VP和首席AI科学家,把可微分编程看作现代深度学习技术基础上做的少量的重新包装,和深度学习在现代神经网络上做的包装类似,深度学习只是网络层数大于两层的神经网络。他把可微分编程与常规编程进行比较,发现唯一的不同仅在于编程结果是“参数化的,自动微分的,且可训练/优化的。”

一些人也说可微分编程只是自动微分的另一种说法,自动微分技术是从数值上计算一个函数导数的方法。它可以被看做是一个新的编程样式,在该样式中,程序可以从头到尾进行微分求解。

参考一下这篇论文:“Demystifying Differentiable Programming: Shift/Reset the Penultimate Backpropagation”,可以更好地理解可微分编程。

为何可微分编程要被提交到Swift?

Swift是一个表达性强,高性能的语言,这使它成为数值应用程序的完美候选。根据提案作者说,Swift中一流的可微分编程支持,将允许安全和强大的机器学习开发。

提案作者还相信这是“向着高级数值计算支持迈进的重要一步”。通过这个提案,他们旨在数值计算和机器学习领域把Swift变得真正有竞争力。

以下是在Swift中加入一流的可微分编程支持的优势:

  • 更好的语言覆盖面:一流的可微分编程支持将使微分功能与Swift中其他功能工作得更加顺畅。这将允许开发者可以正常地编码,而不用受限于Swift的某个功能子集。
  • 可扩展性:这将给开发者提供一套可扩展的微分编程系统。开发者们能够利用基础的算子(其在标准库中定义,在类型系统中得到支持),创造自定义的微分API。
  • 静态警告和报错:这将使得编译器可以静态地确认哪些函数不是可微分的,或者会产生值为0的微分。然后,它会给出无法进行微分的错误或者警告。通过在同一个库中,直接调试机器学习运行时错误,能够提高生产力。

该提案将在Swift中加入的一些组件包括:

  • 可微分协议:这是一项标准的库协议,它将生成所需的数据结构,这些数据结构可以是微分方程的参数或者是输出结果。
  • @differentiable声明属性:这个属性可用于把类函数声明标记为可微分。
  • @differentiable函数类型:这是正常函数的一个子类型,但是它有着不同的运行时表达方式和调用规则。可微分函数类型接收可微分参数,并输出可微分的结果。
  • 微分算子:这部分是可微分API的核心,它把“@differentiable”函数作为输入,返回导函数或者计算出导数。
  • @differentiating和@transposing算子:这些属性是用于声明其他函数的某个自定义导函数。

这个提案在Hacker News上引发了激烈讨论。一些开发者对于把可微分编程支持引入Swift核心代码感到兴奋。一个用户评论道:“这个提案的影响是巨大的。我几年前在Haskell上看见过类似的POC(proof of concept)工作,但看到它被集成到一个主流语言的核心部分,这真是令人赞叹不已。这可以让他们从Python中夺取一大块机器学习市场。希望他们后续能够继续改善机器学习的API。”

一些人认为则提交一个单独的库可以达到同样的目的。“我知道一个编写良好的库也能实现同样的目的。现在这个看起来是不优雅的。比如说,Python难道就不曾考虑加入这样的机制吗,Python这样的语言才是真正能受益最多的语言,因为它已经具备了很多工具和诸多社区。这个提案看起来涉及的范畴过于狭窄,并且与开发语言不在一个抽象层次上。我看到过开发语言支持高层次的功能,这样一个库就可以不用做额外工作也能嵌入这个语言了(例如反射机制),“一位用户补充道。

开发者们还讨论另一个做了类似工作的项目:Julia Zygote,它是一个源到源(source-to-sourc)的自动微分原型项目。一位用户评论道:”是的,Julia的下一代Zygote项目正在快速发展。而且,作为一个普通用户来看超越深度学习的应用程序,我目前为止最喜欢的就是基于模型的增强学习和神经常微分方程。“

想了解更多细节,可点击查看该提案:Differentiable Programming Mega-Proposal

原文链接: Developers from the Swift for TensorFlow project propose adding first-class differentiable programming to Swift

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/cakwUJuUF2HM1frO7bUv
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券