谷歌推出新的開源Python自動微分庫
小數(shù)點 | 2017-11-10 10:30
【數(shù)據(jù)猿導讀】 11月09日谷歌推出了一個新的開源Python自動微分庫:Tangent。和現(xiàn)有的機器學習庫不同,Tangent是一個源代碼到源代碼的系統(tǒng),使用Python函數(shù)f,并用一個新的Python函數(shù)來計算f的梯度

11月09日谷歌推出了一個新的開源Python自動微分庫:Tangent。
和現(xiàn)有的機器學習庫不同,Tangent是一個源代碼到源代碼的系統(tǒng),使用Python函數(shù)f,并用一個新的Python函數(shù)來計算f的梯度。這能幫用戶更好地看清梯度計算,并更簡單地對梯度進行用戶級編輯和調(diào)試。
此外,Tangent還有更多調(diào)試和設計機器學習模型的功能:
輕松調(diào)試反向傳遞過程(backward pass)
快速的gradient surgery
正向模式自動微分
高校的Hessian向量積
代碼優(yōu)化
本文簡要介紹了Tangent API,包括如何用它在Python中生成易于理解、調(diào)試和修改的梯度代碼。
神經(jīng)網(wǎng)絡為機器學習帶來了巨大的進步,而我們訓練神經(jīng)網(wǎng)絡來完成各類任務的基本思想已經(jīng)存在30年了,它就是反向模式自動微分(reverse-mode automatic differentiation),也就是我們常說的反向傳播(backpropagation)。反向傳播的過程包含兩次通過神經(jīng)網(wǎng)絡:首先是運行“正向傳遞”來計算每個節(jié)點的輸出值,然后再運行“反向傳遞”計算一系列導數(shù),來確定如何更新權(quán)重以提高模型準確性。
訓練神經(jīng)網(wǎng)絡、研究新架構(gòu),就需要我們正確、高效、方便地計算這些導數(shù)。當模型訓練不好時,或者嘗試構(gòu)建我們不了解的新東西時,也需要能調(diào)試這些導數(shù)。自動微分(簡稱autodiff)就能夠計算里表示某些數(shù)學函數(shù)的計算機程序的導數(shù),而且?guī)缀跛袡C器學習庫都能實現(xiàn)它。
現(xiàn)有的機器學習庫通過跟蹤程序的執(zhí)行(在運行時,比如TensorFlow Eager、PyTorch、Autograd),或者構(gòu)建動態(tài)數(shù)據(jù)流圖然后微分它(提前,比如TensorFlow)來實現(xiàn)自動微分。
Tangent采用了與它們都不同的方式,在Python源代碼上提前執(zhí)行自動微分,并生成Python源代碼作為輸出。
于是,你可以像讀取程序其他部分一樣,來讀取自動導數(shù)代碼。
對于那些不僅想用Python來寫模型,還想在不犧牲速度和靈活性的情況下來讀取、調(diào)試自動生成的導數(shù)代碼的研究人員和學生來說,Tangent非常有用。
檢查和調(diào)試Tangent模型不需要特殊的工具,Tangent可以在Python龐大又不斷增長的子集上工作,為其他Python機器學習庫提供它們所沒有的自動微分特性。它性能高,且與TensorFlow、NumPy兼容。
怎樣自動為Python代碼生成導數(shù)呢?
像tf.exp或tf.log這樣的數(shù)學函數(shù)具有導數(shù),我們可以編寫出來構(gòu)建反向傳遞,子例程、條件、循環(huán)等語法片段也同樣具有反向傳遞版本。Tangent能為任何Python語法、以及很多Numpy和TensorFlow函數(shù)調(diào)用生成導數(shù)代碼。
Tangent有一個單一功能API:
下面的動圖展示了當我們在Python函數(shù)上調(diào)用tangent.grad時會發(fā)生什么:
如果你想列出自己的導數(shù),可以運行:
對于Python語法的導數(shù)和TensorFlow Eager函數(shù),Tangent有一個巨大的recipe庫。tangent.grad會抓取你傳遞給它的Python函數(shù)源代碼,然后反向遍歷它,從自己的庫中查找匹配的反向傳遞recipe,并把它加到導數(shù)函數(shù)的末尾。
這項技術(shù)的名字——反向模式自動微分——就來源于這種逆向處理。
上面的函數(shù)df只適用于張量(非數(shù)組)輸入。Tangent也支持:
用TensorFlow Eager函數(shù)來處理數(shù)組
子例程
控制流
谷歌在博客文章中強調(diào),雖然Tangent從支持TensorFlow Eager開始,但它并不和某一個庫綁定,他們也愿意接受添加PyTorch或者MXNet導數(shù)recipe的請求。
來源:36大數(shù)據(jù)
刷新相關(guān)文章
我要評論
活動推薦more >
- 2018 上海國際大數(shù)據(jù)產(chǎn)業(yè)高2018-12-03
- 2018上海國際計算機網(wǎng)絡及信2018-12-03
- 中國國際信息通信展覽會將于2018-09-26
- 第五屆FEA消費金融國際峰會62018-06-21
- 第五屆FEA消費金融國際峰會2018-06-21
- “無界區(qū)塊鏈技術(shù)峰會2018”2018-06-14
不容錯過的資訊
-
1【金猿案例展】中國銀聯(lián):以內(nèi)外聯(lián)動的數(shù)
-
2全棧云原生產(chǎn)品戰(zhàn)略升級,時速云領(lǐng)跑云原
-
3新趨勢·新未來 | 2019第六屆中國嬰幼
-
4【金猿產(chǎn)品展】中原銀行智能化BI:一站式
-
5【金猿產(chǎn)品展】易觀方舟:智能用戶數(shù)據(jù)中
-
6【金猿人物展】張涵誠: 2020年大數(shù)據(jù)產(chǎn)
-
7小飯桌2019全球青年創(chuàng)業(yè)者大會圓滿舉辦,
-
8繁華之下有隱憂,零售企業(yè)如何走出增長困
-
9【金猿產(chǎn)品展】羽扇決策引擎平臺:運籌帷
-
10【金猿案例展】國網(wǎng)上海市電力:智能配用