為什麼CNTK知名度和普及率不如Tensorflow、Theano、caffe、Torch?

官網:The Microsoft Cognitive Toolkit

Github: GitHub - Microsoft/CNTK: Microsoft Cognitive Toolkit (CNTK)

由性能對比可以看到遠超其他框架,但為什麼知乎上基本沒人討論CNTK?


軟狗親身評測,就算微軟內部,大家把cntk 贊了一番之後,還是各回各家 import keras ……

就應用來說,Keras 作為前端,後端不管是Theano 還是tensorflow 還是cntk 並不重要,這樣怎麼弄得出來大新聞呢


首先微軟沒大力推CNTK,因為沒有意識到需要去搶佔DNN框架的重要性。這個只能說是上層的鍋,當時我們做Minerva也得不到支持,想開源也被斃掉了。現在微軟回過神來了,就已經晚了。Theano, Torch, TensorFlow, MxNet已經成為主流,CNTK跟這些項目比沒什麼明顯優勢,現在推已經推不起來了

其次還是不夠好用。CNTK v1的介面相對於其它幾個框架來講還是比較原始,跟caffe差不多的那種config文件模式,而且還不是caffe那種layer,而是OP級別的介面,寫起來比較頭疼。而且還沒有Python介面,導致學習曲線較陡。v2已經改進了不少,然而比其它框架還是差一點。然後性能上,比TensorFlow開源版本可能有點優勢,特別是在語音應用上,因為仔細調過所以會快,但在其它應用上並沒什麼優勢。

最後當然還有品牌問題。微軟在開源領域實在沒什麼號召力,雖然最近開源了很多代碼,但比起Google那種隨便開一個東西就能炒半天的影響力,顯然差了好大一截


接觸過一段時間CNTK,跑的時候還挺爽,文檔齊全log清晰。可是一輪到自己要修改代碼,添加功能的時候…當然免不了要讀代碼啊…然後…然後表示讀不懂啊…

非常工程化,滿眼template,代碼很大氣,這就導致我這種習慣寫輕量級演算法代碼和腳本代碼,而沒有過硬軟體工程實力的coder望而卻步。其實我也有5年左右的c++經驗,但還是感覺吃力有困難。

雖然是我個人的原因,但應該也是很多人面臨的問題,幾個嘗試過的師兄也這麼說的。

然後現在整個實驗室提起CNTK,大家的反應都是好難啊,然後慢慢的整個實驗室都沒人用了。


老實說這個市場已經被其他庫先入為主了,我軟被動是可以理解的。大家開會贊一下,回到主機前還是各找各媽。不是因為cntk不好,而是因為,我真的沒有incentive去了解它...


我們在開發cloud machine learning的平台時,已經支持了TensorFlow、MXNet、Theano、Torch和Caffe深度學習框架,為了滿足部分同事(從微軟挖過來)的需求,我也開始研究和對接CNTK框架,有幾點感受。

首先是文檔補全,在Google只能搜到Github上微軟官方的wiki,wiki雖然詳細單沒有可以完整跑通的例子,Stackoverflow上幾乎沒有相關的問題。

其次是(在國內)安裝困難,源碼編譯大概要一兩個小時,然後發現沒有Python binding,重新編譯發現需要Python 3。如果使用release好的版本,下載一個500多M的包都花了不少時間,解壓後執行腳本還需要wget xxx,結果就卡住了。

因此最易用的方法是build官方提供的Dockerfile,通過容器隔離運行環境,只要花時間總能build過去,這樣我們就能完美使用cntk命令了,小米的cloud machine learning也支持用戶上傳cntk描述文件直接運行,直接提交文件不需要任何依賴。但是官方Dockerfile也沒有安裝Python binding,也搞了不少時間。

最後,CNTK即使是Python binding的代碼風格一看就是C# guy寫的,像嘗試改一下Example中的模型,最後放棄,因為文檔只有wiki。

很欣慰看到軟狗也出來自黑,說明我的感受也是正確的,還是建議新人從TensorFlow入手,擁抱最活躍的社區,無論是學習、實踐還是生產都能得到最大的幫助 :)


There are only two hard things in Computer Science: cache invalidation and naming things.

-- Phil Karlton

CNTK 這個名字實在是太糟糕了,不如改名叫 Deep Dot Net


作為CNTK曾經共享過代碼的人來說幾句。我大概是在15年的上半年知道CNTK這個工具的,當時其創立者到蘇州訪問,開了個CNTK的講座。聽完報告,大家紛紛表示cntk很強大,想用在自己的工作中。過了一段時間,大家都意識到CNTK真的很難用。首先,CNTK的config文件超級複雜,經常是一個簡單的任務都幾百行,配置起來真的很頭疼。另外,CNTK由於是做語音的人開發的,對nlp的任務支持的很不好,feedforward, seq2seq等都模塊都不完備,裡面的SequenceReader也很不好用,寫的有點亂。

當時版本的CNTK不支持NCE,我就和他們商量在CNTK加入NCE模塊。花了很長時間終於把代碼調通,得到正確的結果。後來過了兩個月,在checkin的時候發現沒辦法使用這個模塊,調試了很久之後還是放棄了。

現在,還是用的theano+lasagne, keras,省事又省心。


因為剛開始搞沒多久啊。而且,微軟不是廣告公司。


因為沒有python介面→_→


匿了。他家的論文dssm開放源碼都要用c#,合著加一個baseline,需要裝一套c#的環境,你好歹寫幾行keras啊。挺好的文章,沒火起來恐怕這有很大關係。


微軟根本就沒有開源的基因,發的論文幾乎沒有對應的github項目


我覺得在windows平台上非CNTK莫屬。


成功的商品往往有兩個特點

易用

強大

在強大的前提下,易用性不足的話結果往往是失敗或者不流行,當然主要還是因為別人的相對來說平衡得更好或者易用性更加突出。

畢竟在強大的東西,如果要付出很大代價去使用的話。。。何必自己找罪受呢?


除了cntk,其他幾個庫我都玩過一些。目前主要還是以caffe為主,準確來說是pycaffe。簡單吐槽下吧。

cntk在github上的代碼,下載都要100多兆,用迅雷下載了幾個小時。。。

cntk用brain script,我就奇怪了,搞什麼標新立異嘛,Python和MS有仇嗎?

cntk改名字了,咦?這是什麼預兆?難道是要發大招了?以後還向後兼容不?

cntk安裝麻煩。。。

好吧,先吐這麼多。其實,cntk可以好好看看隔壁家是怎麼火起來的。

深度學習網路越來越複雜,要求庫能足夠靈活,滿足不同的需求。與其定義眾多的層,不如定義ops,有更多的代碼可以重用。(caffe笑什麼,說的就是你。)光速逃。。。


當年公司需要做手寫識別,讓我嘗試CNTK,邊研究邊做實驗,實驗做到後來,發現它不支持CTC,只能調整實驗方案,現在不知道支持CTC了沒?

後來去面試,面試官問我用的什麼框架,我說CNTK,一臉茫然,甚至惡意揣測我沒搞過深度學習。


推薦閱讀:

faster rcnn中rpn的anchor,sliding windows,proposals?
目標檢測SSD相對於YOLO與faster-RCNN做了哪些改進?效果如何呢?
mxnet的並行計算為什麼這麼牛,是什麼原理?
現在tensorflow和mxnet很火,是否還有必要學習scikit-learn等框架?
為什麼在數據量較小的時候CPU計算會快於GPU?

TAG:微軟Microsoft | 機器學習 | 深度學習DeepLearning | Caffe深度學習框架 | TensorFlow |