python自动源码_谷歌推出Tangent开源库,在Python源代码上做自动微分
原標題:谷歌推出Tangent開源庫,在Python源代碼上做自動微分
李林 編譯自 Google Research Blog
谷歌今天推出了一個新的開源Python自動微分庫:Tangent。
和現(xiàn)有的機器學習庫不同,Tangent是一個源代碼到源代碼的系統(tǒng),使用Python函數(shù)f,并用一個新的Python函數(shù)來計算f的梯度。這能幫用戶更好地看清梯度計算,并更簡單地對梯度進行用戶級編輯和調試。
此外,Tangent還有更多調試和設計機器學習模型的功能:
輕松調試反向傳遞過程(backward pass)
快速的gradient surgery
正向模式自動微分
高校的Hessian向量積
代碼優(yōu)化
本文簡要介紹了Tangent API,包括如何用它在Python中生成易于理解、調試和修改的梯度代碼。
神經(jīng)網(wǎng)絡為機器學習帶來了巨大的進步,而我們訓練神經(jīng)網(wǎng)絡來完成各類任務的基本思想已經(jīng)存在30年了,它就是反向模式自動微分(reverse-mode automatic differentiation),也就是我們常說的反向傳播(backpropagation)。反向傳播的過程包含兩次通過神經(jīng)網(wǎng)絡:首先是運行“正向傳遞”來計算每個節(jié)點的輸出值,然后再運行“反向傳遞”計算一系列導數(shù),來確定如何更新權重以提高模型準確性。
訓練神經(jīng)網(wǎng)絡、研究新架構,就需要我們正確、高效、方便地計算這些導數(shù)。當模型訓練不好時,或者嘗試構建我們不了解的新東西時,也需要能調試這些導數(shù)。自動微分(簡稱autodiff)就能夠計算里表示某些數(shù)學函數(shù)的計算機程序的導數(shù),而且?guī)缀跛袡C器學習庫都能實現(xiàn)它。
現(xiàn)有的機器學習庫通過跟蹤程序的執(zhí)行(在運行時,比如TensorFlow Eager、PyTorch、Autograd),或者構建動態(tài)數(shù)據(jù)流圖然后微分它(提前,比如TensorFlow)來實現(xiàn)自動微分。
Tangent采用了與它們都不同的方式,在Python源代碼上提前執(zhí)行自動微分,并生成Python源代碼作為輸出。
于是,你可以像讀取程序其他部分一樣,來讀取自動導數(shù)代碼。
對于那些不僅想用Python來寫模型,還想在不犧牲速度和靈活性的情況下來讀取、調試自動生成的導數(shù)代碼的研究人員和學生來說,Tangent非常有用。
檢查和調試Tangent模型不需要特殊的工具,Tangent可以在Python龐大又不斷增長的子集上工作,為其他Python機器學習庫提供它們所沒有的自動微分特性。它性能高,且與TensorFlow、NumPy兼容。
怎樣自動為Python代碼生成導數(shù)呢?
像tf.exp或tf.log這樣的數(shù)學函數(shù)具有導數(shù),我們可以編寫出來構建反向傳遞,子例程、條件、循環(huán)等語法片段也同樣具有反向傳遞版本。Tangent能為任何Python語法、以及很多Numpy和TensorFlow函數(shù)調用生成導數(shù)代碼。
Tangent有一個單一功能API:
下面的動圖展示了當我們在Python函數(shù)上調用tangent.grad時會發(fā)生什么:
如果你想列出自己的導數(shù),可以運行:
對于Python語法的導數(shù)和TensorFlow Eager函數(shù),Tangent有一個巨大的recipe庫。tangent.grad會抓取你傳遞給它的Python函數(shù)源代碼,然后反向遍歷它,從自己的庫中查找匹配的反向傳遞recipe,并把它加到導數(shù)函數(shù)的末尾。
這項技術的名字——反向模式自動微分——就來源于這種逆向處理。
上面的函數(shù)df只適用于張量(非數(shù)組)輸入。Tangent也支持:
用TensorFlow Eager函數(shù)來處理數(shù)組
子例程
控制流
谷歌在博客文章中強調,雖然Tangent從支持TensorFlow Eager開始,但它并不和某一個庫綁定,他們也愿意接受添加PyTorch或者MXNet導數(shù)recipe的請求。
最后,附上Tangent開源項目地址,內有下載和安裝說明:
http://github.com/google/tangent
博客原文:
https://research.googleblog.com/2017/11/tangent-source-to-source-debuggable.html
責任編輯:
《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的python自动源码_谷歌推出Tangent开源库,在Python源代码上做自动微分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pcb 理论阻值、 过孔_超实用!PCB
- 下一篇: 实际开发什么场景用到线程池_线程池的具体