Deeplearning——動態圖 vs. 靜態圖


動態圖 vs. 靜態圖

在 fast.ai,我們在選擇框架時優先考慮程序員編程的便捷性(能更方便地進行調試和更直觀地設計),而不是框架所能帶來的模型加速能力。這也正是我們選擇 PyTorch 的理由,因為它是一個具有動態圖機制的靈活框架

依據采用動態計算或是靜態計算的不同,可以將這些眾多的深度學習框架划分成兩大陣營,當然也有些框架同時具有動態計算和靜態計算兩種機制(比如 MxNet 和最新的 TensorFlow)。動態計算意味着程序將按照我們編寫命令的順序進行執行。這種機制將使得調試更加容易,並且也使得我們將大腦中的想法轉化為實際代碼變得更加容易。而靜態計算則意味着程序在編譯執行時將先生成神經網絡的結構,然后再執行相應操作。從理論上講,靜態計算這樣的機制允許編譯器進行更大程度的優化,但是這也意味着你所期望的程序與編譯器實際執行之間存在着更多的代溝。這也意味着,代碼中的錯誤將更加難以發現(比如,如果計算圖的結構出現問題,你可能只有在代碼執行到相應操作的時候才能發現它)。盡管理論上而言,靜態計算圖比動態計算圖具有更好的性能,但是在實踐中我們經常發現並不是這樣的。

谷歌的 TensorFlow 主要使用了靜態計算圖,而 Facebook 的 PyTorch 則使用了動態計算圖機制。(注:TensorFlow 在兩周前宣布了一個動態計算選項 Eager Execution(http://t.cn/RlZizQ2),不過該特性還比較新穎並且 TensorFlow 的文檔和項目依然以靜態計算為主)。在九月份,fast.ai 宣布將在今年的課程中采用 PyTorch 框架進行教學以及開發 fast.ai 自己的框架(實際上就是采用了更好的編碼方式對 PyTorch 進行高級封裝)。簡而言之,以下是我們選擇 PyTorch 的幾個原因(更詳細的原因請參見這里http://t.cn/Rpqj6pu):

  • 更加容易調試

  • 動態計算更適用於自然語言處理

  • 傳統的面向對象編程風格(這對我們來說更加自然)

  • TensorFlow 中采用的諸如 scope 和 sessions 等不尋常的機制容易使人感到疑惑不解,而且需要花費更多時間學習

谷歌在推廣 TensorFlow 上已經花費了大量的資源,其投入要遠遠大於任何其它公司或者團隊,並且我想這也是為什么 TensorFlow 會如此出名的原因之一(對於很多深度學習的門外漢,TensorFlow 是他們唯一聽說過的框架)。正如之前所述,TensorFlow 在幾周前發布了動態計算選項,這將解決了一些上述提到的問題。然后許多人就向 fast.ai 提問說我們是否考慮遷移回 TensorFlow 框架。但是目前 TensorFlow 提供的動態選項還比較新穎而且開發也不夠完善,所以我們依然選擇繼續愉快地使用 PyTorch。但是 TensorFlow 團隊非常樂意於接受我們的想法,我們也很高興看到我們的 fastai 庫(http://t.cn/RYyK6jC)被移植到 TensorFlow 中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM