一、autograd自動微分
autograd是專門為了BP算法設計的,所以這autograd只對輸出值為標量的有用,因為損失函數的輸出是一個標量。如果y是一個向量,那么backward()函數就會失效。不知道BP算法是什么的同學,估計也不知道什么是深度學習,建議先看Zen君提供的教材。
二、autograd的內部機理
variable是tensor的外包裝,variable類型變量的data屬性存儲着tensor數據,grad屬性存儲關於該變量的導數,creator是代表該變量的創造者。

數據向前傳輸和向后傳輸生成導數的過程示意圖
如圖,假設我們有一個輸入變量input(數據類型為Variable)input是用戶輸入的,所以其創造者creator為null值,input經過第一個數據操作operation1(比如加減乘除運算)得到output1變量(數據類型仍為Variable),這個過程中會自動生成一個function1的變量(數據類型為Function的一個實例),而output1的創造者就是這個function1。隨后,output1再經過一個數據操作生成output2,這個過程也會生成另外一個實例function2,output2的創造者creator為function2。
在這個向前傳播的過程中,function1和function2記錄了數據input的所有操作歷史,當output2運行其backward函數時,會使得function2和function1自動反向計算input的導數值並存儲在grad屬性中。
creator為null的變量才能被返回導數,比如input,若把整個操作流看成是一張圖(Graph),那么像input這種creator為null的被稱之為圖的葉子(graph leaf)。而creator非null的變量比如output1和output2,是不能被返回導數的,它們的grad均為0。
所以只有葉子節點才能被autograd。
作者:Zen_君
鏈接:http://www.jianshu.com/p/cbce2dd60120
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。