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

简介:
本文来自AI新媒体量子位(QbitAI)

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

1fc603a49e434556fda9f1686ad6da495e153e56

和现有的机器学习库不同,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源代码作为输出。

a5409e4341afeb5ad5565c7aede3bdd9eb821e38

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

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

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

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

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

Tangent有一个单一功能API:

b89d450f0c5261ca0154ecb3d98d09dc3171ac0e

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

3390dacb6c5bea7234e81bf54940c9fa58ee4831

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

3693904ba672c41afeef89e68e4c7637580eaf5d

对于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
相关实践学习
使用PAI+LLaMA Factory微调Qwen2-VL模型,搭建文旅领域知识问答机器人
使用PAI和LLaMA Factory框架,基于全参方法微调 Qwen2-VL模型,使其能够进行文旅领域知识问答,同时通过人工测试验证了微调的效果。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
3月前
|
存储 人工智能 测试技术
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
本文介绍如何使用LangChain结合DeepSeek实现多轮对话,测开人员可借此自动生成测试用例,提升自动化测试效率。
520 125
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
|
3月前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
257 0
|
5月前
|
存储 Web App开发 前端开发
Python + Requests库爬取动态Ajax分页数据
Python + Requests库爬取动态Ajax分页数据
|
2月前
|
数据可视化 关系型数据库 MySQL
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
本文详解基于Python的电影TOP250数据可视化大屏开发全流程,涵盖爬虫、数据存储、分析及可视化。使用requests+BeautifulSoup爬取数据,pandas存入MySQL,pyecharts实现柱状图、饼图、词云图、散点图等多种图表,并通过Page组件拖拽布局组合成大屏,支持多种主题切换,附完整源码与视频讲解。
263 4
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
|
2月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
333 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
4月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
278 18
|
4月前
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
413 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
4月前
|
数据采集 存储 Web App开发
Python爬虫库性能与选型实战指南:从需求到落地的全链路解析
本文深入解析Python爬虫库的性能与选型策略,涵盖需求分析、技术评估与实战案例,助你构建高效稳定的数据采集系统。
408 0
|
4月前
|
存储 监控 安全
Python剪贴板监控实战:clipboard-monitor库的深度解析与扩展应用
本文介绍了基于Python的剪贴板监控技术,结合clipboard-monitor库实现高效、安全的数据追踪。内容涵盖技术选型、核心功能开发、性能优化及实战应用,适用于安全审计、自动化办公等场景,助力提升数据管理效率与安全性。
192 0

推荐镜像

更多