写点什么

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

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

关注

评论

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

测试面试题集锦(二)| 测试工具篇(附答案)

霍格沃兹测试开发学社

测试面试题集锦(五)| 自动化测试与性能测试篇(附答案)

霍格沃兹测试开发学社

聊聊后端Web开发框架(Python)的简单使用

霍格沃兹测试开发学社

面试 | Python 自动化测试技术面试真题

霍格沃兹测试开发学社

Chrome操作指南——入门篇(四) command

Augus

Chrome开发者工具 9月月更

公排自动滑落模式智能合约dapp系统开发逻辑详情

开发微hkkf5566

该如何测客户端专项测试?

霍格沃兹测试开发学社

软件测试最常用的 SQL 命令 | 通过实例掌握基本查询、条件查询、聚合查询

霍格沃兹测试开发学社

web前端培训开发技术前景怎么样?

小谷哥

车联网该怎样跳过车企设置的红线

Geek_99967b

小程序

软件测试最常用的 SQL 命令(二) | 高级 Join 多表查询

霍格沃兹测试开发学社

面试 | 今日头条测试开发岗位面试题目回顾

霍格沃兹测试开发学社

测试面试真题 | 从屡次碰壁到成长蜕变,半年拿下某大厂 60W 年薪测试开发 Offer!

霍格沃兹测试开发学社

墨天轮沙龙 | 庚顿数据姚羽:实时数据技术赋能流程工业,保障业务连续性

墨天轮

数据库 国产数据库 实时数据库

测试开发基础|一文搞定计算机网络(一)

霍格沃兹测试开发学社

测试必会 | 通过容器化 Python Web 应用掌握 Docker 容器核心技能

霍格沃兹测试开发学社

测试面试真题|工作2年,从小厂到大厂,薪资翻倍是怎样的体验?

霍格沃兹测试开发学社

版本控制神器GitHub的基本使用与踩坑,教你一铲子填平!

霍格沃兹测试开发学社

跨平台API对接(Python)的使用

霍格沃兹测试开发学社

测试面试题集锦(六)| 软素质篇与反问面试官篇(附答案)

霍格沃兹测试开发学社

电商性能测试实战 | JMeter 插件 Ultimate Thread Group 完成梯度递增场景的压测

霍格沃兹测试开发学社

大数据生态安全框架的实现原理与最佳实践(下篇)

明哥的IT随笔

大数据 hdfs hive 数据安全

本周四晚19:00知识赋能第八期第1课丨ArkUI框架整体设计

OpenHarmony开发者

OpenHarmony

测试面试题集锦(三)| 计算机网络和数据库篇(附答案)

霍格沃兹测试开发学社

Chrome操作指南——入门篇(三)

Augus

Chrome开发者工具 9月月更

如何深入学习前端培训技术知识

小谷哥

Github点击破百万!这部《从零开始学架构》神书就此霸榜

Java-fenn

Java 程序员 java面试 Java面试题 Java面试Java面试题

用 Pytest+Allure 生成漂亮的 HTML 图形化测试报告

霍格沃兹测试开发学社

业务场景抽离,助力测试提效

转转技术团队

技术分享 | 黑盒测试方法论-判定表

霍格沃兹测试开发学社

Chrome操作指南——入门篇(二)

Augus

Chrome开发者工具 9月月更

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