日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python自动源码_谷歌推出Tangent开源库,在Python源代码上做自动微分

發(fā)布時(shí)間:2025/3/20 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python自动源码_谷歌推出Tangent开源库,在Python源代码上做自动微分 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原標(biāo)題:谷歌推出Tangent開(kāi)源庫(kù),在Python源代碼上做自動(dòng)微分

李林 編譯自 Google Research Blog

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

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

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

輕松調(diào)試反向傳遞過(guò)程(backward pass)

快速的gradient surgery

正向模式自動(dòng)微分

高校的Hessian向量積

代碼優(yōu)化

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

神經(jīng)網(wǎng)絡(luò)為機(jī)器學(xué)習(xí)帶來(lái)了巨大的進(jìn)步,而我們訓(xùn)練神經(jīng)網(wǎng)絡(luò)來(lái)完成各類任務(wù)的基本思想已經(jīng)存在30年了,它就是反向模式自動(dòng)微分(reverse-mode automatic differentiation),也就是我們常說(shuō)的反向傳播(backpropagation)。反向傳播的過(guò)程包含兩次通過(guò)神經(jīng)網(wǎng)絡(luò):首先是運(yùn)行“正向傳遞”來(lái)計(jì)算每個(gè)節(jié)點(diǎn)的輸出值,然后再運(yùn)行“反向傳遞”計(jì)算一系列導(dǎo)數(shù),來(lái)確定如何更新權(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ù)通過(guò)跟蹤程序的執(zhí)行(在運(yùn)行時(shí),比如TensorFlow Eager、PyTorch、Autograd),或者構(gòu)建動(dòng)態(tài)數(shù)據(jù)流圖然后微分它(提前,比如TensorFlow)來(lái)實(shí)現(xiàn)自動(dòng)微分。

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

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

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

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

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

像tf.exp或tf.log這樣的數(shù)學(xué)函數(shù)具有導(dǎo)數(shù),我們可以編寫出來(lái)構(gòu)建反向傳遞,子例程、條件、循環(huán)等語(yǔ)法片段也同樣具有反向傳遞版本。Tangent能為任何Python語(yǔ)法、以及很多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語(yǔ)法的導(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)微分——就來(lái)源于這種逆向處理。

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

用TensorFlow Eager函數(shù)來(lái)處理數(shù)組

子例程

控制流

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

最后,附上Tangent開(kāi)源項(xiàng)目地址,內(nèi)有下載和安裝說(shuō)明:

http://github.com/google/tangent

博客原文:

https://research.googleblog.com/2017/11/tangent-source-to-source-debuggable.html

責(zé)任編輯:

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的python自动源码_谷歌推出Tangent开源库,在Python源代码上做自动微分的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。