【TF/Guide筆記】 07. Advanced autodiff
? ? 跳過了tensor slicing,感覺沒啥值得記的。
? ? 這一章感覺更偏向ml的數(shù)學(xué),和底層的關(guān)系不大,但是看了這個(gè)我才發(fā)現(xiàn)tf的autodiff有他天然的優(yōu)勢,就是可以算高階導(dǎo)數(shù)。
? ? 正因?yàn)閠ape內(nèi)部關(guān)于梯度計(jì)算的部分是獨(dú)立在原始的計(jì)算圖之外的,所以自然也可以把梯度這部分同樣看作計(jì)算圖,在它的基礎(chǔ)上外掛一套tape,來實(shí)現(xiàn)對x的二階導(dǎo),而我們以前的那種data/diff的做法,在框架層面上限制了只能算出來一階導(dǎo)。
? ? 依稀記得曾經(jīng)在tf的白皮書上看到過一個(gè)有關(guān)延遲運(yùn)行的說明,用戶聲明的計(jì)算圖其實(shí)可以一直攢著,直到不得不運(yùn)行的時(shí)候再跑起來,這樣看來,在function體系下,也許在用戶調(diào)用tape.gradient的時(shí)候框架并沒有做真正的計(jì)算,他只是在計(jì)算圖上不斷的累加,直到后續(xù)的print才會(huì)真正運(yùn)行起來。
? ? 延遲運(yùn)行就解決了之前提過的autodiff的問題,也就是分開了兩次運(yùn)行和冗余的計(jì)算,看來認(rèn)為自己能在某一點(diǎn)上超過tf還是有點(diǎn)天真了。
? ? 延遲運(yùn)行這件事我們曾經(jīng)考慮過,但是這個(gè)問題難在設(shè)計(jì)而不是實(shí)現(xiàn),什么樣的規(guī)則可以清晰明確的劃分出是否需要運(yùn)行計(jì)算圖,總不能枚舉吧,而且我們以前用的是mpi式的分布式結(jié)構(gòu),運(yùn)行時(shí)間不夠明確是一件很讓人頭疼的事。這個(gè)東西如果從設(shè)計(jì)理念上不理解的話,看代碼就更不可能看的出來了。