谷歌推出開源 Python 庫「Tangent」,支持前向模式自動微分

2021-01-11 雷鋒網

雷鋒網 AI科技評論消息,日前,Google Research Blog 推出開源 Python 庫「Tangent」。據介紹,這個庫與現有的機器學習庫相比,存在諸多優勢,可以大大改善了用戶的使用體驗。

雷鋒網 AI科技評論編譯整理如下:

Tangent 是一個全新的免費開源 Python 庫,可以用於自動微分。與其他現有的機器學習庫相比,Tangent屬於源到源(source-to-source)系統,可以用 Python f 函數調用新的 Python 函數,計算出 f 的梯度。對用戶來說,這大大改善了梯度計算的可見性,更易於編輯和調試。當調試和設計機器學習模型時,Tangent 增加了許多新功能:

易於調試反向傳遞(backward pass)

快速進行梯度surgery

前向模式自動微分

高效的Hessian-vector product

代碼優化

本文概述了Tangent API接口,包括如何使用Tangent 來生成易於解釋、調試和修改的Python梯度代碼。

在圖像、視頻、音頻和文本機器學習模型中,神經網絡(NNs)的出現帶來了巨大的進步。其實在這些任務中,訓練神經網絡的基本概念已經存在30年了,我們通常稱之為反向模式自動微分(reverse-mode automatic differentiation)或者反向傳播(backpropagation)。它包括在神經網絡中的兩次傳遞:首先運行「前向傳遞(forward pass)」來計算每個節點的輸出值,然後再運行「反向傳遞」來計算一系列的導數,從而確定如何更新權重,以提高模型的準確度。

在訓練神經網絡、研究新的架構的過程中,我們要能正確、高效、輕鬆地計算出導數值。此外,當模型還沒訓練好或者想要構建一些連自己都不太理解的新東西時,也要能夠調試這些導數。自動微分也稱為「autodiff」,是一種計算電腦程式導數(數學上的函數)的技術,幾乎所有的機器學習庫都會用到它。

現有的庫通過跟蹤程序的執行過程來實現自動微分(如 TF Eager, PyTorch 和 Autograd),或者通過構建動態數據流圖來進行微分(如 TensorFlow)。與此相反, Tangent 可以通過 Python 原始碼提前自動微分,還可以生成Python原始碼作為輸出。

因此,你最終能像讀取程序的剩餘部分一樣讀取自動微分代碼。對那些既想用 Python 編寫模型,又想在讀取和調試自動微分代碼時不犧牲速度和靈活性的研究人員和學生來說,Tangent 非常有用。

在Tangent 中構建模型不需要特殊的工具或間接方法,非常易於檢查和調試。Tangent 基於一個非常大並且正在增長的 Python 子集,能支持其他 Python 深度學習庫所不具備的自動微分特性,性能高效,並能與 TensorFlow 和 NumPy 兼容。

Python代碼自動微分

如何自動生成Python代碼的導數? 像 tf.exp 和 tf.log 這些數學函數已經含有能幫助我們建立反向傳遞的導數了,同樣,子程序、條件和循環等句段也具有反向傳遞版本。Tangent 支持為每個 Python 句法生成導數代碼,也能調用許多 NumPy 和 TensorFlow 函數。

Tangent 具備單一功能 API:

下面是一張動圖,它描述了調用 tangent.grad 之後執行的操作。

可以運行如下代碼輸出求導結果:

執行命令後,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。如果大家發現了 bug 並在 GitHub 上說明,我們會儘快解決。

我們正從 Python 的多個層面為 Tangent 提供支持(例如閉包、內聯函數定義、類、更多的 NumPy 和 TensorFlow 函數)。我們還希望在未來添加更高級的自動微分和編譯器功能,比如在內存和計算之間自動平衡(Griewank and Walther 2000;Gruslys et al., 2016)、更高效的優化、lambda lifting等。

我們希望能將Tangent社群發展壯大,歡迎大家踴躍提出修補和新特性的方面的需求。

via:Google Research Blog

雷鋒網 AI科技評論編譯整理。

