0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

做AI,底層框架or上層應(yīng)用?

DPVg_AI_era ? 來源:未知 ? 作者:李倩 ? 2018-09-05 08:42 ? 次閱讀

做底層AI框架和上層AI應(yīng)用,哪個對自己的學(xué)術(shù)水平(或綜合能力)促進(jìn)更大?這一問題引起了知乎上不少的討論。本文對解浚源、微調(diào)等用戶的精彩回答做了整理,與讀者共享。

左手“底層AI框架”,右手“上層AI應(yīng)用”,如何選擇?

對于做AI相關(guān)工作的人來說,具體選擇做哪個方向,可能是需要深深糾結(jié)的一個問題。

知乎上就用戶提出了此問題,引起了不小的關(guān)注和討論:

新智元獲得了解浚源和微調(diào)兩位用戶的授權(quán),將他們對此問題的深度解析做了整理,與讀者共享。

要有側(cè)重,但兩方面都需了解

作為一個深度學(xué)習(xí)轉(zhuǎn)系統(tǒng)的人,我最近也在反思一個問題:深度學(xué)習(xí)系統(tǒng)(Deep Learning System)的核心到底是深度學(xué)習(xí)還是系統(tǒng)?

先放結(jié)論:無論你想做深度學(xué)習(xí)還是深度學(xué)習(xí)系統(tǒng),都需要同時了解兩方面的知識,根據(jù)自己的方向可以有所側(cè)重,但一定不能對一方面完全不懂,否則是很難做出在實踐中有用的成果的。

首先我們來看一下目前流行框架的開發(fā)團(tuán)隊和他們開發(fā)框架的驅(qū)動力:

Caffe:賈揚清和伯克利視覺實驗室的小伙伴們開發(fā)。開始主要是自己用,屬于需求驅(qū)動。

Torch:Yann LeCun的學(xué)生。需求驅(qū)動。

Theano:Yoshua Benjio的學(xué)生。用于自己科研,但是也發(fā)了系統(tǒng)的paper,屬于需求+科研驅(qū)動。

Tensorflow:Jeff Dean帶領(lǐng)的Google員工,主要是系統(tǒng)出身。源于Google在AI領(lǐng)域的布局需求,資本驅(qū)動。

Neon:nervana員工,作為創(chuàng)業(yè)公司產(chǎn)品。資本驅(qū)動。

MXNet:DMLC(主要是華人機(jī)器學(xué)習(xí)和分布式系統(tǒng)學(xué)生)的小伙伴。主要是Minerva,Purine,和cxxnet的開發(fā)團(tuán)隊合在一起,一半搞機(jī)器學(xué)習(xí)的,一半搞系統(tǒng)的。需求+興趣驅(qū)動。

剩下還有很多搞系統(tǒng)的人出于興趣或者科研目的開發(fā)的框架,但大多沒有流行起來,就不再贅述了。

可以看出,除了Google強推的Tensorflow,大多都是從自用和興趣開始的。而Tensorflow的開發(fā)經(jīng)費比其他所有框架的經(jīng)費加起來還要多出幾十倍,但是一年下來并沒能一統(tǒng)江湖??梢娦枨篁?qū)動的力量,所謂“需要是發(fā)明之母”。

為什么主流深度學(xué)習(xí)框架多數(shù)出自“懂一點系統(tǒng)的搞深度學(xué)習(xí)的人”之手,而不是“懂一點深度學(xué)習(xí)的搞系統(tǒng)的人”呢?

我認(rèn)為主要是因為深度學(xué)習(xí)系統(tǒng)和傳統(tǒng)系統(tǒng)(比如操作系統(tǒng),數(shù)據(jù)庫)有一個本質(zhì)區(qū)別:深度學(xué)習(xí)算法各部分的耦合非常緊密,牽一發(fā)而動全身。

搞系統(tǒng)的人的思路是,我做一個系統(tǒng),定義好接口,保證接口正確,用戶用就可以了,不需要了解實現(xiàn)細(xì)節(jié)。畢竟你用操作系統(tǒng)并不需要了解文件系統(tǒng)格式,用數(shù)據(jù)庫并不需要了解一致性是怎么實現(xiàn)的。

但是這套思維用在深度學(xué)習(xí)系統(tǒng)上卻不合適。

其一,一個數(shù)據(jù)矩陣流過整個系統(tǒng),每一步的細(xì)節(jié)都可能對一百步以后的結(jié)果造成影響。而對于中間結(jié)果,你無法嚴(yán)格定義什么是正確的,一個好的算法不是N個好的部分的簡單疊加。Hinton就說過,Dropout看起來像個Bug,但是它提高了精度,所以是個“好bug”。

