Deep Learning 的專家如此急缺,它難在何處?
不可否認,人工神經網路中有一些思想是很巧妙的。但正如SVM, Linear Regression, Decision Tree, Boosting Tree 一樣,他們都有各自巧妙的思想,但數學並不複雜。通過具象來深入理解其原理和調參也並不複雜。常用的技巧有,train, predict,feature engineering,bootstrap 等等。機器學習作為一種計算機科學分支,其數學概念的複雜度低於統計學。機器學慣用的是比較直觀的想法。有許多trick,例如loss function, kernel,activation function, back propagation。
那麼,機器學習,或者深度學習,難點究竟在哪裡呢?
1 是數學基礎的嚴格化?
2 是代碼結構的優化?
3 還是在於發現一些新的trick呢?
4 針對具體問題設計合適的模型,決定合適的參數?
5 是否人工神經網路過於複雜,難以用傳統手段分析,以至於我們還無法把握它工作的核心機制?求指教。
--
註:這個問題本身不錯,但是原版的補充說明容易把討論引向歧途。故稍作修改。
上來先亮明我的觀點:實際缺乏的不是Deep Learning的人才,而是可以實際解決問題的人才。而實際可以解決問題的人才不管在什麼時代都是稀缺資源。
看題主這問法,潛意識裡的一個概念就是數學不難的東西都是小兒科。我是一直鮮明反對這樣的觀點的。我一貫堅持的哲學是混哪個圈子請先用心體會這個圈子的研究邏輯,而不是拿著自己的邏輯到處judge。Deep Learning本質上是工程學科,而不是自然學科。這個性質天生決定這個圈子的人更加關注的是解決問題,或者換句話說如果必須要二選一,理論要為實踐讓路。這種研究的哲學和做統計等等看上去很相關的學科有著本質區別:一個理論再優美,bound證明得再漂亮然而實際不work在這些人眼裡並沒有太大價值。這背後本質的區別在於,統計或者理論機器學習這些學科為了有漂亮的理論不得不對現實世界做出大量簡化,而真正做問題的人,是不可能對現實世界做出任何妥協的。對於工程學科而言,只有很少數的方法,是可以在理論和實踐上高度統一的。
關於不同research這些的問題,可以參見我之前的兩個回答吧:
參加kaggle競賽是怎樣一種體驗? - Naiyan Wang 的回答
導師實驗室對學生影響有多大? - Naiyan Wang 的回答
另外一個方面,工程學科的本質使得Deep Learning更在意實際動手的實現。你說RCNN有什麼難的嗎?不就是生成個proposal再分類下嘛。Fast RCNN又有啥呢?不就是個可以BP的SPP嘛。我很不想說Idea is cheap這句話,但是Show me the results的重要性不言而喻。RCNN不是第一個用CNN做detection的paper,而是第一個用CNN把detection做work的paper,第一個證明CNN的feature不僅僅可以做分類的paper。單就這一點就足可以奠定這個工作在整個CV發展史上的地位。記得當初Ross在CMU給talk的時候,我當時的老闆做介紹的時候打趣了一句:He is the only man can make things work in computer vision. 這個評價在我看來,已經是頂級的了。以至於後來有人問我說你對自己期待是什麼樣子,我的回答就是做啥啥work。 XD
說了這麼多,最後來回答下問題:Deep Learning本身並不難,難的是你吃透問題,可以用Deep Learning的邏輯去思考你自己的問題,有針對性地設計模型;難的是你有分析問題和結果的能力,遇到負面結果不是抓瞎。另外說Deep Learning就是調參數的,那也是不會調參,調參也是要按照基本法的啊!
最後,如果你覺得可以達到上面的要求,歡迎私信轟炸哦~ 大量實習和全職崗位等著你~1. 沒有理論支撐。關於深度神經網路為什麼收斂,怎麼收斂,如何控制等等內容,都沒有成熟的理論證明,所有的結果都是停留在實驗階段,儘管有時候結果很好,然而糟糕的時候是真糟糕。
2. 計算資源。個人(土豪除外)很難負擔DL硬體的所有費用,至少需要一個配置不太差的workstation吧,如果做大一點,至少需要十台吧,然而並買不起。說白了就是沒錢。信科有錢,然而他們數學不好。。。
3. 時間成本。伺服器上訓練一個簡單的網路時間以天為單位,然後再調參數,結果沒出來,先把自己急死了。
4. 數據集。很難有能夠填充一個DNN信息量的數據集。不管從數據集質量還是規模來看,能用的數據集太少了,同時很少有人願意做這方面的工作。很多號稱是大數據、深度學習的東西其實都是炒作,好騙投資人的錢。
題主修改了問題的用語,因此我也附加一點正面答案。
修改之前的問題描述中的體現了一種理論至上的思維,然而這種思維恰恰導致了九十年代神經網路之冬。
科學是一個不斷發展的過程。深度學習在現階段對於其適用性的實踐工作還沒有走到盡頭,正是需要由實驗出發去尋找其適用性邊界的階段。等到足夠的實驗結果能夠說明其適用範圍,屆時理論工作自然會逐漸出現和完善。這個規律在別的學科中也存在,例如物理在18-19世紀也經歷過這麼一個階段,並且一定程度上天體物理、高能物理等在現在依舊處於這樣的階段。這一階段性特點導致了深度學習研究和應用大致兩方面的不同:- 偏離傳統以數學導向的、保守化的研究方法,培養人才變得困難。
- 實踐中對資源和代碼的需求變強,工程量不可同日而語
這兩方面共同導致了目前深度學習人才出產率較低的現實。
偏離傳統數學導向的、保守化的研究方法,培養人才變得困難
機器學習的傳統理論主要圍繞學習過程的泛化(Generalization)能力展開,然而有關泛化能力的理論都是以集中不等式(Concentration Inequality)為基礎的尋求」上界的上界"的一個過程,其結果是一種保守統計學的結果。這種保守的統計學結果對於驗證傳統科學實驗來提供可信區間也許是非常合理的,然而用於描述機器學習本身卻往往因過於保守而失去了對於模型可行性的合理探索。這種思路導致很長時間(90年代和00年代)機器學習停留在線性分類器的研究中。在這個過程中雖然有例如Boosting演算法、核(Kernel)方法等數學上非常漂亮的結果,然而不可避免地機器學習的應用性其實受到了不合理的限制。
深度學習在這方面有著截然不同的思路。儘管泛化能力是一個不可避開的話題,從事深度學習的人大多認為現有的泛化理論不足以描述模型實際應用時的平均狀況。在符合科學方法論實驗、觀察、假設、驗證、結論的過程前提下,深度學習的研究以追求實際測試數據集效果為核心,更為大膽探索可行的模型,並且從以神經科學、認知科學為代表的其它學科中尋求啟發。這一特點使得深度學習的建模過程成為一個「勇敢者的遊戲」,在許多可行的模型中尋找並驗證某個有效模型需要一定的創造性,這並不是每個人都做得到的。同時,泛化理論也需要進一步發展來更加貼切地解釋實際的應用。
深度學習更加關注「表達」的理論,即什麼樣的問題需要什麼樣結構的模型,以及什麼結構的問題適合什麼樣的問題。這一點的理論目前基本處於幾乎空白且初步開始的狀態。到目前為止從數學和哲學上我們對於表達的基本理解受制於對現有智能體(人類)的模仿中,並沒有什麼更好的啟發知識。這種困難可能最終同邏輯中的哥德爾不完備性定理(G?del"s incompleteness theorems)以及物理中的拉普拉斯幽靈(Laplace"s Demon)帶來的問題類似。如何在這樣的條件下敏銳地發現適合表達某些問題的模型因此成為一項十分考驗智力的工作。
理論的無效性和缺乏導致了在現有的教育體系下培養深度學習人才的困難。除了一些基本研究原則之外,我們沒有辦法確切定義和預測這個學科需要什麼樣的知識,以及這些方法能夠通過什麼方式應用到什麼樣的領域。並不是所有的人都適合在這種條件下進行研究和學習的。
實踐中對資源的需求變大,工程量不可同日而語
儘管深度學習的研究哲學弱化了對泛化能力可證明性的追求,但泛化能力終究是一個不可繞開的話題。機器學習的實踐在一定程度上是表達和泛化互相尋求平衡的過程。由於深度學習的建模更加傾向於對表達能力的探索上,因此我們需要更大的數據量使得泛化能力不成為問題。然而,「大數據」並不是一句空話。獲取百萬級別的樣本數量是一個非常巨大的工程挑戰,這在傳統理論為導向的研究過程中是無法想像的。這些挑戰即包括獲取大量的數據量對於自動化的要求,也包括處理實際數據過程中繁瑣的數據清理過程,更可能涉及緩存和分塊等優化方法的應用。這無一不對從業人員的工程能力提出了更高的要求。這一點的重要性曾經被理論學派所忽略,然而隨著研究的進展越來越多的人開始認識到它的必要性。
建模自由性的增強必然導致代碼自由度增加,其結果是對現有代碼重用能力的下降和對從業者更高的工程要求。為了實現一些嶄新的模型,我們可能需要從底層的數值計算出發去一步步把模型構建起來。在這個過程中又有許多的工程問題需要解決,例如數值穩定性(由於計算機表達實數是有限精度導致的各種問題,這是專門的學科)、優化參數的調整(由於優化往往是非凸的,實踐中並沒有足夠的理論指導)以及最終模型是否能夠在有效時間內完成運行。這些過程中任何一個環節出錯都會導致模型無法訓練。理論學者可能往往以一句「調參」來調侃這一過程,但是我相信沒有實踐過的人是無權評價這個過程中需要的數值知識、對問題的敏銳理解以及解決實際問題的耐心的。
由於數據規模大和模型的自由度較大兩方面的問題,訓練和尋找最佳模型可能是一個非常耗時的過程。這就導致深度學習的研究往往需要巨大的計算能力。科學發展的另一個基本規律是新的方法和理論往往需要在之前無法實現的規模中才能發現。例如狹義相對論的實驗需要物質運行超出常規的速度才能驗證,以及發現極度微觀粒子的運動不符合經典力學才導致了量子力學的出現。這種實際上需要不斷挑戰極限的過程體現在計算機學科中就是能夠在之前無法想像的計算能力和數據規模下完成任務。可惜現實中並不是所有的人都能夠有機會接觸到這種規模的計算力。
總之,如果把深度學習的研究過程比作模擬退火的優化過程,假設從業人員是一個隨機的初始值,這個目標函數的特點是只有緩慢的溫度下降才能得到有效結果。也許退火過程只是一個簡易的晶體理論,而實際的退火怎樣有效只有煉過鋼打過鐵的人才真正知道。Details are devils. DL真的把這句話用到極致。Debug起來非常耗時。來盤點下最近幾天我這個小白踩過的坑:
1. 深度學習開源框架非常多,然而各有各的bug,用的同時還要改bug。那感覺就像買了一個豬蹄,邊啃豬蹄邊拔上面的毛。
2.Debug非常麻煩,比如我腦殘的把batch_size/=2寫到data generator的while 1裡面了,於是每次epoch開始batch_size都在變。而發現這個bug要多久呢?反正我是第一次epoch之後才發現的,彼時模型已經跑了1個多小時了,於是改了bug從頭再開始train。
3. training過程非常揪心,感覺就像養了個孩紙,到哪都要把電腦帶著,隨時看一眼,萬一又blow up呢╮(╯▽╰)╭
還有各種diverge,各種wired loss graph都不想提了。像我這種小白千萬不要跳坑,從來都是被模型玩o(╯□╰)o做為前深度學習相關研究工作者,以第一人稱視角做個回答。
上面的回答大都是從技術的角度來回答的,這樣講都沒錯,但是我覺得另一個角度,即心理的角度可能才是更為深層次的原因。
我12年開始在T大進行深度學習相關研究,主要是做語音識別應用方向的研究。碩士階段滿打滿算好好做了兩年的研究工作,曾在語音信號處理領域國際頂會發了三篇文章。這個水平相對於業界活躍的大牛肯定是不值一提的,我講這個只是為了說明我對這個東西是有足夠了解的。
首先必須要澄清的一點是,深度學習專家急缺可能是事實,然而它難,並不是事實。就像題主說到的,相對於從前的許多機器學習方法,深度學習確實不需要什麼高深的數學內容,這一點是沒錯的。那麼如果是這樣,那麼為什麼研究的人(暫時)看起來沒有想像的多呢?
深度學習是一個學術概念,要搞清楚這個問題,就需要了解這個東西的學術背景。如同大家可能在其它新聞稿之類的地方能看到的,神經網路的概念幾十年前就有了,那個時候就已經火了一陣了,然而後來又被其它方法(比如SVM)超越,之後沉寂了一段時間,到大約11年左右開始爆發,到現在算是受到各界注意力匯聚的頂點了。
做為語音領域研究的工作者,對於上面描述的這些變化其實是非常敏感的。正是因為11年微軟在大規模連續語音識別上的突破性進展,(參見語音識別技術突飛猛進)拉開了國際上各家在深度學習上面軍備競賽的序幕,比如百度IDL的成立,谷歌收購Deepmind,DNNReserch等。當然這也是導致我毅然決然嚮導師要求從事這個方向研究的原因。
實際上現在深度學習的幾乎所有最重要理論早在八十年代就確定下來了,那麼為什麼這麼多的進展最近幾年才出現?現在我們已經知道,因為那個時候計算機速度太慢,無法支持足夠大規模的神經網路,而由於摩爾定律在一段時間內的作用,已經在幾十年內使得計算速度得到了數百萬倍的提升,而這數百萬倍的提升本身其實是一個持續而漫長的過程,所以計算速度方面的原因只能回的的是「為什麼它出現了」,而不能回答「為什麼它在最近幾年以如此密集的方式出現」。
如同理解經濟現象不要只講大道理,必須回到每個人實際面臨的選擇情景一樣,要回答這個問題就必須回到每個研究者所面臨的實際情景中。
假設在另一個時空中,我依然是我,依然陰差陽錯以語音研究開始了我的研究生生涯,只不過這時是20世紀90年代。經過充分的調研後,我發現大體上有兩種研究思路值得注意:一種叫做A,比較主流,效果很好,有一些現成的工具使用;另一種叫做神經網路,本身想法很有意思,但是受關注較少。這個時候看似有兩種選擇,其實我在這個情景中是沒有選擇的。
這是因為每個做研究的都是實實在在的人,他們有畢業,評職稱,評教授,生活的壓力。如果那個時空里的我堅定的選擇了進行神經網路的研究,當我們現在回過頭來看的時候,可能用1-2年時間,堅持跑完一個足夠大規模的試驗,也許能發現不一樣的東西。但是這又怎麼可能呢?導師會給你壓力,同行會給你壓力,學校會給你壓力,而且在這1-2年沒有任何結果的過程中,你不可能不懷疑自己,因為研究就是一個在黑暗中摸索的階段,現在回頭看認為曾經需要1-2年,在那樣的情景中是根本無法知道的,完全有可能1-2年搭進去什麼都沒有,3-4年還是什麼都沒有。這就好像男生追女生,女生奇怪男生追了一半為啥不追了,男生卻會覺得連十分之一都不到一樣。相比于堅持,放棄換一個方向才是更理性的選擇。
所以能夠撐過神經網路最黑暗時光的人,一定是極少數抱有絕對信仰的人,比如Hinton, Lecun, Bengio,他們憑藉已經取得的成就,在沒有來自其它方面壓力的時候,才能走下去。這就是為什麼這樣的人一定很少的原因。
然而回答到這裡只是事情的前一半部分。
一件需要意識到的事情是,神經網路,做為一種研究方向,有過這樣一種跌宕起伏的發展過程,為什麼其它理論就不能有呢?所以很有可能其它機器學習派別在未來再度超越的,這是完全有可能的,這就是科學。
所以,這就是為什麼即使到今天,深度學習依然只是一個機器學習分支的原因。依然有人不喜歡它,依然有人願意堅持自己的方向。這是完全值得尊敬的,也是合理的,因為搞神經網路的人曾經就是這樣的一幫人,才有了現在我們看到的深度學習的繁榮。在回答這個問題前我希望大家不要掉到此問題的邏輯陷阱里。BoBo你這提問的邏輯實在是挖坑讓人跳的節奏。我建議你把「為何DL專家這麼急缺」和「DL難在何處」拆成兩個問題。因為DL專家數量跟DL本身難度如何相關性並不高,而且也沒有因果關係。DL比理論物理簡單,不代表做DL的人會比做理論物理的人多。某個學科方向人才的多少,更多的是與其熱門的程度,應用的廣度,興起發展的時間長短有關。
你也知道,跟research類似,熱門話題總是容易發paper拿funding招到更多PhD。
幾個答案看到BoBo說DL沒什麼難度,就在那撕逼DL的理論到底難不難是不是足夠高大上……看得人心好累。工業界首先還是看應用效果的吧,理論之美什麼的不能轉化為實際應用也閑的,即便是不那麼美理論只要好用照樣會應用。從AlphaGo就能看出,其用的演算法方法基本都是比較成熟的,並沒有發明出多麼高大上的新理論。工業界因為需要保證可靠與穩定,所以會更多選擇已經被反覆驗證的成熟方法,所以最新的東西反而不會輕易使用。因為這個鄙視工業界用的東西不夠高大上,我覺得還是陷在科研的思維里了。即便是再完備的理論,在應用的時候很多細節還是要靠經驗和理論之外的東西。從理論到實際應用總是要有個過程。
就我個人的觀點,machine learning本身就是個toolbox,了解這些工具並不難,難的是如何用好這些工具做出漂亮的應用。現在缺的是能用好DL解決問題的專家。這類人不僅要懂DL,還要了解需要使用DL的這個領域。了解理論,並不代表一定會理論的應用,一如Dirac造不出量子計算機。
最後想說,個人真的是非常不喜歡學術圈裡唯新穎和難度最高的態度,鄙視應用和工程根本不利於理論發展。沒有工業進步,做理論照樣瓶頸。我bf做高性能計算,給我講了一個例子:當年一群人搞出一類並行演算法覺得高端的不得了,結果出來了GPU把他們演算法全秒了……今天我們在這裡愉快地玩machine learning而不用像早期程序員那樣小心分配內存節約算力,真的是工業發展的功勞。學科之間的斷層,基礎數學/應用數學/物理學/大科學計算/計算機系/業界程序員之間長期積累的斷層迎來了總爆發,造成了現在的AIA(AI Administrator,類似DBA)緊缺。
當數學系退化到基礎數學/應用數學老死不相往來、物理系退化到Mathematica和Matlab、統計系退化到Python和R、CFD退化到FORTRAN和ANSYS,各自方言不通的時候,計算機系和業界程序員除了調參還能得到多少理論支持?現在這一天遲早會發生,沒想到這麼快就發生了。
不僅Google有新玩具,SpaceX也有新玩具
歐拉方程求解是否比N-S方程更加困難?如果是,為什麼? - 浪客的回答
而且與以往情況不同,深度學習需要大工業級別的物質基礎才能良好運行。物理系轉行程序員通過選修雙學位和自學,進行工匠和遊俠式單打獨鬥的歷史結束了。
火藥和機床發明之後,中世紀經院哲學和小作坊過時了、搞科舉的王朝被徹底擊潰。深度學習這一代兼具軟體複雜度和數學高深度的的大型演算法發明之後,現有大學制度(和App小公司?)也過時了。
這是真正的第四次工業革命,人類卻接受不了,像當年最後的工匠和武士一樣把它當妖魔鬼怪。一面拚命找「第四次工業革命」、「工業4.0」的項目投資,一面擔心被AI淘汰,而不能利用其機遇。
現在怎麼辦?估計在大學反應過來之前,各個互聯網巨頭會像十幾年前DBA緊缺的時候搞MCSE、CCNA一樣搞出一套認證和教材,再結合數學物理的MOOC課程搞出一套商業模式,連伺服器算力和課程一起打包收費。當年的名牌大學可以不鳥這些技校生的認證,這次做不到了。
人類根本的競爭力要靠自己、靠教育。
無論AI的挑戰還是中產階級生養不起、民族出生率不平衡之類社會問題,都屬於這個問題的衍生物。至於把教育當作階層劃分和流動的工具而犧牲教育本身的效率,更加在作死。解決了教育效率問題的社會,衝出地球開墾太陽系。解決不了教育問題的社會,在停滯中走向半封建半殖民地、族群撕裂和戰亂。
深度學習是一門綜合性的偏工程的學科,除了紮實的基礎知識之外,更多的是需要極強的工程能力,對問題理解、抽象和建模的能力,以及綜合運用多種工具把問題解決掉的執行力。同時,深度學習興起的時間比較短,很多人才剛剛熱門,成為專家還需要一段時間,從而導致當前深度學習 人才緊缺的現狀。
首先是數學基礎,雖然這塊的要求並不需要學的很深入,但基本的了解還是要的,如果能夠較為深入的學習,在真正做分析和工程時的幫助也會比較大。如果是在校生,並且有志於深度學習方向,多花點時間在這上面是十分值得的。
1. 線性代數,矩陣和張量的計算
了解標量、矢量、矩陣和張量,對相關的運算(比如加法、乘法、轉置等)比較熟悉,知道特徵分解和奇異值分解是怎麼回事等等。如果有時間,啃點書總沒有壞處,比如Linear Algebra (豆瓣) ,和矩陣計算 (豆瓣) 。這兩個公開課 可汗學院公開課:線性代數 和 麻省理工公開課:線性代數 ,有空看看也沒啥壞處
2. 微積分
微積分應該是大學理工科必須的課程吧,求導是微積分裡面最基本的概念了吧,在深度學習里也是基礎之一,對其了解是必要的。如果有時間,還是啃書,柯朗的兩卷本微積分和數學分析引論(第一卷) (豆瓣) 和 微積分和數學分析引論(第二卷) (豆瓣) 貌似是很經典的,有興趣的可以啃啃。 麻省理工學院公開課:單變數微積分 和 麻省理工學院公開課:多變數微積分 這兩個公開課講的不錯的,偶當年在地鐵上看下來的,也是不容易啊。
3. 概率,統計和隨機過程
幾個基本的分布(如高斯分布,指數分布等)是需要了解的,條件概率之類的也得知道吧,貝葉斯是誰還是得認識一下的,大數定律和中心極限定理能夠熟悉熟悉也是有幫助的,如果能夠認識下馬爾科夫,想來也是有幫助的。手頭的書翻了下,貌似有 概率論沉思錄 (豆瓣), 還有 隨機過程 (豆瓣) 。網易公開課這類課程比較少啊,搜索了下,只有 可汗學院公開課:統計學 這個看起來有點意思(沒看過,找個時間瞧瞧去)。
第二塊是機器學習的基礎知識。深度學習是機器學習的一個分支,由於在圖像識別語音識別機器翻譯等多個地方的效果卓越而流行起來的。總體上,線性回歸是機器學習里最基本也是最常用的演算法,直至2015年的時候,Google,百度等互聯網公司在廣告及其相關項目中所使用的最多的演算法依然是線性回歸,簡單,可解釋和高效率是它的最大的優點。其他諸如過擬合和泛化,training,validation和testing等機器學習中最基本的概念也同時是深度學習所必須的。其他諸如貝葉斯網路,svm,nn,k-means,mcmc,sgd,熵,分類和聚類,監督和無監督等演算法和概念在大部分機器學習的書籍中都或多或少涉及到。大部頭書籍Pattern Recognition And Machine Learning (豆瓣)是最經典的書籍(沒有)之一,斯坦福的經典教程UFLDL教程 - Ufldl 涉及到無監督學習和深度學習(與時俱進的比較快), 另外,公開課加州理工學院公開課:機器學習與數據挖掘 看看也會有所收穫的。
1. 數據,training, validation和testing
2. 線性模型,classification和regression
3. 貝葉斯網路,SVM,馬爾科夫隨機場
4. cluster,k-means
5. 神經網路
第三塊是編程。紙上得來終覺淺,絕知此事要編程。在一個美帝總統奧巴馬都學習編程,美帝監獄都開編程客的年代,一個搞深度學習的編程水平太差,也說不過去吧。同時,深度學習在目前階段,還是需要很大的計算力來支持的,對於稍微有點規模有點實用的場景,分散式和GPU都是需要涉及到的,編程語言的話,C/C++肯定會涉及,Python估計也無法避免會遇到,java和lua等其他語言會一些則更好,至於世界上最好的語言PHP不會倒無關緊要。這本書 深入理解計算機系統 (豆瓣) 有助於從各方面了解計算機,(特別是非計算機專業的)啃完後會受益匪淺。C和C++的書籍多如牛毛,C程序設計語言 (豆瓣) 和 C++ Primer 中文版(第 5 版) (豆瓣) 這兩本書是我的偏好(想當年啃下後一本的時候,還是有點成就感的)。如果能夠把 Learning Python (豆瓣) 和 SciPy and NumPy (豆瓣) 啃完,用起Python應該是能夠得心應手的。至於cuda(進行GPU計算的),官方資料(https://developer.nvidia.com/cuda-zone )十分豐富,有需要就去看看好了。
第四塊是深度學習(這個名字有點奇怪就是,不過都這麼叫了,熟了就好了)。在不熟之前還生著的時候,深度學習有另外一個名稱叫神經網路(不是神經病網路
哦),貌似上個世紀後期的時候就火過一陣,奈何先驅約等於先去的意思,那個時候由於計算機的能力問題,沒搞出啥好的效果,讓位於一堆其他的機器學習演算法。
直到201×年,突然間,Hinton,Bengio,LeCun等人依靠強大的計算力讓多層神經網路能夠很好的運行,並且效果好的令人髮指,於是乎大家
才想起,原來神經病還能這麼玩,然後大家就high起來了。wikipedia上dl的條目Deep learning 編輯的挺不錯的,很適合作為入門材料,了解一下基本概念。LeCun,Bengio和Hinton合作的Nature的Review: Deep learning(https://www.cs.toronto.edu/~hinton/absps/NatureDeepReview.pdf)應該是必讀的文獻之一吧,另外Bengio的Learning Deep Architectures for AI(http://sanghv.com/download/soft/machine%20learning,%20artificial%20intelligence,%20mathematics%20ebooks/ML/learning%20deep%20architectures%20for%20AI%20(2009).pdf ) 和Schmidhuber的Deep Learning in Neural Networks:An Overview(http://arxiv.org/pdf/1404.7828v4.pdf)也是了解這個領域的好文。不想看論文的,可以看看這個https://www.youtube.com/channel/UC9OeZkIwhzfv-_Cb7fCikLQ (基礎+框架介紹)和 這個 https://www.youtube.com/playlist?list=PLE6Wd9FR--EfW8dtjAuPoTuPcqmOV53Fu(牛津大學的課程,國外大學的課程真是與時俱進,不知道國內大學是否有開課?)
接下來是不同領域的應用,印象中,深度學習首先是在圖像識別和計算機視覺中火起來的,這篇ImageNet Classification with Deep Convolutional Neural Networks(http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)是dl在計算機視覺中應用的經典文章之一。自然語言處理方面,當年word2vec(https://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf,)剛出來的時候,讓一小撮土鱉大吃一驚,原來nlp還能這麼玩。而這次alphaGo(Mastering the game of Go with deep neural networks and tree search: http://willamette.edu/~levenick/cs448/goNature.pdf)則讓超越了碼農群體之外的一大撮人大吃一驚,原來,圍棋也有另一種玩法。
了解完了之後,就開始寫代碼。早些年呢,需要從0開始一把鼻涕一把淚的搬很多磚才能搞出一個能夠work的東西。後來,不知道何年何月為了啥目的,各種開源框架紛紛冒出,現在隨便花店心思,就能過搞出一個忽悠人的東西出來。這麼些個 GitHub - BVLC/caffe: Caffe: a fast open framework for deep learning. GitHub - tensorflow/tensorflow: Computation using data flow graphs for scalable machine learning GitHub
- Theano/Theano: Theano is a Python library that allows you to define,
optimize, and evaluate mathematical expressions involving
multi-dimensional arrays efficiently. It can use GPUs and perform
efficient symbolic differentiation. 和 GitHub - torch/torch7: http://torch.ch 以及更多的各種框架,就任君選擇了。至於哪個好用,誰用誰知道。號稱碼神的jeff dean在韓國漢城的演講中(https://www.youtube.com/watch?v=QSaZGT4-6EY),穿著那件TensorFlow的t恤,看起來還是蠻不錯的。其實我蠻想知道的,AlphaGo是不是用tersorflow的?如果不是,為嘛不用?
第五塊是領域知識,隨便列舉,有空的時候整理一下我自己做過的一些內容。
比如alphago,aja huang是業餘6段的水平;
比如之前有個同事做色情圖像識別,貌似天天看圖片看到吐啊;
比如想在金融領域玩玩的,對金融也是得有所了解的
其他內容,貌似只能寫寫段子的部分了
問題的理解、抽象和建模
執行力
勤奮
上述幾個方面要(都)做的好的,算算人數也不會太多。而能夠都做的好的,還不一定去干深度學習這事,比如有些人抱著白富美去做人生贏家去了,有些人遊山玩水到處自拍顯擺去了,剩下的也就寥寥無幾了。
看到這裡的,數學還不錯,編程水平又比較高,人也聰明並且勤奮的,如果還閑著的話,歡迎私信我啊。
寫著寫著變成一個教程了理論上的恰當解釋需要高級的數學工具(我聽說有人在用代數幾何搞的),而且到現在也沒有好的成果,所以大家發明新的網路結構或者 trick 的時候,最開始其實是有點隨機和盲目的,不夠痛快。不過這並不妨礙應用,只是經驗的獲取變得更加困難了。面對具體問題的各種特徵,選擇正確的網路結構,合理切入,科學調參,以最快達到最佳效果,這就是 DL 里的學問,是有科學規律的,需要去領悟並形成相應思維。
工程上,由於龐大的硬體資源需求,可以搞大新聞的應用被大公司和高校壟斷。另外,開發一個好的 DL 庫既需要對演算法的理解,又往往需要豐富的分散式系統、GPU 和軟體工程方面的經驗,門檻不低。現在大家可以隨便調個庫跑一下完全是他們的功勞。
================================================
下面我要批判曾老師一下:
而機器學慣用的都是一些很intuitive的idea。有許多trick,例如loss function, kernel,activation function, back propagation。可是這些東西和狄拉克的bra, ket 希爾伯特空間相比,根本就是中學數學。。
kernel 和希爾伯特空間相比?曾老師你真不是來釣魚的,還是不小心暴露自己的淺薄了解了?
kernel 可是和 reproducing kernel Hilbert space 一一對應的。而 Moore–Aronszajn 定理和 representer 定理則說明了 kernel 在什麼樣的問題里可以用,為何可以這樣用。
有你要的數學吧,這已經是最簡單的證明了,learning theory 裡面精彩的東西多得是。
你還是要學習一個,不要想搞個大新聞。
-
是時候放出這張圖了。
「Talk is cheap. Show me the code」
-
我認為深度學習人才急缺只是個時間問題。深度學習真正從學術界走到人們的視野中,主要是通過ImageNet競賽和最近AlphaGo的普及,之前對深度學習抱有懷疑態度的人大有人在。參見:
這一波人工智慧泡沫將會怎麼破滅? - 深度學習(Deep Learning)
深度學習重新在學術界火起來大概可以追溯到09、10年,人們給與深度學習發展的時間還太少了。只要再多一點時間,相信會有越來越多的人加入深度學習的大潮。
以我個人的經驗來看,深度學習其實入門的門檻並不高,只要對機器學習演算法有較好基礎都是容易轉行過來的。難處在於這是一門非常具有應用性的學科,讀一百篇論文可能還不如自己實現個ConvNet和LSTM理解得更深入。而硬體是其中很重要的一個制約因素,跑個深度學習的實驗可能往往需要多台機器或者GPU,而很多入門者可能並不具備這一基本條件。
有必要糾正下深度學習就是調參的說法。我不否認調參的重要性,但是單純靠調參是遠遠不夠的。調參黨可以自己去讀讀近些年來在NIPS, CVPR, ACL, EMNLP等各領域頂級會議上發表的deep learning相關論文(arxiv還沒發表的不算),可以說絕大部分論文要麼是在模型上有所創新,要麼是把深度學慣用在了一個全新的問題上,單純靠堆機器堆深度搭框架來提高性能的論文我還沒怎麼讀到過。比較贊同 @Naiyan Wang的說法,無論是深度學習,還是機器學習或者其他演算法也好,本質上都是對問題的深度理解從而解決問題。工具可以有千種萬種,但是問題本質不會變。
一方面,我覺得大家完全沒必要把深度學習神化,它和以前出現的很多學科和方向一樣,都只是計算機科學用於解決問題的一個方法,沒有那麼難也沒有那麼遙不可及;另一方面,做理論的也沒必要去鄙視深度學習調參的做法,這本來就是一個偏應用的學科。最後,先飛的鳥兒有蟲吃,對深度學習有興趣的不妨早點出發。難點在於,Deep learning 就是靠自身的複雜度砸開複雜的問題的,而人們最擅長的,分層抽象降低複雜度,對它毫無辦法。而計算機科學最厲害的地方就是可以直接蠻力砸開複雜的問題。
再舉兩個例子:
- 在有量子力學計算之前,沒有人相信 HArF、這種物質可以合成出來
- 在有了計算機輔助設計之前,像大褲衩這種建築沒人敢去修
放心吧
今年穀歌算是利用阿法狗徹底炒熱了深度學習
未來肯定會成為熱門專業的
這個領域,研究生最多也就把別人代碼給運行出來
真要自己能設計的,可能還是要有博士級別才行
現在不少研究生,其實連小論文都不需要發的
另外有一點,這個還是稍微需要一些硬體條件的,即便你想快速測試一個idea的可行性,顯卡起碼也要配置到gtx980ti這樣子,當然titan x以及tesla這些更是常態了
所以,比起一般java和c語言這些,乃至android和ios這些,門檻可能會稍微高一些
而且,畢竟比較偏理論,也需要大量的數據。對一般人來說,他們根本沒有條件去搞來這麼多的數據,有這個條件的,主要也是一些大企業(或者學術機構)。所以BAT裡面最近深度學習不也很火,因為確實起到了效果。。。不是虛的東西
找不到工作的路過。
你聽誰說稀缺了??我覺得難點目前還不到數學,因為我們連模型為啥能工作的直覺都不靠譜,更不用談數學上的。 深度學習新進的技巧或多或少都同以前的某些理論工作相聯繫,如果以前的理論都有瓶頸,後期移植到深度學習也是曇花一現。 還有一些技巧是針對某類問題,數據提出的,這種技巧,個人覺得硬要抽取其數學或者本質,可能帶有狹隘性。
至於為何缺乏人才,大抵,深度學習的學習過程目前很難像普通程序員一樣在野完成升級,這個行業需要相當的資源和環境才能過門檻。
直白點這麼說吧,即便我擁有500x 酷睿,80x k20gpu的vip許可權,提交任務從來不用排隊,以及5年粒子物理的數學功底,3年計算物理的數值經驗,開源軟體,計算化學訓練出來的代碼能力,我也不認為我能1年內能轉行,獲得這方面較好職位的基本要求。
做下去,就知道復現高手的結果都相當費功夫和經驗的,論文定方向就要時間熬,還不說大量細碎的benchmark測試。
該裝的逼,各種大牛都已經裝過了,相信這就是個題主釣魚貼,我也就是個掃地工,不是什麼大牛,不怕被釣,這裡就說幾點:
1.深度學習這個概念在應用和理論的角度來看,都是一個很大甚至是太大的名詞,大得像「人工智慧」一樣,不同人的理解和定義都不同(因為正在或者已經從事的細分領域不同),所以要直接回答題主這個問題並不容易,所以下邊我也會針對性做一些假設,希望看的人不會覺得我以偏概全。
深度學習之所以最近的年頭火起來是因為互聯網火起來了,能反應群體行為模式的數據的來源多了,獲取成本更低了,GPU的軟硬體架構也由英偉達發展起來了,應用數學基礎合格的程序員(一般是由在學校里做研究的研究生或者博士生),他們有條件用公費買得起這樣的研究設備,進行嘗試,這都是深度學習的發揮的幾個有利的條件,但也就是因為這幾年才火起來,之所從事的人少,所以人難招是很正常的,任何一個IT行業的細分領域都有這樣的規律,嵌入式是這樣,移動App開發也是這樣,但過幾年就不一定了,當前,前提是深度學習真的發展出一個生態,火得像嵌入式開發和移動App一樣需要那麼多將抽象的概念結合不同行業進行實例化的應用型碼農。
然而這些研究生需然數學基礎合格,也有兩三年時間在實驗室里跟導師混幾個項目,但是做的項目不一定都是有工程實用性的,大家都知道,要做一個真正的產品,只有核心的功能是遠遠不夠的,偏偏深度學習又不是一個簡單的東西,他需要參與項目的人有足夠全面的工程知識來配合完成(能夠以團隊的形式存在的,都已經在不遺餘力的以各種風少的理由去找錢的了),所以剛剛因為火起來而被培養起來的這些研究生,又因為他們原先都沒幾行代碼的經驗(不是所有人,僅指大部份),所以不一定能馬上跳到企業里找到合適的位置,大多都還是要靠博士這一兩年再深造一下。
總的一點就是現在培養的人才數量太少,所以在這個小的基數當中,產生的良好的(注意不是合格也不是優秀)人才就少之又少。
2.原有的非應用數學派程序員平時天天在媒體圈裡聽大數據,天天聽深度學習相關的新聞,感興趣,也想搞搞看,但是最後發現他們自己數學沒幾個人夠硬的,所以很多程序員碼農朋友被攔住了。
3.另外,深試學習依賴運行的基礎硬體,現在大多數人用的GPU就不是唯一的選擇,這點也意味著硬體的發展還不完全成熟透(給各位分享一個怎麼判斷一個所謂的大牛是否正在業內的小技巧,那就是看這個人對從事硬體加速生態發展這一塊的事情了解得多與少,而不是那種僅僅懂得一點點基本知識(深度學習能幹什麼與不能幹什麼),就用傳統的產品經理型的套路去裝逼吹牛逼的人,在我回答的當下這個時間點里,大家拿著我這個觀點去判斷一下知乎里的各位裝逼的大神,秒現,當然,即使這個人知道得看起來特別多,也不一定是大牛,但是如果不知道,可以判斷這個人基本上就是道聽途說或者只是做過一兩個深度學習里的Helloworld而沒有真正深入去了解過實際的商業的問題的人)。
搞深度學習的入門,不像搞安卓App這樣傻瓜式的簡單(此處沒有針對搞安卓App開發的朋友之意,只是說他開發傻瓜式是因為封裝好,資料多,但實際上新手要入門容易而精通都是不易的),安卓App應用型程序員(舉個例子)雖然是多,但能進來的應用型程序員又是少了,這也算作是和第2點差不多吧。
4.拿讓你入門(理解什麼是深度學習)的數據集容易,但是要拿到真正的項目的能以之為驅動導向的數據集,這個要看機遇,這是一個門檻。
總上所述,原因主要還是門檻問題和發展階段問題。
外附兩個和本答題無關的回答,重口味,帶有嚴重的個人觀點,所以請小心慎入:1.這一波人工智慧泡沫將會怎麼破滅? - vbhome 的回答
2.知乎上有哪些深度學習(Deep Learning)專家? - vbhome 的回答
常用的技巧有,train, predict.....
那賽車常用的技巧應該就是油門,剎車了吧。。。
世界上沒有什麼優化目標是在NN中多加一層layer不能解決的。
如果有,那就兩層。
難在沒錢買機器。
一卡車GPU不是說買就能買的。
Deep Learning有點像中醫,而大家之前偏偏是學西醫出身的。
推薦閱讀:
※如何看待人工智慧領域的很多專家認為「人工智慧將對人類存亡造成威脅」的觀點?
※如何評價《羅輯思維》第 115 期對謝熊貓君翻譯的關於人工智慧的文章的重新演繹?
※自然語言處理在 2017 年有哪些值得期待的發展?
※「人工智慧」這個詞是不是被計算機科學與技術方向的人濫用了?
※支持向量機(SVM)是什麼意思?