业界 | 谷歌开源「Tangent」:一个用于自动微分的源到源Python库(附API概述)

2017 年 11 月 7 日 机器之心

选自Google Research Blog

机器之心编译

参与:黄小天、刘晓坤


近日,谷歌在其官方博客上开源了「Tangent」,一个用于自动微分的源到源 Python 库;它通过 Python 函数 f 生成新函数,来计算 f 的梯度,从而实现更好的梯度计算可视化,帮助用户更容易地编辑和调试梯度;本文还扼要概述了 Tangent API,包括如何使用 Tangent 在 Python 中生成易于理解、调试和修改的梯度代码。


Tangent 是一个免费、开源的新 Python 库,用于自动微分。和目前已有的机器学习库不同,Tangent 是一个源到源(source-to-source)的系统,利用 Python 函数 f 生成一个新的 Python 函数,来计算 f 的梯度。这为用户提供了更好的梯度计算可视化,使用户可以容易地对梯度进行编辑和调试。Tangent 在调试和设计机器学习模型上有如下特征:

  • 易于调试反向传播过程

  • 快速编辑和调试梯度

  • 正向模式(Forward mode)自动微分

  • 高效的 Hessian 向量内积(Hessian-vector products)

  • 代码优化

本文对 Tangent API 进行了概述,包括如何使用 Tangent 在 Python 中生成易于理解、调试和修改的梯度代码。


神经网络(NN)使机器学习模型处理图像、视频、音频和文本的能力出现巨大进步。训练神经网络在这些任务上获得高性能的基本抽象概念是一个有着 30 年历史的思想——「反向模式自动微分」(也叫做反向传播),它由神经网络中的两个传播过程组成:首先运行「前向传播」计算每一个节点的输出,然后运行「反向传播」计算一系列导数以决定权重的更新率,从而提高模型的准确性。


训练神经网络和在新型架构上做研究需要准确、高效和简易地计算这些导数。当模型训练结果不好时,或者尝试建立一些尚未理解的东西时,调试这些导数的能力非常必要。自动微分,或简称为「autodiff」,是一种计算表征一些数学函数的计算机程序的导数的技术,并可以在几乎所有的机器学习库中实现。


目前已有的库通过追踪程序的执行(在运行时,比如 TF Eager、PyTorch 和 Autograd)或建立动态数据流图然后对图微分(预编,比如 TensorFlow),实现自动微分。与之相反,Tangent 能自主在 Python 源代码上进行预编的自动微分,并生成 Python 源代码作为其输出。


因此,你可以把自动微分代码当做程序的余下部分进行阅读。对于那些不仅想在 Python 编写模型,还希望在不牺牲速度和灵活性的前提下阅读和调试自动生成导数的代码的研究者和学生,Tangent 是很有用的。


用 Tangent 编写的模型易于检查和调试,而不需要特殊的工具或间接的方式。Tangent 能提供其它 Python 机器学习库没有的额外自动微分的特征,具有强大的性能,并和 TensorFlow 以及 Numpy 兼容。


Python 代码的自动微分


我们如何自动生成纯 Python 代码的导数?数学函数比如 tf.exp 或 tf.log 含有可以用来构建反向传播的导数。相似地,句法片段(比如子程序、条件和循环)也有反向传播版本。Tangent 有办法为每个 Python 句法片段生成生成导数代码,同时调用很多的 NumPy 和 TensorFlow 函数。


Tangent 有一个单一函数 API:




下面的动图展示了如何一个 Python 函数上调用 tangent.grad:

如果你想要打印出导数,你可以运行:




在 hood 之下,tangent.grad 首先抓取你传递给它的 Python 函数源代码。Tangent 有一个 Python 句法导数和 TensorFlow Eager 函数的大型方法库。tangent.grad 函数逆序运行你的代码,查找匹配的反向传播方法,并将其添加到导数函数的尾部。这一逆序处理技术被称之为反向模式自动微分(reverse-mode automatic differentiation)。


df 函数只适用于标量(非数组)输入。Tangent 同样支持

  • 使用 TensorFlow Eager 函数处理数字数组

  • 子程序

  • 控制流

