写点什么

开发者向 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:243240
用户头像

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

关注

评论

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

百度搜索稳定性问题分析的故事(下)

百度Geek说

百度 后端 数据 软件架构 搜索

云图说|应用魔方AppCube:揭秘码农防脱神器

华为云开发者联盟

低代码 华为云 AppCube 云图说 应用魔方

区块链时代下,企业如何打造数据要素的“新竞争力”?

旺链科技

大数据 产业区块链

Java项目实战营总结

eoeoeo

MUZIKA穆奇卡系统APP开发简介

程序员如何提高开发效率?

万事ONES

项目管理 程序员 敏捷开发 ONES

渗透工程师必看-网络安全法条例-国家安全法介绍和案例

学神来啦

运维 黑客 安全 渗透

阿里的架构师一致好评!IT界首版全栈架构师全栈“成长笔记”开源!

Java架构追梦

Java 阿里巴巴 架构 面试 成长笔记

这套获50w+星标的算法神仙文档,足你解决90%的对手,牛逼

编程 程序员 架构 面试

对EF Core进行扩展使支持批量操作/复杂查询

Spook

EF Core

MySQL连接数管理

Simon

MySQL

爱了!阿里巴巴 Java 面试参考权威指南(泰山版)5月版开源

Java 编程 程序员 架构 面试

敏捷项目管理会不会代替传统项目管理?

万事ONES

项目管理 ONES 敏捷管理

数据结构——平衡二叉树(AVL)

若尘

数据结构 二叉树 平衡二叉树

记某百亿级mongodb集群数据过期性能优化实践

杨亚洲(专注MongoDB及高性能中间件)

Java MySQL 数据库 mongodb 分布式数据库mongodb

云端赛车-Amazon DeepRacer 的前世今生

亚马逊云科技 (Amazon Web Services)

人工智能 开源

手机如果能折叠能卷的话,电脑为什么不能呢?

船医特拉法尔加

开发者 工具 柔性屏

Pandas

Flychen

QuFi挖矿APP开发|QuFi挖矿系统软件开发

Go 学习笔记之 字符串数据类型

架构精进之路

Go 语言 7月日更

手把手教你实现聚光灯效果

ThingJS数字孪生引擎

大前端 可视化 智能灯控 数字孪生

监测生命体征、活动水平的可穿戴电子产品设计方案

不脱发的程序猿

物联网 ADI 可穿戴电子产品设计方案 监测生命体征、活动水平 智能传感器

字节跳动有状态应用云原生实践

火山引擎开发者社区

云原生 后端

数据归档 - 冷热数据处理大师

趣链科技

数据处理 区块链+

JAVA 九种排序算法详解(下)

加百利

Java 数组 排序 7月日更

银行4.0时代的营销与风控之路

索信达控股

大数据 金融科技 数字化转型 银行数字化转型 营销数字化

腾讯上线零点巡航,用Java手撕一个人脸识别系统

北游学Java

Java 腾讯 人脸识别

云原生打包工具:Buildpacks

QiLab

Docker 云原生 k8s buildpacks

共36万字!为上岸Alibaba,我把Github上Java面试题都整理了一遍

Java 编程 程序员 架构 面试

卧薪尝胆30天!啃透京东大牛的高并发设计进阶手册,终获P7意向书

Java 编程 程序员 架构 面试

部分简单网页的基础了解

Emotion

html html5 Html报文解析 内部样式、 CSS语法

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