相關焦點

  • 2020年六大機器學習Python庫!
    外頭有許多類型的python庫可用,本文介紹了一些流行的機器學習庫。1. NumPy:NumPy是一種通用的數組處理軟體包。它提供高性能的多維數組對象和用於處理這些數組的工具。它是用於科學計算的基本Python軟體包。
  • 華為深度學習框架MindSpore正式開源:自動微分不止計算圖
    原生支持 AI 晶片,全場景一致的開發體驗——除了這些我們早已知曉的強大之處外,今天華為還著重展示了 MindSpore 的三大創新能力:新編程範式,執行模式和協作方式。今天發布的 MindSpore 首個開源版本為 0.1.0-alpha 版,主要由自動微分、自動並行、數據處理等功能構成。
  • 計算機圖形也能自動可微:MIT學神的微分太極框架開源
    機器之心機器之心報導參與:一鳴、杜偉去年5月,機器之心報導了 MIT 華人學神胡淵鳴等開源的計算機圖形庫——太極。近日,這位作者聯合其他研究者推出了自動微分版本的太極——微分太極。
  • 良心整理15個超級Python庫,不要錯過!
    支持自動微分來構建和訓練大型的神經網絡。 3. fastai 用過的都說好,通過利用當下最佳的技術實踐,fastai極快地簡化了訓練過程也加速了神經網絡。只要一個API就包含了幾乎所有常見的深度學習應用。 4.
  • 計算機圖形自動可微:MIT學神微分太極框架開源,論文被ICLR接收
    機器之心報導參與:一鳴、杜偉去年5月,機器之心報導了 MIT 華人學神胡淵鳴等開源的計算機圖形庫——太極。近日,這位作者聯合其他研究者推出了自動微分版本的太極——微分太極。這一框架可以基於太極實現自動微分,在物理模擬優化方面有很高的性能和靈活性。這意味著太極從計算機圖形學進入了機器學習的領域。目前,一作胡淵鳴已在 GitHub 上開源了基於這一框架完成的 10個 物理模擬器,項目登上了 GitHub 熱榜。而微分太極論文也已被 ICLR2020 接收。
  • Python學習資源 | 3個高性能開源計算機視覺庫
    0.OpenCV:OpenCV是在BSD許可下發布的,是開源計算機視覺庫,對學術和商業都是免費的。具有C+、Python和Java接口,支持Windows、Linux、MacOS、IOS和Android。OpenCV是為了提高計算效率而設計的,並且非常注重實時應用程式。
  • Kornia開源可微分計算機視覺庫,基於Pytorch
    Kornia 是一個基於 PyTorch 的可微分的計算機視覺庫,實現了可微的基礎計算機視覺算子和可微的數據增廣。該項目在 Github 上已經收穫了 3k 星。無論在深度學習還是傳統的視覺處理方案中,最常用圖像處理庫就是
  • 谷歌開源 Python Fire;一張圖讀懂 Python、R 的大數據應用等 | AI...
    Python Fire 已開源,用戶可通過`pip install fire`在 PyPI 進行下載,也可以去 GitHub 查看它的原始碼。對於該工具包將為開發者帶來的便利,谷歌表示:「Python Fire 能自動把你的代碼轉為 CLI,不需要任何額外操作——你不需要定義 arguments,不需要設定幫助信息,也不需要編寫定義代碼如何運行的主函數。
  • 可微分的「OpenCV」:這是基於PyTorch的可微計算機視覺庫
    機器之心整理參與:思如何打造一個可微分的 OpenCV?如何將圖像處理嵌入到訓練流程中?你需要 Kornia 這個開源可微的計算機視覺庫。在這個項目中,開發者提出了一種新型開源可微分計算機視覺庫 Kornia,並且它建立在 PyTorch 之上。Kornia 包含了一組例程和可微分模塊,並致力於解決通用計算機視覺問題。在 Kornia 的核心代碼中,它使用 PyTorch 作為主要後端,並高效地利用反向模式自動微分機制來定義並計算複雜函數的梯度。
  • 谷歌開源機器學習庫 JAX
    這其實是TensorFlow的一個簡化庫,名為JAX,可以支持部分TensorFlow的功能,但是比TensorFlow更加簡潔易用。什麼?TensorFlow 有了替代品?什麼?竟然還是谷歌自己做出來的?
  • 全網最全的Python庫,老碼農精心整理的
    SciPy,開源的Python算法庫和數學工具包,SciPy包含的模塊有最優化、線性代數、積分、插值、特殊函數、快速傅立葉變換、信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算。其功能與軟體MATLAB、Scilab和GNU Octave類似。 Numpy和Scipy常常結合著使用,Python大多數機器學習庫都依賴於這兩個模塊。
  • Kornia開源可微分計算機視覺庫,基於Pytorch,GitHub 3000星
    Kornia 是一個基於 PyTorch 的可微分的計算機視覺庫,實現了可微的基礎計算機視覺算子和可微的數據增廣。該項目在 Github 上已經收穫了 3k 星。無論在深度學習還是傳統的視覺處理方案中,最常用圖像處理庫就是 OpenCV 和 PIL 了。
  • 2019年必知的10大頂級Python庫
    如果你目前正在使用 python 進行機器學習項目,那麼你可能聽說過這一個流行的開源庫,那就是 TensorFlow。這個庫是由 Google 與 Brain Team 合作開發的,幾乎每一個 Google 的機器學習應用程式都用到了 TensorFlow。
  • python中如何實現自動導入缺失的庫?
    這是在項目發布前,使用命令pip freeze > requirements.txt 生成的。三、自動導入任意缺失的庫有沒有一種更好的可以自動導入缺失的庫的方法呢?在不修改原有的代碼的情況下,在不需要「requirements.txt」文件的情況下,有沒有辦法自動導入所需要的庫呢?當然有!
  • 全網最全的Python庫,想學的都在這裡,快來
    SciPy,開源的Python算法庫和數學工具包,SciPy包含的模塊有最優化、線性代數、積分、插值、特殊函數、快速傅立葉變換、信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算。其功能與軟體MATLAB、Scilab和GNU Octave類似。 Numpy和Scipy常常結合著使用,Python大多數機器學習庫都依賴於這兩個模塊。
  • 全網最全的Python庫,想學的都在這裡,不要錯過
    SciPy,開源的Python算法庫和數學工具包,SciPy包含的模塊有最優化、線性代數、積分、插值、特殊函數、快速傅立葉變換、信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算。其功能與軟體MATLAB、Scilab和GNU Octave類似。 Numpy和Scipy常常結合著使用,Python大多數機器學習庫都依賴於這兩個模塊。
  • 谷歌公布 GitHub 最新開源庫 androidx:開發 AOSP Jetpack
    IT之家7月29日消息 谷歌開發者宣布,正式推出 GitHub 上最新的一個開源庫 (和開源組織) —— androidx!這是 Android Jetpack 各種組件庫的源碼和開發環境,與 AOSP 的主分支代碼同步。
  • 2019 必知的 10 大頂級 python 庫
    如果你目前正在使用 python 進行機器學習項目,那麼你可能聽說過這一個流行的開源庫,那就是 TensorFlow。這個庫是由 Google 與 Brain Team 合作開發的,幾乎每一個 Google 的機器學習應用程式都用到了 TensorFlow。TensorFlow 就像一個計算庫,用於編寫涉及大量 tensor 操作的新算法。
  • Python常用庫大全
    pyechonest – Echo Nest API 的 Python 客戶端 talkbox – 一個用來處理演講/信號的 Python 庫 TimeSide – 開源 web 音頻處理框架。 tinytag – 一個用來讀取MP3, OGG, FLAC 以及 Wave 文件音樂元數據的庫。 mingus – 一個高級音樂理論和曲譜包,支持 MIDI 文件和回放功能。
  • 金融科技領域最受歡迎的八個Python庫
    以下是一些對金融科技行業有幫助的頂級開源Python庫:PyAlgoTradePyAlgoTrade是一個事件驅動的算法交易Python庫,支持Bitstamp回溯測試、實時紙張交易和實時交易。PyAlgoTrade使用Python 2.7 / 3.7開發和測試,與NumPy和SciPy、pytz、用於繪製的matplotlib、用於支持Bitstamp的tornado和用於支持Twitter的tweepy相互依存。Pyfolio主要涉及金融投資相關的組合風險分析和績效。該庫由Quantopian開發和維護,在2015年實現開源。與Zipline開源回測庫兼容性很好。