其二,因為深度學(xué)習(xí)算法復(fù)雜,需要控制的因素多,一個固定接口很難滿足所有用戶的需要。還不如把系統(tǒng)寫的簡單靈活一點,讓用戶根據(jù)需要可以很方便的自己修改。

反過來對搞深度學(xué)習(xí)的人來說,如果你不了解系統(tǒng)內(nèi)部細(xì)節(jié),當(dāng)你的算法效果好的時候,你并不知道到底是哪些因素導(dǎo)致了效果好??赡軗Q了一個框架,效果就不好了,而原因是你根本不知道的某個實現(xiàn)細(xì)節(jié)。當(dāng)效果不好時,你也不知道如何改進(jìn)。

另一方面來說,當(dāng)你需要實現(xiàn)一個新的算法的時候,經(jīng)常會發(fā)現(xiàn)框架現(xiàn)有的接口不能解決你的問題,這時候就需要對系統(tǒng)內(nèi)部的了解才能修改系統(tǒng)已實現(xiàn)自己的目的。

底層開發(fā)較難,上層更接地氣

上周開會時遇到了TAMU的胡俠老師,他介紹了他們組最近開發(fā)的一個自動機(jī)器學(xué)習(xí)開源框架Auto Keras。胡老師原話是這么說的:“做開源框架是非常有意義的事情,尤其是你的工作在短時間內(nèi)被很多人關(guān)注并使用是非常有成就感的?!?/p>

確實如此,很多業(yè)內(nèi)人士在逐漸把目光投向到更底層更接近“基礎(chǔ)設(shè)施”的方向上,比如自動調(diào)參、大規(guī)模機(jī)器學(xué)習(xí)、并行式機(jī)器學(xué)習(xí)。畢竟好的算法想要被更多人使用,就需要降低使用門檻,提供通用的框架。假設(shè)如果沒有Sklearn,估計做機(jī)器學(xué)習(xí)的人最起碼要少一半。如果沒有TF或者Torch,做深度學(xué)習(xí)的人估計也要少一半。

其實嚴(yán)格意義上來說,從提出算法,封裝算法,到應(yīng)用在現(xiàn)實數(shù)據(jù)集上是一個流水線作業(yè),是從上游到下游的工作。我的一個觀察是,做算法研究的很多人代碼寫的很糙,運行效率可能非常低。

舉個簡單例子,當(dāng)你展示一個簡單的K近鄰算法時,你可以寫成每次都進(jìn)行重新搜索,也可以先構(gòu)造一課K-D樹來降低時間復(fù)雜度。僅聰邏輯角度來看,前者和后者都是正確的,但效率可能相差不少。

這種現(xiàn)象造成了大部分前沿研究的結(jié)果不容易落地,因為代碼未經(jīng)優(yōu)化或者在實現(xiàn)時存在各種各樣的bug。我覺得一個非常好的突破角度就是研究如何高效實現(xiàn)各種傳統(tǒng)及前沿算法,從最簡單的向量化、并行運算,到更復(fù)雜的結(jié)構(gòu)設(shè)計甚至到大規(guī)模的并行計算。如果把底層框架做好,那么對于工業(yè)界和科研界都有很大的意義:

工業(yè)界可以快速嘗試前沿算法,在真實數(shù)據(jù)上驗證算法的可靠性及實用性。

科研界可以公平的對比前沿算法,防止科研造假。很多論文聲稱他們的算法是遠(yuǎn)超當(dāng)前的最佳算法(SOTA),但事實上可能僅僅是因為他們沒有正確實現(xiàn)SOTA而已。

我從去年起開始嘗試造一些小輪子,也做了一些小框架。這個過程中由不少全新的感受:

設(shè)計、實現(xiàn)框架很容易,發(fā)現(xiàn)原有算法中的不足,有助于激發(fā)新的點子。以基于K近鄰的算法為例,假設(shè)在實現(xiàn)時你發(fā)現(xiàn)整個程序效率受制于K近鄰部分,你就可以嘗試用K-D樹來加速,甚至替換掉K近鄰的步驟,用聚類來模擬這個過程。所以當(dāng)你了解算法的瓶頸時,你就可以提出新的有意義改進(jìn),反哺學(xué)術(shù)研究。

