写点什么

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

  • 2019-09-27
  • 本文字数:1918 字

    阅读完需:约 6 分钟

开发者向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


2019-09-27 19:243213
用户头像

发布了 61 篇内容, 共 25.6 次阅读, 收获喜欢 135 次。

关注

评论

发布
暂无评论
发现更多内容

ZEGO即构科技荣获36氪【WISE2020中国新经济之王最具影响力企业】

ZEGO即构

TRX波场智能合约APP系统开发|TRX波场智能合约软件开发

系统开发

linux命令:查询占用端口文件所在位置

梁小航航

Linux

六度空间软件系统开发|六度空间APP开发

系统开发

Kubernetes 1.20发布,Release Logo变成一只猫

晓川

话题讨论 | 图解一致性哈希算法全小区局域网最通俗易懂

程序员柠檬

性能之巅:定位和优化程序CPU、内存、IO瓶颈

华为云开发者联盟

性能 cpu 优化

金九银十Android热点知识!架构师花费近一年时间整理出来的安卓核心知识,送大厂面经一份!

欢喜学安卓

程序员 面试 编程开发 Android进阶 Android开发

《迅雷链精品课》第十一课:区块链常用共识算法介绍

迅雷链

区块链

DB-Engines 12月数据库排名: PostgreSQL拿下同期涨幅榜冠军,有望获得「2020年度数据库」荣誉?

华章IT

数据库 postgresql

浅谈ToB市场精细化运营

Linkflow

营销数字化 客户数据平台 CDP 精细化运营

ChaosBlade x SkyWalking 微服务高可用实践

阿里巴巴云原生

微服务 云原生 监控 混沌工程 CloudNative

二层交换机和三层交换机之间VLAN的区别

足不出户带你体验专业实验室,技术实现不在话下

华为云开发者联盟

体验 平台 实验

架构师训练营 1 期 -- 第十二周总结

曾彪彪

极客大学架构师训练营

大厂也在用的 6种 数据脱敏方案,严防泄露数据的 “内鬼”

程序员小富

Java 数据脱敏;

如何通过易观Argo,免费快速搭起精细化运营平台?

易观大数据

iOS逆向学习(arm64汇编入门)

ios 汇编

不为人知的网络编程(十):深入操作系统,从内核理解网络包的接收过程(Linux篇)

JackJiang

Linux 网络编程 TCP/IP

架构师训练营第一期 - 第十一周学习总结

卖猪肉的大叔

极客大学架构师训练营

mybatis快速入门,so easy啦

田维常

mybatis

大厂iOS面试题全面讲解(上)

ios 面试

安卓开发不得不会!啃下这些Framework技术笔记,成功入职阿里

欢喜学安卓

android 程序员 编程开发 Android进阶

刷完这两份pdf轻松拿下了蚂蚁金服、头条、小米等大厂的offer。

Java架构之路

Java 程序员 架构 面试 编程语言

Swift性能优化分析

ios swift

3种缓存读写策略都不了解?面试很难让你通过啊兄弟!

Java架构师迁哥

你敢信?就是这个Netty的网络框架差点把我整疯了,哭jj

996小迁

Java 架构 面试 Netty

Alibaba Java面试题大揭秘,把这些知识点吃透去面试成功率高达100%

Java架构之路

Java 程序员 架构 面试 编程语言

《算法问题整理》​.pdf

田维常

Nginx做web服务器linux内核参数优化

赖猫

c++ Linux 编程 后台开发 内核

在阿里巴巴内网找到的一份《Java核心宝典》简直太细了,如获至宝!

Java架构之路

Java 程序员 架构 面试 编程语言

开发者向Swift递交了优秀的可微分编程提案_编程语言_Bhagyashree R_InfoQ精选文章