自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

谷歌推出Tangent開源庫(kù),在Python源代碼上做自動(dòng)微分

開發(fā) 后端
谷歌今天推出了一個(gè)新的開源Python自動(dòng)微分庫(kù):Tangent。本文簡(jiǎn)要介紹了Tangent API,包括如何用它在Python中生成易于理解、調(diào)試和修改的梯度代碼。

[[209312]]

谷歌今天推出了一個(gè)新的開源Python自動(dòng)微分庫(kù):Tangent。

 

和現(xiàn)有的機(jī)器學(xué)習(xí)庫(kù)不同,Tangent是一個(gè)源代碼到源代碼的系統(tǒng),使用Python函數(shù)f,并用一個(gè)新的Python函數(shù)來計(jì)算f的梯度。這能幫用戶更好地看清梯度計(jì)算,并更簡(jiǎn)單地對(duì)梯度進(jìn)行用戶級(jí)編輯和調(diào)試。

此外,Tangent還有更多調(diào)試和設(shè)計(jì)機(jī)器學(xué)習(xí)模型的功能:

  • 輕松調(diào)試反向傳遞過程(backward pass)
  • 快速的gradient surgery
  • 正向模式自動(dòng)微分
  • 高校的Hessian向量積
  • 代碼優(yōu)化

本文簡(jiǎn)要介紹了Tangent API,包括如何用它在Python中生成易于理解、調(diào)試和修改的梯度代碼。

神經(jīng)網(wǎng)絡(luò)為機(jī)器學(xué)習(xí)帶來了巨大的進(jìn)步,而我們訓(xùn)練神經(jīng)網(wǎng)絡(luò)來完成各類任務(wù)的基本思想已經(jīng)存在30年了,它就是反向模式自動(dòng)微分(reverse-mode automatic differentiation),也就是我們常說的反向傳播(backpropagation)。反向傳播的過程包含兩次通過神經(jīng)網(wǎng)絡(luò):首先是運(yùn)行“正向傳遞”來計(jì)算每個(gè)節(jié)點(diǎn)的輸出值,然后再運(yùn)行“反向傳遞”計(jì)算一系列導(dǎo)數(shù),來確定如何更新權(quán)重以提高模型準(zhǔn)確性。

訓(xùn)練神經(jīng)網(wǎng)絡(luò)、研究新架構(gòu),就需要我們正確、高效、方便地計(jì)算這些導(dǎo)數(shù)。當(dāng)模型訓(xùn)練不好時(shí),或者嘗試構(gòu)建我們不了解的新東西時(shí),也需要能調(diào)試這些導(dǎo)數(shù)。自動(dòng)微分(簡(jiǎn)稱autodiff)就能夠計(jì)算里表示某些數(shù)學(xué)函數(shù)的計(jì)算機(jī)程序的導(dǎo)數(shù),而且?guī)缀跛袡C(jī)器學(xué)習(xí)庫(kù)都能實(shí)現(xiàn)它。

現(xiàn)有的機(jī)器學(xué)習(xí)庫(kù)通過跟蹤程序的執(zhí)行(在運(yùn)行時(shí),比如TensorFlow Eager、PyTorch、Autograd),或者構(gòu)建動(dòng)態(tài)數(shù)據(jù)流圖然后微分它(提前,比如TensorFlow)來實(shí)現(xiàn)自動(dòng)微分。

Tangent采用了與它們都不同的方式,在Python源代碼上提前執(zhí)行自動(dòng)微分,并生成Python源代碼作為輸出。

 

于是,你可以像讀取程序其他部分一樣,來讀取自動(dòng)導(dǎo)數(shù)代碼。

對(duì)于那些不僅想用Python來寫模型,還想在不犧牲速度和靈活性的情況下來讀取、調(diào)試自動(dòng)生成的導(dǎo)數(shù)代碼的研究人員和學(xué)生來說,Tangent非常有用。

檢查和調(diào)試Tangent模型不需要特殊的工具,Tangent可以在Python龐大又不斷增長(zhǎng)的子集上工作,為其他Python機(jī)器學(xué)習(xí)庫(kù)提供它們所沒有的自動(dòng)微分特性。它性能高,且與TensorFlow、NumPy兼容。

怎樣自動(dòng)為Python代碼生成導(dǎo)數(shù)呢?

像tf.exp或tf.log這樣的數(shù)學(xué)函數(shù)具有導(dǎo)數(shù),我們可以編寫出來構(gòu)建反向傳遞,子例程、條件、循環(huán)等語法片段也同樣具有反向傳遞版本。Tangent能為任何Python語法、以及很多Numpy和TensorFlow函數(shù)調(diào)用生成導(dǎo)數(shù)代碼。

Tangent有一個(gè)單一功能API:

下面的動(dòng)圖展示了當(dāng)我們?cè)赑ython函數(shù)上調(diào)用tangent.grad時(shí)會(huì)發(fā)生什么:

 

如果你想列出自己的導(dǎo)數(shù),可以運(yùn)行:

對(duì)于Python語法的導(dǎo)數(shù)和TensorFlow Eager函數(shù),Tangent有一個(gè)巨大的recipe庫(kù)。tangent.grad會(huì)抓取你傳遞給它的Python函數(shù)源代碼,然后反向遍歷它,從自己的庫(kù)中查找匹配的反向傳遞recipe,并把它加到導(dǎo)數(shù)函數(shù)的末尾。

這項(xiàng)技術(shù)的名字——反向模式自動(dòng)微分——就來源于這種逆向處理。

上面的函數(shù)df只適用于張量(非數(shù)組)輸入。Tangent也支持:

  • 用TensorFlow Eager函數(shù)來處理數(shù)組
  • 子例程
  • 控制流

谷歌在博客文章中強(qiáng)調(diào),雖然Tangent從支持TensorFlow Eager開始,但它并不和某一個(gè)庫(kù)綁定,他們也愿意接受添加PyTorch或者M(jìn)XNet導(dǎo)數(shù)recipe的請(qǐng)求。 

責(zé)任編輯:龐桂玉 來源: 36大數(shù)據(jù)
相關(guān)推薦

2009-04-20 20:09:15

2013-10-15 09:21:40

2023-01-05 08:45:07

國(guó)產(chǎn)數(shù)據(jù)庫(kù)代碼

2013-08-26 09:18:21

2015-02-03 02:43:57

2023-09-26 10:52:38

LinuxDoxygen

2022-12-14 14:45:56

2012-03-28 14:50:40

2019-09-04 14:59:01

Android 谷歌代碼

2019-05-22 15:29:37

GitHub開源代碼管制

2010-07-29 11:20:49

Flex源代碼

2020-06-18 11:14:53

微軟谷歌開源

2011-10-21 09:24:13

谷歌Android 4.0源代碼

2009-08-18 13:56:18

開源代碼Linux系統(tǒng)云計(jì)算

2022-03-22 15:24:15

黑客勒索軟件

2021-07-16 09:00:00

深度學(xué)習(xí)機(jī)器學(xué)習(xí)開發(fā)

2019-09-12 13:54:09

谷歌 Flutter開發(fā)者

2021-03-12 14:06:03

谷歌代碼開發(fā)

2024-09-13 15:24:20

深度學(xué)習(xí)自動(dòng)微分

2015-12-22 10:52:36

UbuntuPostgreSQLphpPgAdmin
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)