增強自己的實現(xiàn)能力,避免沉溺研究后的紙上談兵。近兩年最受關(guān)注的傳統(tǒng)分類方法要數(shù)陳天奇的XGBOOST,的確非常的好用。我認(rèn)為XGBOOST的成功要歸功于算法很早就被封裝成了成熟的工具庫,這是基于陳天奇老師深厚的系統(tǒng)設(shè)計和實現(xiàn)功力。我想過去十年肯定有一些很優(yōu)秀的算法蒙塵,只是因為它們的作者無法把它們封裝成成熟的輪子供大家使用,非??上А?/p>

更符合工業(yè)界的定位,為求職路加分。其實大部分情況下,工業(yè)界并不在意你發(fā)過多少厲害的文章,而更在意你是否可以把公司的需求落地。我自己的經(jīng)驗是即使是學(xué)術(shù)參會,也沒有多少人對我的水文感興趣,而更多的是聊我開發(fā)框架的經(jīng)歷,因為他們不僅聽說過可能還是使用者。

成就感??蚣艿氖褂谜哌h(yuǎn)比論文的閱讀者要多得多,當(dāng)你發(fā)現(xiàn)你設(shè)計的框架被全世界的人廣泛使用時,會有很強的成就感,會覺得自己為這個領(lǐng)域發(fā)展做出了一點點貢獻(xiàn),而不是僅僅寫出了一些這輩子不會再有人看的水文。

以上觀點主要在討論要不要嘗試學(xué)習(xí)開發(fā)框架,嘗試造出一些新的輪子?;氐秸},「底層框架」哪個「上層應(yīng)用」更好?我的觀點是這取決于你所擁有的技能:

底層框架:難點在于封裝和性能。比如如何設(shè)計API(接口),如何提高運行速度進(jìn)行優(yōu)化,如何寫好測試保證方法正確。

上層應(yīng)用:難點在于如何把已有的輪子用在現(xiàn)實數(shù)據(jù)上去,這涉及里很多現(xiàn)實的問題比如數(shù)據(jù)清理,比如理解如何正確的調(diào)用底層的功能。

一般來說,大部分人不適合寫底層。畢竟優(yōu)秀的框架已經(jīng)很多,而且對于系統(tǒng)架構(gòu)以及代碼優(yōu)化的要求很高,大部分人并不具備所需的知識。

而上層應(yīng)用就顯得更接地氣,可以加深我們對于數(shù)據(jù)的敏感度,擅長做上層應(yīng)用的同學(xué)也會是職場offer收割機(jī)。其實能夠做好上層應(yīng)用并不容易,這需要對于問題的深入理解。

換句話說,底層框架和上層應(yīng)用分的是不同的蛋糕,側(cè)重點各不相同。

從做研究的角度來看,發(fā)明一個算法其實不該是終點。作為算法的提出者更應(yīng)該自己動手實現(xiàn)自己的模型,畢竟酒香也怕巷子深。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    31493

    瀏覽量

    270076
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5512

    瀏覽量

    121452

原文標(biāo)題:做底層 AI 框架和做上層 AI 應(yīng)用,哪個對自己的學(xué)術(shù)水平(或綜合能力)促進(jìn)更大?

