GoogleBrain開源新的Python庫:Tangent

姓名:郭金? ? 學(xué)號:17101223407

轉(zhuǎn)載自英語原文:http://research.googleblog.com/2017/11/tangent-source-to-source-debuggable.html

【嵌牛導(dǎo)讀】:Google Brain 今日開源了一款 Python 庫,名為 Tangent,專門用于實現(xiàn)自動微分功能。

【嵌牛鼻子】:AI郎哭、Tangent绪励、Python

【嵌牛提問】: 我們要如何為普通Python代碼生成導(dǎo)數(shù)陕悬?

【嵌牛正文】:

? ? ? 相較于現(xiàn)有機器學(xué)習(xí)資源訓(xùn)灌诅,Tangent 屬于一套源到源系統(tǒng)践磅,其使用 Python f 函數(shù)并生成另一新 Python 函數(shù)以計算 f 梯度单刁。通過這種方式,用戶能夠更好地理解梯度計算流程府适,并輕松完成用戶級梯度編輯與調(diào)試任務(wù)羔飞。Tangent 亦擁有以下機器學(xué)習(xí)模型調(diào)試與設(shè)計能力:

輕松調(diào)試您的反向傳播 快速梯度調(diào)整

正向模式自動差異化

高效 Hessian 矢量產(chǎn)品

代碼優(yōu)化

? ? ? 在今天的文章中肺樟,我們將對 Tangent API 作出概述。文章內(nèi)容涵蓋如何在 Python 中利用 Tangent 生成易于解釋逻淌、調(diào)試以及修改的梯度代碼么伯。

? ? ? 神經(jīng)網(wǎng)絡(luò)(簡稱 NN)已經(jīng)在圖像、視頻卡儒、音頻以及文本類機器學(xué)習(xí)模型領(lǐng)域取得了巨大成功田柔。而讓我們得以訓(xùn)練出能夠在此類任務(wù)中帶來良好表現(xiàn)的神經(jīng)網(wǎng)絡(luò)的基本抽象思路,則源自 30 年前即已誕生的概念骨望,即反向模式自動微分(亦被稱為反向傳播)——其中包括兩次神經(jīng)網(wǎng)絡(luò)通過流程硬爆。首先,我們運行“正向傳播”以計算每個節(jié)點的輸出值锦募。之后摆屯,我們運行“反向傳播”以計算一系列層數(shù),從而確定如何更新權(quán)重以提高模型的準(zhǔn)確性糠亩。

? ? ? 要對神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練并面向新型架構(gòu)加以研究虐骑,要求我們以正確、高效且便捷的方式實現(xiàn)導(dǎo)數(shù)計算任務(wù)赎线。如果我們的模型訓(xùn)練效果不佳廷没,或者嘗試構(gòu)建自己尚不了解的新鮮事物,則必然需要有能力對其作出調(diào)試垂寥。所謂自動微分颠黎,或者簡稱“autodiff”,是指一項用于計算計算機程序內(nèi)負責(zé)表示某些數(shù)學(xué)函數(shù)的導(dǎo)數(shù)的技術(shù)手段滞项。目前狭归,幾乎全部機器學(xué)習(xí)庫都在使用自動微分技術(shù)。

? ? ? 現(xiàn)有各類資源庫在實現(xiàn)自動微分方面文判,主要采用追蹤程序執(zhí)行(立足于 TF Eager过椎、PyTorch 以及 Autograd 等運行時內(nèi)),或者構(gòu)建動態(tài)數(shù)據(jù)流圖形而后對圖形加以微分(進行提前微分戏仓,TensorFlow 即采取此種方法)的方式疚宇。相比之下,Tangent 則可直接對 Python 源代碼進行提前自動微分赏殃,并以輸出結(jié)果的方式生成 Python 源代碼敷待。

圖片發(fā)自簡書App

? ? ? 如此一來,大家將能夠像讀取其它程序一樣仁热,直接讀取自動導(dǎo)數(shù)代碼榜揖。Tangent 不僅適用于希望利用 Python 編寫模型的研究人員與學(xué)生,同時亦能夠在不犧牲靈活性與速度表現(xiàn)的前提下讀取并調(diào)試自動生成的導(dǎo)數(shù)代碼。大家可以輕松檢查并調(diào)試您利用 Tangent 編寫的模型举哟,且無需使用任何特殊工具或者間接性方式钳幅。Tangent 能夠?qū)?Python 生態(tài)系統(tǒng)內(nèi)龐大且不斷增加的各類功能子集,提供其它 Python 機器學(xué)習(xí)庫所不具備的額外 autodiff 特性炎滞,性能出色且可與 TensorFlow 及 NumPy 相兼容。

? ? ? Python 代碼自動微分

? ? 那么我們要如何為普通 Python 代碼生成導(dǎo)數(shù)诬乞?以 tf.exp 或 tf.log 為代表的各類數(shù)學(xué)函數(shù)中皆包含導(dǎo)數(shù)册赛,我們可以通過編寫此類函數(shù)建立反向傳播。同樣的震嫉,語法片段(例如子例程森瘪、條件與循環(huán)等)也可擁有對應(yīng)的反向傳播版本。Tangent 中包含為每項 Python 語法生成導(dǎo)數(shù)代碼的對應(yīng)方法票堵,同時亦囊括大量面向 NumPy 與 TensorFlow 函數(shù)的調(diào)用選項扼睬。Tangent 擁有一個單函數(shù) API:

