天天看點

《白話深度學習與TensorFlow》——3.4 如何選擇好的架構

作為計算模型來說,深度學習中的絕大部分基本理論早已沉澱成了固化的計算子產品、函數或者算法包。就計算模型本身來說,架構之間的差别不會太大,也不可能太大,除非這個領域的理論層面得到了極大的突破,而且這個突破還是不同方向且掌握在個别組織手裡的。而現在架構之間的差别主要出現在這幾個地方。

第一,性能方面。

這一屬性主要由底層的實作語言決定,底層運作比較快的仍舊是實作的語言。理論上說,運作速度最快的仍舊是C或C++一類,離着CPU指令近一些語言效率高一些。

筆者用過Torch、TensorFlow、Chainer、Caffe等多種架構,雖然沒有經過系統地壓測和對比以及時下流行的跑分測試,但仍然有個比較感性的感覺——相同情況下Torch運作的速度略快一些,而TensorFlow老實說确實不能算快的甚至是這幾款裡面比較慢的。不過筆者從來不覺得這是什麼大問題,這種效率的差距僅僅是零點幾倍或者一點幾倍,而真正在工程實作方面的差距大多來自樣本數量、網絡設計等方面,這些方面的差距可能都是一兩個數量級的(差10倍或者100倍),是以這種效率不是最重要的參考标志。

第二,社群活躍度。

這些開源的項目雖然多,但是社群活躍與否是個非常重要的因素,甚至幾乎是首選的因素。活躍的社群意味着有更多的人正在使用這樣一個項目,會有更多的人貢獻代碼,送出Bug,遇到錯誤你也很容易找到前人踩坑留下的墊坑石。因而做起項目來風險也相對比較小,學習起來進步也會快一些。

第三,語言。

這幾乎是最不重要的一個方面,因為不管什麼語言,實作的架構大多都會支援Python的“驅動”,或者我們稱接口。當然也有很多比較執拗的架構隻提供人家自己原生的接口,例如Torch隻支援Lua腳本,CNTK隻支援C++等。

說它不重要是因為,在這樣一個應用場景中網絡建立的邏輯比較有限,是以涉及的文法内容也非常有限,學習成本也不高,反正從邏輯和模型層面是沒有差别的。

應該說TensorFlow在這些方面做得還都是令人滿意的。首先它有着非常活躍的社群:www.tensorflow.org,首頁的日均PV有40到50萬之多。這對于一個小衆化的技術網站已經是個不得了的數字了。

《白話深度學習與TensorFlow》——3.4 如何選擇好的架構

它的英文社群比中文社群活躍得多,而且在Stackoverflow上的問題讨論也非常多,目前有8000多個被跟帖的文章,每天都會有不少新帖出來,是以在成功的路上你不會孤單。

《白話深度學習與TensorFlow》——3.4 如何選擇好的架構

語言嘛,Python肯定是首選,筆者大多是使用Python 2.7+ TensorFlow的方式來工作的,很友善。

性能就像我剛才所說的,雖然感覺上并不快,但是滿足目前的工作已經足夠了。而且這種數量級的效率提升是無法通過更換一個架構來實作的。

總體來說TensorFlow應該是所有深度學習架構中比較适合用來進行工程應用的。