神經網路

計算圖(computational graph)

/ kom-pyoo-TAY-shun-ul graf /

計算圖,是一張計算的地圖,畫成一張由方框和箭頭組成的網路。每個方框是一個單一的小運算——一次加法、一次乘法、施加一個激活函數——每個箭頭則標示它的結果接下來流向何處。你不再把一個大公式當作一團纏繞的亂麻,而是把它拆成這些細小的步驟,再擺出它們如何相連。這有點像把一份菜譜寫成流程圖:這一步用上那一步的產出,而那一步又用上更早兩步的產出。

何必如此?因為一旦把一項計算攤開成一張圖,電腦就能機械地對它進行推理。一個神經網路整個的前向傳播——數以百萬計的乘法和加法——就是一張巨大的計算圖,從一端的輸入,一直到另一端的損失(誤差)。現代的深度學習工具會在你寫普通程式碼時自動構建這張圖,然後用它高效地執行計算,往往還會把計算鋪開到許多處理器上。

這張圖真正的超能力,在於讓學習成為可能。要改進,網路需要知道每個權重的微小改變會如何影響最終的誤差。沿著圖一步步往回走,在每個方框處運用微積分的鏈式法則,就能讓電腦自動而精確地算出所有這些敏感度。這趟反向行走就是自動微分,它正是反向傳播底下的引擎。若沒有一張圖可循,要訓練帶著數以百萬計參數的網路,簡直就是無望之事。

拿一個小表達式 (a + b) × c 來說。它的圖裡有三個輸入方框 a、b、c;一個取 a 和 b 的「+」方框;以及一個取這個和與 c 的「×」方框。要弄清當 a 輕微抖動時最終答案改變多少,你只需從輸出沿箭頭往回走,在每個方框處把局部的影響相乘。把這個想法放大到數以百萬計的方框,你就得到了神經網路學習的方式。

計算圖把任何公式拆成相互連接的細小步驟,你可以沿它向前走,也可以向後走。

同一張圖會被沿兩個方向遍歷:向前走算出答案,向後走算出該如何改進它。正是這種可復用的結構,讓自動微分、進而讓訓練,在大規模上切實可行。

又稱
compute graphdataflow graph计算图計算圖数据流图