圖片發(fā)自簡書App

以下流程圖展示了在 Python 函數(shù)中調(diào)用 tangent.grad 時會發(fā)生怎樣的情況:

圖片發(fā)自簡書App

圖片發(fā)自簡書App

圖片發(fā)自簡書App

圖片發(fā)自簡書App

圖片發(fā)自簡書App

圖片發(fā)自簡書App
圖片發(fā)自簡書App

如果您打算輸出自己的導(dǎo)數(shù),則可運行:

圖片發(fā)自簡書App

? ? ? 從底層角度來看悴势,tangent.grad 會首先提取您傳遞給它的 Python 函數(shù)源代碼窗宇。Tangent 擁有大量 Python 語法導(dǎo)數(shù)配方庫,同時亦支持 TensorFlow Eager 函數(shù)特纤。函數(shù) tangent.grad 隨后會以反向順序遍歷您的代碼军俊,查找匹配的反向傳播配方,并將其浯對導(dǎo)數(shù)函數(shù)末尾捧存。這種逆序處理方式擁有自己的特定名稱:反向模式自動微分粪躬。

? ? 以上 df 函數(shù)僅適用于標(biāo)量(非數(shù)組)輸入內(nèi)容。Tangent 亦支持:

? ? ? 利用 TensorFlow Eager 函數(shù) 昔穴,以處理數(shù)字數(shù)組? 子例程? ? 控制流

? ? 雖然我們選擇 TensorFlow Eager 支持作為起點镰官,但 Tangent 絕不僅限于一種或者多種特定庫——我們樂于將更多 PyTorch 或者 MXNet 導(dǎo)數(shù)配方添加到 Tangent 庫當(dāng)中。

? ? ? 未來展望

? ? ? Tangent 目前在 github.com/google/tangent 上以開源形式公開吗货,感興趣的朋友可以前往下載并進行安裝泳唠。Tangent 目前仍處于實驗性階段,因此在實際使用中可能存在一些錯誤卿操。希望大家能夠在 GitHub 上向我們報告您發(fā)現(xiàn)的問題警检,我們將盡最大努力加以解決。

? ? ? 我們努力在 Tangent 當(dāng)中為 Python 語言的更多要素(例如閉包害淤、內(nèi)聯(lián)函數(shù)定義扇雕、類以及更多 NumPy 與 TensorFlow 函數(shù))添加支持。我們也希望在未來逐步實現(xiàn)更為先進的自動微分與編譯器功能窥摄,例如內(nèi)存與計算間的自動權(quán)衡镶奉、自動性更高的優(yōu)化以及 lambda 提升。

? ? ? 我們有意攜手技術(shù)社區(qū)共同推進 Tangent 的發(fā)展。我們歡迎您提交修復(fù)與功能性質(zhì)的 pull 請求哨苛。感謝您的參與鸽凶!

? ? ? 致謝

? ? ? Bart van Merri?nboer 在實習(xí)期間為 Tangent 項目的各個方面作出了卓越貢獻,Dan Moldovan 領(lǐng)導(dǎo)了 TF Eager 集成建峭、基礎(chǔ)設(shè)施與基準(zhǔn)測試等工作玻侥。此外,感謝谷歌 Brain 團隊對本文編撰工作的支持亿蒸,同時特別感謝 Sanders Kleinfeld凑兰、Matt Johnson 以及 Aleks Haecky 在技術(shù)層面對本文提供的寶貴貢獻。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末边锁,一起剝皮案震驚了整個濱河市姑食,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茅坛,老刑警劉巖音半,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贡蓖,居然都是意外死亡曹鸠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門斥铺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來物延,“玉大人,你說我怎么就攤上這事仅父∨咽恚” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵笙纤,是天一觀的道長耗溜。 經(jīng)常有香客問我,道長省容,這世上最難降的妖魔是什么抖拴? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮腥椒,結(jié)果婚禮上阿宅,老公的妹妹穿的比我還像新娘。我一直安慰自己笼蛛,他們只是感情好洒放,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滨砍,像睡著了一般往湿。 火紅的嫁衣襯著肌膚如雪妖异。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天领追,我揣著相機與錄音他膳,去河邊找鬼。 笑死绒窑,一個胖子當(dāng)著我的面吹牛棕孙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播些膨,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼散罕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了傀蓉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤职抡,失蹤者是張志新(化名)和其女友劉穎葬燎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缚甩,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡谱净,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了擅威。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壕探。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖郊丛,靈堂內(nèi)的尸體忽然破棺而出李请,到底是詐尸還是另有隱情,我是刑警寧澤厉熟,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布导盅,位于F島的核電站,受9級特大地震影響揍瑟,放射性物質(zhì)發(fā)生泄漏白翻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一绢片、第九天 我趴在偏房一處隱蔽的房頂上張望滤馍。 院中可真熱鬧,春花似錦底循、人聲如沸巢株。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纯续。三九已至随珠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猬错,已是汗流浹背窗看。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留倦炒,地道東北人显沈。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像逢唤,于是被迫代替她去往敵國和親拉讯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容