尽管我们从 TensorFlow Eager 支持开始,Tangent 并没有受限于任何数字库,我们非常欢迎添加 PyTorch 或 MXNet 导数方法的请求。


下一步


Tangent 现在是开源的(github.com/google/tangent),但仍处于试验阶段,难免存在一些 bug,如果你能在 GitHub 上指出,我们将很快修复。


我们正致力于在 Tangent 支持 Python 语言的更多属性(比如闭包、内嵌函数定义、类、更多的 Numpy 和 TensorFlow 函数),同样计划在未来添加更多高级的自动微分和编译功能,比如内存与计算之间的自动博弈,更主动的优化以及λ升降。最后,我们非常期望能与社区一起开发 Tangent。


原文链接:https://research.googleblog.com/2017/11/tangent-source-to-source-debuggable.html


本文为机器之心编译,转载请联系本公众号获得授权

✄------------------------------------------------

加入机器之心(全职记者/实习生):hr@jiqizhixin.com

投稿或寻求报道:content@jiqizhixin.com

广告&商务合作:bd@jiqizhixin.com

登录查看更多
0

相关内容

在数学和计算机代数中,自动微分有时称作演算式微分,是一种可以借由计算机程序计算一个函数导数的方法。两种传统做微分的方法为:(1)对一个函数的表示式做符号上的微分,并且计算其在某一点上的值。(2)使用差分。使用符号微分最主要的缺点是速度慢及将计算机程序转换成表示式的困难。此外,很多函数在要计算更高阶微分时会变得复杂。 使用差分的两个重要的缺点是舍弃误差及数值化过程和相消误差。此两者传统方法在计算更高阶微分时,都有复杂度及误差增加的问题。自动微分则解决上述的问题。
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
266+阅读 · 2020年6月10日
最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
Python导论,476页pdf,现代Python计算
专知会员服务
260+阅读 · 2020年5月17日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
【新书】傻瓜式入门深度学习,371页pdf
专知会员服务
188+阅读 · 2019年12月28日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
163+阅读 · 2019年10月28日
100行Python代码,轻松搞定神经网络
大数据文摘
4+阅读 · 2019年5月2日
Tensorflow框架是如何支持分布式训练的?
AI100
9+阅读 · 2019年3月26日
要替代 TensorFlow?谷歌开源机器学习库 JAX
新智元
3+阅读 · 2018年12月14日
深度学习开发必备开源框架
九章算法
12+阅读 · 2018年5月30日
机器学习者必知的 5 种深度学习框架
深度学习世界
7+阅读 · 2018年5月3日
Tensorflow 文本分类-Python深度学习
Python程序员
12+阅读 · 2017年11月22日
终于!TensorFlow引入了动态图机制Eager Execution
机器之心
4+阅读 · 2017年11月1日
Arxiv
5+阅读 · 2020年3月16日
Meta-Learning with Implicit Gradients
Arxiv
13+阅读 · 2019年9月10日
Arxiv
6+阅读 · 2018年11月29日
Arxiv
23+阅读 · 2018年10月1日
VIP会员
相关VIP内容
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
266+阅读 · 2020年6月10日
最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
Python导论,476页pdf,现代Python计算
专知会员服务
260+阅读 · 2020年5月17日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
【新书】傻瓜式入门深度学习,371页pdf
专知会员服务
188+阅读 · 2019年12月28日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
163+阅读 · 2019年10月28日
相关资讯
100行Python代码,轻松搞定神经网络
大数据文摘
4+阅读 · 2019年5月2日
Tensorflow框架是如何支持分布式训练的?
AI100
9+阅读 · 2019年3月26日
要替代 TensorFlow?谷歌开源机器学习库 JAX
新智元
3+阅读 · 2018年12月14日
深度学习开发必备开源框架
九章算法
12+阅读 · 2018年5月30日
机器学习者必知的 5 种深度学习框架
深度学习世界
7+阅读 · 2018年5月3日
Tensorflow 文本分类-Python深度学习
Python程序员
12+阅读 · 2017年11月22日
终于!TensorFlow引入了动态图机制Eager Execution
机器之心
4+阅读 · 2017年11月1日
Top
微信扫码咨询专知VIP会员