文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    AI框架歷史演進(jìn)和趨勢探索

    電子發(fā)燒友網(wǎng)報道(文/李彎彎)AI框架是一種底層開發(fā)工具,是集深度學(xué)習(xí)核心訓(xùn)練和推理框架、基礎(chǔ)模型庫、端到端開發(fā)套件、豐富的工具組件于一體的平臺。 有了
    的頭像 發(fā)表于 10-20 01:52 ?2304次閱讀

    開發(fā)者手機(jī) AI - 目標(biāo)識別 demo

    Network Runtime 神經(jīng)網(wǎng)絡(luò)運行時,作為中間橋梁連通上層AI推理框架底層加速芯片,實現(xiàn)AI模型的跨芯片推理計算。提供統(tǒng)一
    發(fā)表于 04-11 16:14

    RISC-V如何支持不同的AI和機(jī)器學(xué)習(xí)框架和庫?

    RISC-V如何支持不同的AI和機(jī)器學(xué)習(xí)框架和庫?還請壇友們多多指教一下。
    發(fā)表于 10-10 22:24

    AD10用什么快捷鍵可以在3D視圖中上層底層快速切換啊 ...

    AD10用什么快捷鍵可以在3D視圖中上層底層快速切換啊
    發(fā)表于 11-30 16:09

    Firefly支持AI引擎Tengine,性能提升,輕松搭建AI計算框架

    `Tengine 是OPEN AI LAB 為嵌入式設(shè)備開發(fā)的一個輕量級、高性能并且模塊化的引擎。基于ARM平臺高效的計算庫實現(xiàn),針對特定硬件平臺的性能優(yōu)化,吸取已有AI計算框架的優(yōu)點,設(shè)計全新
    發(fā)表于 08-13 15:58

    嵌入式Linux框架的相關(guān)資料分享

    從事嵌入式linux工作也幾年了,如果算上大學(xué)期間的自學(xué),那么也算是個工程師了。期間寫過底層bootloader、內(nèi)核的驅(qū)動和上層應(yīng)用程序。對于芯片內(nèi)部的模塊也在大學(xué)時候用fpga的verilog
    發(fā)表于 11-05 06:22

    應(yīng)用程序調(diào)用底層驅(qū)動

    本片主要講述了嵌入式linux操作系統(tǒng)的上層應(yīng)用程序是如何調(diào)用底層驅(qū)動程序的。
    發(fā)表于 03-14 15:00 ?0次下載

    Sensor 驅(qū)動框架的整體架構(gòu)詳細(xì)介紹

    Sensor 驅(qū)動框架的作用是:為上層提供統(tǒng)一的操作接口,提高上層代碼的可重用性;簡化底層驅(qū)動開發(fā)的難度,只要實現(xiàn)簡單的 ops(operations: 操作命令) 就可以將傳感器注冊
    的頭像 發(fā)表于 02-22 16:38 ?1.5w次閱讀
    Sensor 驅(qū)動<b class='flag-5'>框架</b>的整體架構(gòu)詳細(xì)介紹

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

    底層模型決定上層模型,在總線,設(shè)備,驅(qū)動的結(jié)構(gòu)體中你總是可以看到它們間接或者直接的包含了kobject結(jié)構(gòu)或kset結(jié)構(gòu)。
    發(fā)表于 05-15 17:04 ?658次閱讀
    驅(qū)動之路-設(shè)備模型之<b class='flag-5'>上層</b>模型

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

    1.本文概述對于esp32的玩法,基本上定位都是做上層應(yīng)用,樂鑫官方提供的ESP-IDF物聯(lián)網(wǎng)開發(fā)框架已經(jīng)十分的完善,做上層應(yīng)用按照這套框架進(jìn)行開發(fā),完全不必了解
    的頭像 發(fā)表于 07-06 10:38 ?1.3w次閱讀
    深入剖析esp32c3的系統(tǒng)<b class='flag-5'>底層</b>啟動

    華為基于昇騰AI基礎(chǔ)軟硬件平臺 助力企業(yè)的數(shù)字化和智能化轉(zhuǎn)型

    華為基于昇騰AI基礎(chǔ)軟硬件平臺,逐步打造完善了從底層硬件、到中間AI框架到上層應(yīng)用使能平臺的整個AI全棧解決方案。
    的頭像 發(fā)表于 05-26 14:28 ?2355次閱讀

    alsa底層框架系統(tǒng)配置與插件

    網(wǎng)上大多數(shù)是 alsa 底層框架、音頻驅(qū)動的文章,應(yīng)用開發(fā)的入門少得可憐。從業(yè)務(wù)需求出發(fā),摸索積累了一些 alsa 應(yīng)用開發(fā)心得。出此文以便后來者快速入門。
    的頭像 發(fā)表于 07-04 09:04 ?7883次閱讀

    AI框架歷史演進(jìn)和趨勢探索

    電子發(fā)燒友網(wǎng)報道(文/李彎彎)AI框架是一種底層開發(fā)工具,是集深度學(xué)習(xí)核心訓(xùn)練和推理框架、基礎(chǔ)模型庫、端到端開發(fā)套件、豐富的工具組件于一體的平臺。 有了
    的頭像 發(fā)表于 10-20 11:28 ?1036次閱讀

    ChatGPT:AI模型框架研究

      一、AI框架重要性日益突顯,框架技術(shù)發(fā)展進(jìn)入繁榮期,國內(nèi)AI框架技術(shù)加速發(fā)展:  1、AI
    發(fā)表于 03-29 17:06 ?9次下載

    AI開發(fā)框架集成介紹

    隨著AI應(yīng)用的廣泛深入,單一框架往往難以滿足多樣化的需求,因此,AI開發(fā)框架的集成成為了提升開發(fā)效率、促進(jìn)技術(shù)創(chuàng)新的關(guān)鍵路徑。以下,是對AI
    的頭像 發(fā)表于 01-07 15:58 ?121次閱讀