農林漁牧網

您現在的位置是:首頁 > 農業

谷歌推出開源 Python 庫“Tangent”,支援前向模式自動微分

2023-01-04由 雷峰網leiphone 發表于 農業

電腦上如何求導

雷鋒網 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”,支援前向模式自動微分

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

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

Python程式碼自動微分

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

Tangent 具備單一功能 API:

谷歌推出開源 Python 庫“Tangent”,支援前向模式自動微分

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

可以執行如下程式碼輸出求導結果:

谷歌推出開源 Python 庫“Tangent”,支援前向模式自動微分

執行命令後,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科技評論編譯整理。