做底層AI框架和上層AI應(yīng)用,哪個(gè)對(duì)自己的學(xué)術(shù)水平(或綜合能力)促進(jìn)更大?這一問(wèn)題引起了知乎上不少的討論。本文對(duì)解浚源、微調(diào)等用戶的精彩回答做了整理,與讀者共享。
左手“底層AI框架”,右手“上層AI應(yīng)用”,如何選擇?
對(duì)于做AI相關(guān)工作的人來(lái)說(shuō),具體選擇做哪個(gè)方向,可能是需要深深糾結(jié)的一個(gè)問(wèn)題。
知乎上就用戶提出了此問(wèn)題,引起了不小的關(guān)注和討論:
新智元獲得了解浚源和微調(diào)兩位用戶的授權(quán),將他們對(duì)此問(wèn)題的深度解析做了整理,與讀者共享。
要有側(cè)重,但兩方面都需了解
作為一個(gè)深度學(xué)習(xí)轉(zhuǎn)系統(tǒng)的人,我最近也在反思一個(gè)問(wèn)題:深度學(xué)習(xí)系統(tǒng)(Deep Learning System)的核心到底是深度學(xué)習(xí)還是系統(tǒng)?
先放結(jié)論:無(wú)論你想做深度學(xué)習(xí)還是深度學(xué)習(xí)系統(tǒng),都需要同時(shí)了解兩方面的知識(shí),根據(jù)自己的方向可以有所側(cè)重,但一定不能對(duì)一方面完全不懂,否則是很難做出在實(shí)踐中有用的成果的。
首先我們來(lái)看一下目前流行框架的開(kāi)發(fā)團(tuán)隊(duì)和他們開(kāi)發(fā)框架的驅(qū)動(dòng)力:
Caffe:賈揚(yáng)清和伯克利視覺(jué)實(shí)驗(yàn)室的小伙伴們開(kāi)發(fā)。開(kāi)始主要是自己用,屬于需求驅(qū)動(dòng)。
Torch:Yann LeCun的學(xué)生。需求驅(qū)動(dòng)。
Theano:Yoshua Benjio的學(xué)生。用于自己科研,但是也發(fā)了系統(tǒng)的paper,屬于需求+科研驅(qū)動(dòng)。
Tensorflow:Jeff Dean帶領(lǐng)的Google員工,主要是系統(tǒng)出身。源于Google在AI領(lǐng)域的布局需求,資本驅(qū)動(dòng)。
Neon:nervana員工,作為創(chuàng)業(yè)公司的產(chǎn)品。資本驅(qū)動(dòng)。
MXNet:DMLC(主要是華人機(jī)器學(xué)習(xí)和分布式系統(tǒng)學(xué)生)的小伙伴。主要是Minerva,Purine,和cxxnet的開(kāi)發(fā)團(tuán)隊(duì)合在一起,一半搞機(jī)器學(xué)習(xí)的,一半搞系統(tǒng)的。需求+興趣驅(qū)動(dòng)。
剩下還有很多搞系統(tǒng)的人出于興趣或者科研目的開(kāi)發(fā)的框架,但大多沒(méi)有流行起來(lái),就不再贅述了。
可以看出,除了Google強(qiáng)推的Tensorflow,大多都是從自用和興趣開(kāi)始的。而Tensorflow的開(kāi)發(fā)經(jīng)費(fèi)比其他所有框架的經(jīng)費(fèi)加起來(lái)還要多出幾十倍,但是一年下來(lái)并沒(méi)能一統(tǒng)江湖。可見(jiàn)需求驅(qū)動(dòng)的力量,所謂“需要是發(fā)明之母”。
為什么主流深度學(xué)習(xí)框架多數(shù)出自“懂一點(diǎn)系統(tǒng)的搞深度學(xué)習(xí)的人”之手,而不是“懂一點(diǎn)深度學(xué)習(xí)的搞系統(tǒng)的人”呢?
我認(rèn)為主要是因?yàn)樯疃葘W(xué)習(xí)系統(tǒng)和傳統(tǒng)系統(tǒng)(比如操作系統(tǒng),數(shù)據(jù)庫(kù))有一個(gè)本質(zhì)區(qū)別:深度學(xué)習(xí)算法各部分的耦合非常緊密,牽一發(fā)而動(dòng)全身。
搞系統(tǒng)的人的思路是,我做一個(gè)系統(tǒng),定義好接口,保證接口正確,用戶用就可以了,不需要了解實(shí)現(xiàn)細(xì)節(jié)。畢竟你用操作系統(tǒng)并不需要了解文件系統(tǒng)格式,用數(shù)據(jù)庫(kù)并不需要了解一致性是怎么實(shí)現(xiàn)的。
但是這套思維用在深度學(xué)習(xí)系統(tǒng)上卻不合適。
其一,一個(gè)數(shù)據(jù)矩陣流過(guò)整個(gè)系統(tǒng),每一步的細(xì)節(jié)都可能對(duì)一百步以后的結(jié)果造成影響。而對(duì)于中間結(jié)果,你無(wú)法嚴(yán)格定義什么是正確的,一個(gè)好的算法不是N個(gè)好的部分的簡(jiǎn)單疊加。Hinton就說(shuō)過(guò),Dropout看起來(lái)像個(gè)Bug,但是它提高了精度,所以是個(gè)“好bug”。
其二,因?yàn)樯疃葘W(xué)習(xí)算法復(fù)雜,需要控制的因素多,一個(gè)固定接口很難滿足所有用戶的需要。還不如把系統(tǒng)寫的簡(jiǎn)單靈活一點(diǎn),讓用戶根據(jù)需要可以很方便的自己修改。
反過(guò)來(lái)對(duì)搞深度學(xué)習(xí)的人來(lái)說(shuō),如果你不了解系統(tǒng)內(nèi)部細(xì)節(jié),當(dāng)你的算法效果好的時(shí)候,你并不知道到底是哪些因素導(dǎo)致了效果好。可能換了一個(gè)框架,效果就不好了,而原因是你根本不知道的某個(gè)實(shí)現(xiàn)細(xì)節(jié)。當(dāng)效果不好時(shí),你也不知道如何改進(jìn)。
另一方面來(lái)說(shuō),當(dāng)你需要實(shí)現(xiàn)一個(gè)新的算法的時(shí)候,經(jīng)常會(huì)發(fā)現(xiàn)框架現(xiàn)有的接口不能解決你的問(wèn)題,這時(shí)候就需要對(duì)系統(tǒng)內(nèi)部的了解才能修改系統(tǒng)已實(shí)現(xiàn)自己的目的。
底層開(kāi)發(fā)較難,上層更接地氣
上周開(kāi)會(huì)時(shí)遇到了TAMU的胡俠老師,他介紹了他們組最近開(kāi)發(fā)的一個(gè)自動(dòng)機(jī)器學(xué)習(xí)開(kāi)源框架Auto Keras。胡老師原話是這么說(shuō)的:“做開(kāi)源框架是非常有意義的事情,尤其是你的工作在短時(shí)間內(nèi)被很多人關(guān)注并使用是非常有成就感的。”
確實(shí)如此,很多業(yè)內(nèi)人士在逐漸把目光投向到更底層更接近“基礎(chǔ)設(shè)施”的方向上,比如自動(dòng)調(diào)參、大規(guī)模機(jī)器學(xué)習(xí)、并行式機(jī)器學(xué)習(xí)。畢竟好的算法想要被更多人使用,就需要降低使用門檻,提供通用的框架。假設(shè)如果沒(méi)有Sklearn,估計(jì)做機(jī)器學(xué)習(xí)的人最起碼要少一半。如果沒(méi)有TF或者Torch,做深度學(xué)習(xí)的人估計(jì)也要少一半。
其實(shí)嚴(yán)格意義上來(lái)說(shuō),從提出算法,封裝算法,到應(yīng)用在現(xiàn)實(shí)數(shù)據(jù)集上是一個(gè)流水線作業(yè),是從上游到下游的工作。我的一個(gè)觀察是,做算法研究的很多人代碼寫的很糙,運(yùn)行效率可能非常低。
舉個(gè)簡(jiǎn)單例子,當(dāng)你展示一個(gè)簡(jiǎn)單的K近鄰算法時(shí),你可以寫成每次都進(jìn)行重新搜索,也可以先構(gòu)造一課K-D樹(shù)來(lái)降低時(shí)間復(fù)雜度。僅聰邏輯角度來(lái)看,前者和后者都是正確的,但效率可能相差不少。
這種現(xiàn)象造成了大部分前沿研究的結(jié)果不容易落地,因?yàn)榇a未經(jīng)優(yōu)化或者在實(shí)現(xiàn)時(shí)存在各種各樣的bug。我覺(jué)得一個(gè)非常好的突破角度就是研究如何高效實(shí)現(xiàn)各種傳統(tǒng)及前沿算法,從最簡(jiǎn)單的向量化、并行運(yùn)算,到更復(fù)雜的結(jié)構(gòu)設(shè)計(jì)甚至到大規(guī)模的并行計(jì)算。如果把底層框架做好,那么對(duì)于工業(yè)界和科研界都有很大的意義:
工業(yè)界可以快速嘗試前沿算法,在真實(shí)數(shù)據(jù)上驗(yàn)證算法的可靠性及實(shí)用性。
科研界可以公平的對(duì)比前沿算法,防止科研造假。很多論文聲稱他們的算法是遠(yuǎn)超當(dāng)前的最佳算法(SOTA),但事實(shí)上可能僅僅是因?yàn)樗麄儧](méi)有正確實(shí)現(xiàn)SOTA而已。
我從去年起開(kāi)始嘗試造一些小輪子,也做了一些小框架。這個(gè)過(guò)程中由不少全新的感受:
設(shè)計(jì)、實(shí)現(xiàn)框架很容易,發(fā)現(xiàn)原有算法中的不足,有助于激發(fā)新的點(diǎn)子。以基于K近鄰的算法為例,假設(shè)在實(shí)現(xiàn)時(shí)你發(fā)現(xiàn)整個(gè)程序效率受制于K近鄰部分,你就可以嘗試用K-D樹(shù)來(lái)加速,甚至替換掉K近鄰的步驟,用聚類來(lái)模擬這個(gè)過(guò)程。所以當(dāng)你了解算法的瓶頸時(shí),你就可以提出新的有意義改進(jìn),反哺學(xué)術(shù)研究。
增強(qiáng)自己的實(shí)現(xiàn)能力,避免沉溺研究后的紙上談兵。近兩年最受關(guān)注的傳統(tǒng)分類方法要數(shù)陳天奇的XGBOOST,的確非常的好用。我認(rèn)為XGBOOST的成功要?dú)w功于算法很早就被封裝成了成熟的工具庫(kù),這是基于陳天奇老師深厚的系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)功力。我想過(guò)去十年肯定有一些很優(yōu)秀的算法蒙塵,只是因?yàn)樗鼈兊淖髡邿o(wú)法把它們封裝成成熟的輪子供大家使用,非常可惜。
更符合工業(yè)界的定位,為求職路加分。其實(shí)大部分情況下,工業(yè)界并不在意你發(fā)過(guò)多少厲害的文章,而更在意你是否可以把公司的需求落地。我自己的經(jīng)驗(yàn)是即使是學(xué)術(shù)參會(huì),也沒(méi)有多少人對(duì)我的水文感興趣,而更多的是聊我開(kāi)發(fā)框架的經(jīng)歷,因?yàn)樗麄儾粌H聽(tīng)說(shuō)過(guò)可能還是使用者。
成就感。框架的使用者遠(yuǎn)比論文的閱讀者要多得多,當(dāng)你發(fā)現(xiàn)你設(shè)計(jì)的框架被全世界的人廣泛使用時(shí),會(huì)有很強(qiáng)的成就感,會(huì)覺(jué)得自己為這個(gè)領(lǐng)域發(fā)展做出了一點(diǎn)點(diǎn)貢獻(xiàn),而不是僅僅寫出了一些這輩子不會(huì)再有人看的水文。
以上觀點(diǎn)主要在討論要不要嘗試學(xué)習(xí)開(kāi)發(fā)框架,嘗試造出一些新的輪子。回到正題,「底層框架」哪個(gè)「上層應(yīng)用」更好?我的觀點(diǎn)是這取決于你所擁有的技能:
底層框架:難點(diǎn)在于封裝和性能。比如如何設(shè)計(jì)API(接口),如何提高運(yùn)行速度進(jìn)行優(yōu)化,如何寫好測(cè)試保證方法正確。
上層應(yīng)用:難點(diǎn)在于如何把已有的輪子用在現(xiàn)實(shí)數(shù)據(jù)上去,這涉及里很多現(xiàn)實(shí)的問(wèn)題比如數(shù)據(jù)清理,比如理解如何正確的調(diào)用底層的功能。
一般來(lái)說(shuō),大部分人不適合寫底層。畢竟優(yōu)秀的框架已經(jīng)很多,而且對(duì)于系統(tǒng)架構(gòu)以及代碼優(yōu)化的要求很高,大部分人并不具備所需的知識(shí)。
而上層應(yīng)用就顯得更接地氣,可以加深我們對(duì)于數(shù)據(jù)的敏感度,擅長(zhǎng)做上層應(yīng)用的同學(xué)也會(huì)是職場(chǎng)offer收割機(jī)。其實(shí)能夠做好上層應(yīng)用并不容易,這需要對(duì)于問(wèn)題的深入理解。
換句話說(shuō),底層框架和上層應(yīng)用分的是不同的蛋糕,側(cè)重點(diǎn)各不相同。
從做研究的角度來(lái)看,發(fā)明一個(gè)算法其實(shí)不該是終點(diǎn)。作為算法的提出者更應(yīng)該自己動(dòng)手實(shí)現(xiàn)自己的模型,畢竟酒香也怕巷子深。
-
AI
+關(guān)注
關(guān)注
87文章
34274瀏覽量
275460 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5554瀏覽量
122494
原文標(biāo)題:做底層 AI 框架和做上層 AI 應(yīng)用,哪個(gè)對(duì)自己的學(xué)術(shù)水平(或綜合能力)促進(jìn)更大?
文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
AI框架歷史演進(jìn)和趨勢(shì)探索
開(kāi)發(fā)者手機(jī) AI - 目標(biāo)識(shí)別 demo
Firefly支持AI引擎Tengine,性能提升,輕松搭建AI計(jì)算框架
嵌入式Linux框架的相關(guān)資料分享
應(yīng)用程序調(diào)用底層驅(qū)動(dòng)
Sensor 驅(qū)動(dòng)框架的整體架構(gòu)詳細(xì)介紹

驅(qū)動(dòng)之路-設(shè)備模型之上層模型

深入剖析esp32c3的系統(tǒng)底層啟動(dòng)

華為基于昇騰AI基礎(chǔ)軟硬件平臺(tái) 助力企業(yè)的數(shù)字化和智能化轉(zhuǎn)型
alsa底層框架系統(tǒng)配置與插件
AI框架歷史演進(jìn)和趨勢(shì)探索
ChatGPT:AI模型框架研究
AI開(kāi)發(fā)框架集成介紹
京東中臺(tái)化底層支撐框架技術(shù)分析及隨想

評(píng)論