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

李林 编译自 Google Research Blog

谷歌今天推出了一个新的开源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

责任编辑:

python自动源码_谷歌推出Tangent开源库,在Python源代码上做自动微分相关推荐

  1. python 抠图源码_比PS还好用!Python 20行代码批量抠图

    你是否曾经想将某张照片中的人物抠出来,然后拼接到其他图片上去,从而可以即使你在天涯海角,我也可以到此一游? 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道 ...

  2. python 抠图源码_别再自己抠图了,Python用5行代码实现批量抠图

    前言 对于会PhotoShop的人来说,抠图是非常简单的操作了,有时候几秒钟就能扣好一张图.不过一些比较复杂的图,有时候还是要画点时间的,今天就给大家带了一个非常快速简单的办法,用Python来批量抠 ...

  3. python支付程序源码_支付宝推出新活动,Python脚本能让你赚的更多!(附源码)...

    写在前面 近期,马云大哥又在支付宝推出新活动了,不对,马云已经辞职了.不好意思哈,小编忘了. 但是呢,这个活动可是实实在在存在的哦~ 据说,只要你的手速够快,就能够赚去更多的余额宝体验金哦~ 下面,小 ...

  4. python 网站 源码_在线浏览美图源码,附带python源码

    源码介绍 本源码由@香谢枫林 开发,首页图片做了浏览器窗口自适应,最大化占满PC浏览器和移动浏览器的窗口,并且防止出现滚动条. 源码截图 美图源码1 美图源码2 功能介绍 首页图片设置了4个点击功能区 ...

  5. qq纵横四海源码_【0基础】纵横中文网python爬虫实战

    原文在此~ [0基础]纵横中文网python爬虫实战​mp.weixin.qq.com 大家好,我是你们的机房老哥! 在粉丝群的日常交流中,爬虫是比较常见的话题.python最强大的功能之一也是爬虫. ...

  6. python编译器源码_编译python源码

    广告关闭 回望2020,你在技术之路上,有什么收获和成长么?对于未来,你有什么期待么?云+社区年度征文,各种定制好礼等你! 尝试通过源码自己编译 python,使用的系统是 ubuntu14.04 l ...

  7. python商城源码_腾讯大佬用了12小时讲完的Python,整整400集,拿走不谢

    Python在近几年越来越受追捧,很多童鞋或者职场小伙伴想要提升技能-学习Python. 这是非常好的事情,但问题在于很多人不知道学Python做什么,所以什么零碎细末.艰难晦 涩.长篇大论的都去看, ...

  8. python商城源码_自学Python才几天,就成功编写出俄罗斯方块游戏,附自学教程

    人们常说,python不适合做游戏,但我偏爱玩游戏,做不了大的,做个小的也行啊. 于是,我在自己毫无基础的条件下,用两天时间学python基础理论,再用已有的俄罗斯方块游戏源码和源文件,在我的不懈努力 ...

  9. python商城源码_腾讯大佬用了10小时讲完的Python,整整400集,拿走不谢

    Python在这几年里面越来越受人欢迎,很多的入门小白和职场小伙伴都想要提升自己的学习技能来学习Python~这是一件非常好的事情,但是有很多人不知道应该如何学习Python,学习Python需要做些 ...

最新文章

  1. 写一篇C语言入门第一讲
  2. Mozilla公布WebVR API标准草案
  3. 去某大厂三面总监面,因为迟到了5分钟,面试官当着我的面把简历扔垃圾桶了
  4. 'chcp' 不是内部或外部命令,也不是可运行的程序
  5. Win7系统电脑休眠后无法唤醒的解决方法
  6. python中等于列表的某一个值为真,python – 获取值等于特定值的列表中的所有元素...
  7. Java关键字final、static
  8. 20201016:力扣第210周周赛题解(下)
  9. linux应用对I2C设备驱动4种读写方法
  10. TransformerEncoder
  11. 匹配中文字符的正则表达式
  12. 计算机中组策略编辑,组策略编辑器用法-如何使用组策略
  13. scala reduce和Fold
  14. ICPCCamp 2016 Day 6 - Spb SU and Spb AU Contest(Colored path-dp)
  15. 什么是微内核,看这一篇就够了
  16. 生活中的统计概率思维
  17. 悬赏任务h5系统源码接单发单平台支持游戏试玩签到
  18. 银河麒麟操作系统离线安装nginx
  19. java + selenium做自动化测试
  20. 一分钟了解“#include iomanip”

热门文章

  1. 108. 奇数码问题【思维 / 逆序对】
  2. 牛客小白月赛37【部分题解】
  3. java直接调用复制文件,java中文件复制的4种方式,java文件的复制
  4. kepware rest服务器_工业过程数据OPC通讯服务器 kepware kepserver ex 4.5含授权
  5. 最高75K,至多可拿16薪,这个岗位成财富密码?
  6. Android中的Service组件详解
  7. 【深入Java虚拟机JVM 06】垃圾收集概述
  8. php分开每个字,PHP,分解每个句子之间有特殊字符的文本文件
  9. SymmetricDS 完全配置安装手册
  10. MapReduce进阶:多路径输入输出