Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >业界 | 谷歌开源「Tangent」:一个用于自动微分的源到源Python库(附API概述)

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

作者头像
机器之心
发布于 2018-05-10 03:23:49
发布于 2018-05-10 03:23:49
9810
举报
文章被收录于专栏:机器之心机器之心

选自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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器之心 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
开发 | 谷歌推出开源 Python 库“Tangent”,支持前向模式自动微分
AI科技评论消息:日前,Google Research Blog 推出开源 Python库“Tangent”。据介绍,这个库与现有的机器学习库相比,存在诸多优势,可以大大改善了用户的使用体验。 AI科技评论编译整理如下: Tangent 是一个全新的免费开源 Python 库,可以用于自动微分。与其他现有的机器学习库相比,Tangent属于源到源(source-to-source)系统,可以用 Python f 函数调用新的 Python 函数,计算出 f 的梯度。对用户来说,这大大改善了梯度计算的可见性,
AI科技评论
2018/03/14
8630
开发 | 谷歌推出开源 Python 库“Tangent”,支持前向模式自动微分
谷歌推出Tangent开源库,在Python源代码上做自动微分
李林 编译自 Google Research Blog 量子位 出品 | 公众号 QbitAI 谷歌今天推出了一个新的开源Python自动微分库:Tangent。 和现有的机器学习库不同,Tangen
量子位
2018/03/23
9940
【AI系统】计算图与自动微分
自动求导应用链式法则求某节点对其他节点的雅可比矩阵,它从结果节点开始,沿着计算路径向前追溯,逐节点计算雅可比。将神经网络和损失函数连接成一个计算图,则它的输入、输出和参数都是节点,可利用自动求导求损失值对网络参数的雅可比,从而得到梯度。
用户11307734
2024/12/06
1390
深度学习利器之自动微分(2)
本文和上文以 Automatic Differentiation in Machine Learning: a Survey为基础,逐步分析自动微分这个机器学习的基础利器。
罗西的思考
2021/10/18
1.8K0
深度学习利器之自动微分(2)
自动微分技术
几乎所有机器学习算法在训练或预测时都归结为求解最优化问题,如果目标函数可导,在问题变为训练函数的驻点。通常情况下无法得到驻点的解析解,因此只能采用数值优化算法,如梯度下降法,牛顿法,拟牛顿法。这些数值优化算法都依赖于函数的一阶导数值或二阶导数值,包括梯度与Hessian矩阵。因此需要解决如何求一个复杂函数的导数问题,本文讲述的自动微分技术是解决此问题的一种通用方法。关于梯度、Hessian矩阵、雅克比矩阵,以及梯度下降法,牛顿法,拟牛顿法,各种反向传播算法的详细讲述可以阅读《机器学习与应用》,清华大学出版社,雷明著一书,或者SIGAI之前的公众号文章。对于这些内容,我们有非常清晰的讲述和推导。
SIGAI学习与实践平台
2019/07/01
1.3K0
PyTorch称霸学界,TensorFlow固守业界,ML框架之争将走向何方?
自 2012 年深度学习再度成为焦点以来,很多机器学习框架成为研究者和业界工作者的新宠。从早期的学术框架 Caffe、Theano 到如今有业界背景的大规模框架 Pytorch 和 TensorFlow,层出不穷的新成果使得跟踪当前最流行的框架变得越发困难。
机器之心
2019/10/15
6620
PyTorch称霸学界,TensorFlow固守业界,ML框架之争将走向何方?
Github1.3万星,迅猛发展的JAX对比TensorFlow、PyTorch
机器之心报道 机器之心编辑部 JAX 是机器学习 (ML) 领域的新生力量,它有望使 ML 编程更加直观、结构化和简洁。 在机器学习领域,大家可能对 TensorFlow 和 PyTorch 已经耳熟能详,但除了这两个框架,一些新生力量也不容小觑,它就是谷歌推出的 JAX。很对研究者对其寄予厚望,希望它可以取代 TensorFlow 等众多机器学习框架。 JAX 最初由谷歌大脑团队的 Matt Johnson、Roy Frostig、Dougal Maclaurin 和 Chris Leary 等人发起。
机器之心
2023/03/29
2.5K0
Github1.3万星,迅猛发展的JAX对比TensorFlow、PyTorch
【深度学习基础】预备知识 | 自动微分
深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉、自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/PyTorch_deep_learning。
Francek Chen
2025/01/22
820
【深度学习基础】预备知识 | 自动微分
深度学习利器之自动微分(1)
本文和下文以 Automatic Differentiation in Machine Learning: a Survey 这篇论文为基础,逐步分析自动微分这个机器学习的基础利器。
罗西的思考
2021/10/18
1.4K1
深度学习利器之自动微分(1)
Tensorflow学习——Eager Execution
TensorFlow 的 Eager Execution 是一种命令式编程环境,可立即评估操作,无需构建图:操作会返回具体的值,而不是构建以后再运行的计算图。这样能让您轻松地开始使用 TensorFlow 和调试模型,并且还减少了样板代码。要遵循本指南,请在交互式 python 解释器中运行下面的代码示例。
狼啸风云
2019/06/13
3K0
PyTorch攻势凶猛,程序员正在抛弃TensorFlow?
来源 | The Gradient 译者 | 夕颜 出品 | AI科技大本营(ID:rgznai100)
AI科技大本营
2019/11/13
6070
新星JAX :双挑TensorFlow和PyTorch!有望担纲Google主要科学计算库和神经网络库
JAX是机器学习框架领域的新生力量,尽管这个Tensorflow的竞争对手从2018年末开就已经出现,但直到最近,JAX才开始在更广泛的机器学习研究领域中获得关注。
新智元
2020/03/03
1.5K0
新星JAX :双挑TensorFlow和PyTorch!有望担纲Google主要科学计算库和神经网络库
PyTorch专栏(四):小试牛刀
【磐创AI 导读】:本篇文章讲解了PyTorch专栏的第三章中的PyTorch小试牛刀。查看专栏历史文章,请点击下方蓝色字体进入相应链接阅读。查看关于本专栏的介绍:PyTorch专栏开篇。想要更多电子杂志的机器学习,深度学习资源,大家欢迎点击上方蓝字关注我们的公众号:磐创AI。
磐创AI
2019/09/09
1.4K0
PyTorch专栏(四):小试牛刀
反向传播和其他微分算法
当我们使用前馈神经网络接收输入 ,并产生输出 时,信息通过网络前向流动。输入x并提供初始信息,然后传播到每一层的隐藏单元,最终产生输出 。这称之为前向传播。在训练过程中,前向传播可以持续前向直到它产生一个标量代价函数 。反向传播算法,经常简称为backprop,允许来自代价函数的信息通过网络向后流动,以便计算梯度。
狼啸风云
2019/08/18
1.9K0
打破「反向传播」垄断,「正向自动微分」也能计算梯度,且训练时间减少一半
用反向传播(backpropagation)来计算优化目标函数的梯度,是当前机器学习领域的主流方法。近日,牛津与微软等机构的多位学者联合提出一种名为「正向梯度」(forward gradient)的自动微分模式,可以完全抛弃反向传播进行梯度计算。实验证明,在一些问题中,正向梯度的计算时间是反向传播的二分之一。 编译 | 张倩 编辑 | 陈彩娴 反向传播和基于梯度的优化是近年来机器学习(ML)取得重大突破的核心技术。 人们普遍认为,机器学习之所以能够快速发展,是因为研究者们使用了第三方框架(如PyTorch、
AI科技评论
2022/03/17
7560
自动微分到底是什么?这里有一份自我简述
自动微分现在已经是深度学习框架的标配,我们写的任何模型都需要靠自动微分机制分配模型损失信息,从而更新模型。在广阔的科学世界中,自动微分也是必不可少的。说到底,大多数算法都是由基本数学运算与基本函数组建的。
机器之心
2020/06/05
1.1K0
机器学习之函数式自动微分
神经网络的训练主要使用反向传播算法,通过损失函数计算模型预测值与正确标签的差异,并进行反向传播计算梯度,最终更新模型参数。自动微分能够计算可导函数在某点处的导数值,是反向传播算法的一般化,主要解决了复杂数学运算的求导细节和过程,降低了框架的使用门槛。MindSpore使用函数式自动微分的设计理念,提供更接近于数学语义的自动微分接口 grad 和 value_and_grad。
查拉图斯特拉说
2024/06/26
1360
机器学习之函数式自动微分
终于!TensorFlow引入了动态图机制Eager Execution
选自Google Brain 作者:Asim Shankar & Wolff Dobson 机器之心编译 PyTorch 的动态图一直是 TensorFlow 用户求之不得的功能,谷歌也一直试图在 TensorFlow 中实现类似的功能。最近,Google Brain 团队发布了 Eager Execution,一个由运行定义的新接口,让 TensorFlow 开发变得简单许多。在工具推出后,谷歌开发人员 Yaroslav Bulatov 对它的性能与 PyTorch 做了横向对比。 今天,我们为 Tens
机器之心
2018/05/10
1.9K0
2019必学的10大顶级Python库!
作为数据科学和机器学习相关的研究和开发人员,大家每天都要用到 python。在本文中,我们将讨论一些 python 中的顶级库,开发人员可以使用这些库在现有的应用程序中应用、清洗和表示数据,并进行机器学习研究。
Python数据科学
2019/11/12
7020
2019必学的10大顶级Python库!
Python 深度学习第二版(GPT 重译)(一)
如果你拿起这本书,你可能已经意识到深度学习在最近对人工智能领域所代表的非凡进步。我们从几乎无法使用的计算机视觉和自然语言处理发展到了在你每天使用的产品中大规模部署的高性能系统。这一突然进步的后果几乎影响到了每一个行业。我们已经将深度学习应用于几乎每个领域的重要问题,跨越了医学影像、农业、自动驾驶、教育、灾害预防和制造等不同领域。
ApacheCN_飞龙
2024/03/21
4580
Python 深度学习第二版(GPT 重译)(一)
推荐阅读
相关推荐
开发 | 谷歌推出开源 Python 库“Tangent”,支持前向模式自动微分
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档