前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >谷歌推出Tangent开源库,在Python源代码上做自动微分

谷歌推出Tangent开源库,在Python源代码上做自动微分

作者头像
量子位
发布2018-03-23 15:50:36
9460
发布2018-03-23 15:50:36
举报
文章被收录于专栏:量子位量子位
李林 编译自 Google Research Blog 量子位 出品 | 公众号 QbitAI

谷歌今天推出了一个新的开源Python自动微分库:Tangent。

和现有的机器学习库不同,Tangent是一个源代码到源代码的系统,使用Python函数f,并用一个新的Python函数来计算f的梯度。这能帮用户更好地看清梯度计算,并更简单地对梯度进行用户级编辑和调试。

此外,Tangent还有更多调试和设计机器学习模型的功能:

  • 轻松调试反向传递过程(backward pass)
  • 快速的gradient surgery
  • 正向模式自动微分
  • 高校的Hessian向量积
  • 代码优化

本文简要介绍了Tangent API,包括如何用它在Python中生成易于理解、调试和修改的梯度代码。

神经网络为机器学习带来了巨大的进步,而我们训练神经网络来完成各类任务的基本思想已经存在30年了,它就是反向模式自动微分(reverse-mode automatic differentiation),也就是我们常说的反向传播(backpropagation)。反向传播的过程包含两次通过神经网络:首先是运行“正向传递”来计算每个节点的输出值,然后再运行“反向传递”计算一系列导数,来确定如何更新权重以提高模型准确性。

训练神经网络、研究新架构,就需要我们正确、高效、方便地计算这些导数。当模型训练不好时,或者尝试构建我们不了解的新东西时,也需要能调试这些导数。自动微分(简称autodiff)就能够计算里表示某些数学函数的计算机程序的导数,而且几乎所有机器学习库都能实现它。

现有的机器学习库通过跟踪程序的执行(在运行时,比如TensorFlow Eager、PyTorch、Autograd),或者构建动态数据流图然后微分它(提前,比如TensorFlow)来实现自动微分。

Tangent采用了与它们都不同的方式,在Python源代码上提前执行自动微分,并生成Python源代码作为输出。

于是,你可以像读取程序其他部分一样,来读取自动导数代码。

对于那些不仅想用Python来写模型,还想在不牺牲速度和灵活性的情况下来读取、调试自动生成的导数代码的研究人员和学生来说,Tangent非常有用。

检查和调试Tangent模型不需要特殊的工具,Tangent可以在Python庞大又不断增长的子集上工作,为其他Python机器学习库提供它们所没有的自动微分特性。它性能高,且与TensorFlow、NumPy兼容。

怎样自动为Python代码生成导数呢?

像tf.exp或tf.log这样的数学函数具有导数,我们可以编写出来构建反向传递,子例程、条件、循环等语法片段也同样具有反向传递版本。Tangent能为任何Python语法、以及很多Numpy和TensorFlow函数调用生成导数代码。

Tangent有一个单一功能API:

下面的动图展示了当我们在Python函数上调用tangent.grad时会发生什么:

如果你想列出自己的导数,可以运行:

对于Python语法的导数和TensorFlow Eager函数,Tangent有一个巨大的recipe库。tangent.grad会抓取你传递给它的Python函数源代码,然后反向遍历它,从自己的库中查找匹配的反向传递recipe,并把它加到导数函数的末尾。

这项技术的名字——反向模式自动微分——就来源于这种逆向处理。

上面的函数df只适用于张量(非数组)输入。Tangent也支持:

  • 用TensorFlow Eager函数来处理数组
  • 子例程
  • 控制流

谷歌在博客文章中强调,虽然Tangent从支持TensorFlow Eager开始,但它并不和某一个库绑定,他们也愿意接受添加PyTorch或者MXNet导数recipe的请求。

最后,附上Tangent开源项目地址,内有下载和安装说明: http://github.com/google/tangent

博客原文: https://research.googleblog.com/2017/11/tangent-source-to-source-debuggable.html
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量子位 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 李林 编译自 Google Research Blog 量子位 出品 | 公众号 QbitAI
    • 博客原文: https://research.googleblog.com/2017/11/tangent-source-to-source-debuggable.html
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档