這個年代,不怕你是大牛,就怕大牛還會寫文章。
做爲AI100智庫專家,智亮老是能在滔滔不絕中,讓人深刻淺出地學到一堆堆乾貨,掏心窩子的乾貨。php
多年的實戰經驗,讓智亮不管是在知乎解答,仍是各路博客上,都是大神同樣的存在。html
就在前幾日,跟智亮聊起來AI入門這個話題,他的滔滔江水延綿不絕實在是震驚了我,太實用了。再三要求下,智亮答應將其多年心得寫出來,這一寫就洋洋灑灑近萬字,不管是他對將來豪情萬丈般的預判,仍是對於實戰細緻入微的解析,仍是一番苦口婆心的勸導,全在裏面不吐不快了。python
這篇文章主要解決三個問題:git
1.開發人員是否應該轉向機器學習?程序員
2.須要什麼條件才能轉向機器學習?github
3.應該怎麼開始機器學習?算法
末了,智亮說,寫完有一種身體被掏空的感受。數據庫
看來是真下了功夫啊!ubuntu
如下,enjoy。windows
做者 | 智亮
編輯 | 鴿子(rgznai100)
曾幾什麼時候,咱們讀着比爾蓋茨的傳記,感嘆他大學時就能徒手寫OS的天才同時,也不由唏噓:如今寫一個OS又哪是幾我的幾臺電腦能搞的定的。
喬布斯的車庫創業,雖然聽着比雞湯還暖心,但是那個時代畢竟已通過去了。留下的,只有無數掙扎着從C++/Delphi轉型的資深程序員。
互聯網崛起的時代,馬化騰帶着幾我的就開發出了OICQ,造就了現在偌大的騰訊帝國。
智能手機爆發的時代,隨便山寨一個遊戲就能賺得盆滿鉢滿;而如今,即便用心作了一個APP,推廣費用至少也是百萬級吧。
互聯網(以及移動互聯網)時代,已經接近尾聲,草根創業變得無比艱難。
表明着互聯網時代的JAVA程序員們,開始日落西山;而表明着移動互聯網時代的Android/iOS程序員們,應該也感覺到就業形勢的日趨嚴峻吧。
每一波浪潮的到來,都意味一片無人佔領的藍海,也意味着衆多新成長起來的巨頭,還意味着什麼?意味着大量的人員需求,供不該求的開發市場,以及從業者的高薪與衆多的機會。
咱們最常作的事情是目送着上一次浪潮的餘波遠去,感嘆本身生不逢時,卻沒有意識到,下一波浪潮已經到了咱們腳下。
百度前首席科學家吳恩達曾經說過,在他看來,機器學習對於世界的改變,能夠與電能對於世界的改變相媲美。而更多的人,已經開始用「第四次工業革命」來預言人工智能帶來的產業革新:
前三次工業革命,讓人類擺脫了重體力勞動、精細體力勞動、簡單計算勞動。而這一次,伴隨着人工智能而來的機器學習,極可能讓人類沒必要在簡單思考判斷類勞動上消耗大量人力資源。
好比,目前僅在中國就有出租車130萬輛,載貨車輛超過千萬,也就是說,天天以「駕駛」做爲主要職業的人羣就達到千萬量級。若是自動駕駛得以普及,至少在中國就有千萬人被「釋放」,也就是說,老司機們得從新學一門吃飯的手藝了。
再好比安防領域,全國天天坐在各類監控屏幕前的人(沒錯,就是每部諜戰/犯罪類電影裏都會被抹脖子的那個職業)也接近百萬。但是,當智能攝像頭出現時,監控人員將敗給在0.1秒內就會判斷反常局面、識別數萬人臉的AI;
還有視頻網站鑑黃師,將輸給沒有荷爾蒙卻能每秒檢出數百段色情視頻的AI;
同聲傳譯員會敗給沒有延遲、而且能夠同時用幾十種不一樣語言跟人聊天的AI;
還有網文篩選編輯、快遞地址分揀員等等,這些咱們據說過或者沒有據說過的職業,這些消耗着無數人的時間和精力的職業,都將一一被AI戰勝。
這不是簡單的失業和再就業的問題,而是一次全新的社會結構大調整,一次對咱們習覺得常的生活傷筋動骨的革新。
就在機器學習砸掉這些人飯碗、逼迫他們投入到其餘的工做時,咱們的社會,已經開啓了新一輪的歷史性革新。
讓咱們細細來個例子。
自動駕駛,這是巨頭公司投入了大量精力的領域。不少人直觀的感覺是,之後買輛車,開起來可就不用那麼累了。
的確如此,但並不是這麼簡單。
讓咱們深刻這個問題。
若是全部車輛都變成了自動駕駛,你真的還須要買一輛車嗎?
咱們購買車輛的時候,買的不是四個輪子加一個發動機,而是購買「隨時隨心快速出行的能力」,使咱們沒必要忍受公交太擠、有急事打不到車、偏遠地區去了回不來等等困擾。
而在自動駕駛的狀況下,司機交班、扎堆、偏遠地方打不到車,網上叫車沒人接單等狀況,還會存在嗎?如此,咱們又何須每一個人買一輛車,忍受路上堵、停車難這些困擾呢?
到時候,大量的無人車在各類巨型停車場靜靜地趴着,只要有人下單,幾分鐘後,就會有一輛無人車來到你面前,任你驅使。
讓咱們再沿着這個思路想深一些。
當無人車充斥咱們周圍時,這些車輛是否必定有必要設計成五座?也許根據實際運營數據的分析,單人車輛、二人車輛會成爲無人車輛的主流,不只出行更加便捷,減小浪費,還能大大減輕交通流量壓力,緩解擁堵。
將來,頗有可能連交通擁堵也沒有了。設想,當全部車輛的實時情況,都經過網絡彙總到管控機構,管控機構便能根據實時路況,與車輛遙相呼應,車輛自動規劃更爲合適的路徑,自動緩解交通壓力。
不妨再想一想,當智能駕駛足夠可靠的時候,如今的交通路口紅綠燈機制是否還有必要?甚至說,如今的一切交通規則是否會有一個巨大的改變?
這還僅僅是針對一項技術開出的腦洞,就已經足夠改變現有的整個出行結構和出行規則。將來人工智能的每一項技術,都是對所在行業的完全改寫。至於能改寫成什麼,恐怕沒有人能說得清楚。
惟一能夠想象的是,咱們在不須要學習外語,不須要考駕照的同時,會須要更多的機器學習專家和相關開發人員。
其實,上面這些事情,身在IT圈中的人,應該都有着直觀的認識。最近這兩年,談論機器學習,神經網絡的人愈來愈多,而各類「人工智能」相關的消息也是鋪天蓋地,大有「不入圈就淘汰」的洶洶勢頭。
但與此同時,各類不明覺厲的言詞也嚇退了不少非科班出身的開發者。
什麼叫卷積神經網絡?什麼叫凸優化?是否是還要回去重讀高數,線代,機率?那麼一大堆公式,感受徹底看不懂啊?據說沒個名校博士出身都搞不了這個?
不光是普通程序猿這麼說,文藝的程序猿和……額,高大上的程序猿也都這麼說。
我說,呵呵。
在好久之前的一篇知乎回答中提過,做爲開發人員,機器學習界在我看來會分紅這麼幾個層次:
➤ 1. 學術研究者
他們的工做是從理論上詮釋機器學習的各個方面,試圖找出「這樣設計模型/參數爲何效果更好」,而且爲其餘從業者提供更優秀的模型,甚至將理論研究向前推動一步。
可以作到這一步的人,能夠說百裏挑一,天賦是繞不過去的大山,機遇和努力也缺一不可。
➤ 2. 算法改進者
他們也許沒法回答出「個人方法爲何work」,也許沒有Hinton,LeCun那樣足以載入史冊的重大成果,可是卻能根據經驗和一些奇思妙想,將現有的模型玩出更好的效果,或者提出一些改進的模型。
這些人一般都是各個機器學習巨頭公司的中堅力量或者成長中的獨角獸,使用什麼模型對他們來說也不是問題,根據所處的環境,一般都有固定的幾個選擇。
在這個層面,insight和idea纔是重要的東西,各類工具的區別,影響真的沒那麼大。可能會讓一個結果早獲得或者晚獲得幾天或者幾周,卻不可能影響「有沒有成果」。
➤ 3. 工業實現者
這些人基本上不會在算法領域涉入太深,也就是了解一下各個算法的實現,各個模型的結構。他們更多地是根據論文去復現優秀的成果,或者使用其餘人復現出來的成果,而且試圖去在工業上應用它。
分好了類,來講正事。
想要成爲一個機器學習開發人員,究竟須要作些什麼準備?到底如何才能從一個C++/JAVA/Android/iOS程序猿成爲一個機器學習開發人員呢?
答案只有一個:
做爲程序員,讀十遍書不如跑一遍程序,與其花費大量的時間去啃書本,不如親手完成本身的程序並運行它。咱們在寫出代碼的同時,就會了解到本身還有哪些地方不夠清楚,從而有針對性地學習機器學習。
基礎知識
固然,勿在浮沙築高臺(對這句話眼熟的請舉手),有一些基礎的知識仍是須要掌握的。例如在計算機視覺領域,根據咱們團隊內部培訓的經驗,爲了可以獨立進行機器學習的開發工做,最好首先完成這麼幾項課程:
➤ 入門,瞭解概念,算法基礎:
Coursera 機器學習課程 - by 吳恩達
Machine Learning Coursera
https://www.coursera.org/learn/machine-learning
➤ 進階,多層神經網絡,卷積和softmax迴歸:
斯坦福機器學習課程 UFLDL
UFLDL Tutorial
http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial
重點關注其中的softmax迴歸,卷積和池化這幾個章節
➤ 進階,計算機視覺,卷積神經網絡的新進展,實現和應用:
斯坦福計算機視覺課程 CS231n
斯坦福CS231n -深度學習與計算機視覺 - 網易雲課堂http://study.163.com/course/introduction/1003223001.htm
上面的課程大概會消耗你1到2個月的全部業餘時間。可是相信我,這是值得的。網絡上的課程很是多,也有不少優秀的免費課程,可是做爲入門,我沒有找到過比這三個更適合的。
若是實在連一兩個月的業餘時間都拿不出來,好吧,我來偷偷告訴你最最最基本的一個要求,知足了這個要求,你就可以算是機器學習入門了:
別笑,說正經的,在這個框架高度封裝的年代,梯度不須要本身算,損失不須要本身求,反向傳導更是被處理得妥妥的,在不求甚解的狀況下,你甚至只須要知道這麼幾個概念就能夠開始着手寫第一個程序了:
它就是經過一系列矩陣運算(或者相似的一些其餘運算)將輸入空間映射到輸出空間而已。參與運算的矩陣的值稱爲權重,是須要經過不斷迭代來尋找到最優值。
當前的權重值離最優值還差多遠,用一個數值來表示,這個值就叫損失,計算這個值的函數叫損失函數。
當前的權重值應該調大仍是調小,這個值經過對損失函數求導來判斷,這個求導獲得的函數叫作梯度。
經過損失和梯度來更新權重的方法叫作反向傳導。
迭代的方法稱爲梯度降低。
雖然這麼寫出來的程序必定是不知其因此然,可是其實20年前我第一次用C++寫Hello world的時候也是一臉懵逼的,我相信,每一個可以投身機器學習開發工做的程序猿,都是有大毅力大勇氣的,天然不會欠缺繼續學習的動力和決心。
好吧,接下來你須要找一個框架來做爲第一個程序的開發環境。(AI100小編注:下面真的全是乾貨,真如假包換貨真價值的實戰經驗,瞪好眼睛開始了)
目前機器學習的框架很是的多,從面向的使用者這個維度去劃分,大致上分紅這麼兩個陣營:
➤ 學術友好型:Theano,Torch,Caffe
學術研究時,弄出來一個新模型,新算法,新函數是常有的事,作出新的突破也是學術研究的最基本要求。因此,這些框架一般均可以方便地定製模型,也能夠深刻修改內部實現。不少新成果都會在發表論文的同時,提供這些框架上的實現代碼供參考。性能方面也是比較出色。
而代價就是,要麼使用了困難(Caffe:C++)或者小衆(Torch:Lua)的開發語言界面,要麼具備一些古怪的缺點(Theano:編譯超級慢)。
並且,這些框架彷佛都沒怎麼考慮過「怎麼提供服務」的問題。想要部署到服務器上?Caffe已是最簡單的了,然而仍然要經歷漫長而痛苦的摸索歷程。
➤ 工業友好型:Tensorflow,MXnet,Caffe
工業上每每更注重「把一個東西作出來,而且讓它運行得良好」。因此這些框架首先就須要支持並行訓練。其中Tensorflow和MXnet支持多機多卡、單機多卡,多機單卡並行,Caffe支持單機多卡。雖然這些性能都不是特別理想。
在咱們的測試中,Tensorflow的雙卡並行只能達到單卡的1.5倍左右性能,卡越多,這個比例越低。
Caffe要好一些,可是參數同步和梯度計算不管如何也都須要時間,因此沒有哪一個框架能沒有性能損失地實現擴展。
而多機的狀況下,性能損失更大,不少時候都讓人感到沒法接受(這方面的優化只能之後有機會再提,若是有這方面的同好,歡迎討論)。
相對來講,Tensorflow提供了比較好的部署機制(Serving),而且有直接部署到移動端的方案。而MXnet和Caffe則是直接編譯的方式,雖然也能夠實現,可是說實話,仍是很麻煩。
至於缺點,就是除了Caffe以外,其餘兩種框架對於學術界的動態跟蹤的都不太緊,Tensorflow到如今都沒有pRelu的官方實現,在前陣子也纔剛剛推出了一系列檢測(Detection)的模型。
MXnet這一點要積極些,但是受限於較小的開發者社區,不少成果都只能等待大神們的contribution或者自行實現。
這樣看來,難道最好的框架是Caffe?兼顧學術和實現,靈活性和性能兼備……
我得說,個人確是這麼認爲的。固然有一個前提,得懂C++……
若是不是C++開發人員出身,這門語言也不比機器學習容易多少了。
對於大多數有志於投身於機器學習開發(而不是研究)的同窗們來講,我推薦首選Tensorflow做爲你的第一個開發框架。
除了上述的優勢以外,最主要的因素是,它人氣高。在遇到任何問題的時候,你都會找到一羣志同道合的夥伴們去諮詢或者一塊兒研究。這對於初學者而言,重要程度不言而喻。
好吧,選擇就是這麼的簡單粗暴。
此外,還有一個良心建議,不論你選擇哪一個框架,千萬不要試圖在windows上運行它。哪怕是號稱支持windows的MXnet或者新版Tensorflow,不要問我怎麼知道……仍是去裝個Linux系統吧。建議使用ubuntu14.04或16.04。
學習用機配置
OK,接下來咱們就須要一臺機器去把框架搭建起來,而且去寫咱們的helloAI。然而我在不少地方都看到小夥伴們在問:
我須要什麼樣的配置能學機器學習?
我須要買塊GTX1080/Titan/Tesla嗎?
我應該裝幾塊顯卡?一塊?兩塊?仍是四塊?
答案也傾向於:「必須得有GPU啊,至少1080,沒有四路titan你都很差意思和人打招呼」
其實,並不徹底是這樣。
若是僅是入門和學習的話,CPU或者GPU徹底不影響對代碼和框架的學習。運行起相似Mnist或者Cifar之類的玩具數據集,其實差距也並不大。好比在個人機器上,運行自帶的Cifar demo,i7 CPU和GTX 1080 Ti的速度大概 770 pics/s VS. 2200 pics/s。GPU大概是不到三倍的性能優點。
瞧,差距也沒那麼大。
不過這裏有一個小竅門,若是想用CPU版本的Tensorflow,最好不要使用pip下載的方式,而是用自行編譯的方法。由於在開發機上編譯時它會自動打開全部支持的加速指令集(SSE4.1/SSE4.2/AVX/AVX2/FMA),從而使CPU的運算大大加快。
根據咱們的測試,在打開所有加速指令集的狀況下,訓練速度大概會有30%的提高,而預測的速度大概會提高一倍。
固然,若是真的想要使用一個複雜模型去處理實際的生產問題,模型的複雜度和數據量都不是Cifar這樣的玩具數據集能夠相比的。若是用咱們的一個模型一樣去運行Cifar數據集,其餘參數和條件徹底相同,它在i5/i7/960/GTX1080/GTX1080Ti的速度分別是(單位仍是pics/s,越大越好):
19/25/140/460/620
這個時候大概就能看出差距了,1080Ti大概是i7 CPU的25倍。而在模型上線使用(inference)時,GPU也會有10-20倍的性能優點。模型越複雜,GPU的優點越明顯。
綜合這些來看,若是僅僅是入門時期的學習,我建議先不用專門購買帶GPU的機器,先用你現有的機器,使用CPU版本,去學習框架和一些基礎。等到你對基礎已經掌握得比較紮實,那麼天然就會有跑一些更復雜的模型和更「真實」的數據的想法,這個時候,能夠考慮買一塊GPU,來縮短訓練的時間。
在選擇GPU時,我聽過一些朋友們推薦GTX1070 x 2這種選擇。從理論上講,1070的性能大概能達到1080的75%,而價格只是1080的一半,從各個方面來看,彷佛都是雙1070更有優點。
然而不要忘記,雙卡的性能是不可能達到單卡的2倍的,在目前的Tensorflow上,大概只能達到1.5倍上下,算下來其實和1080單卡差很少。而雙顯卡的主板和電源以及機箱散熱都須要更多的考慮,從性價比上來看未必真的划算。
不過,若是顯卡預算恰好卡在5000-6000這個檔位,雙1070也有它的優點。好比能夠學習使用多顯卡並行計算的用法,在不着急的時候能夠同時用兩塊顯卡跑兩個不一樣的任務,合併起來就至關於有了16G的顯存等等。考慮到這些因素,雙1070的確是最適合入門學習的選擇——若是買不起雙1080/雙TITAN的話(哈哈哈)。
若是你打算用筆記原本做爲主力學習用機的話,個人建議是:最好不要,除非你使用Linux經驗很豐富或者不打算用GPU加速。不少筆記本在安裝Liunx以後出現驅動方面的問題,並且使用GPU加速時的高熱量也會很是影響系統的穩定性。若是沒有很豐富的經驗,常常會在一個問題上卡掉幾個小時寶貴的學習時間。
➤ 安裝Tensorflow時的那些坑
通常來講,嚴格按照官網說明,在乾淨的系統上經過PIP安裝CPU版,都不會遇到什麼問題。
新手常犯的錯誤是忘記了執行:
sudo pip install --upgrade pip
致使在安裝tensorflow時找不到。
而GPU版本最多見的坑是:
忘記關閉lightdm就去裝驅動
這個沒關係,執行
sudo stop lightdm
就行了。ubuntu 16.04用
sudo systemctl stop lightdm
安裝CUDA時的第二個詢問
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 xxx.xx?
這裏輸入yes是錯的!
記住輸入no!必定不要安裝CUDA自帶驅動。這一點格外重要,裝上去之後每每就卡在GUI輸入密碼界面死循環了。
mnist?cifar?ImageNet?COCO?這些都是啥?
➤ MNIST
不論選擇哪本教材,哪一個框架,在剛剛接觸機器學習的時候,必定會接觸到Mnist(讀做M- nist)這個名字。
這是個由Yann LeCun(讀成楊樂坤,不是嚴樂村)創建的手寫數字庫,每條數據是固定的784個字節,由28x28個灰度像素組成,大概長這樣:
目標是對輸入進行10-分類,從而輸出每一個手寫數字所表達的真實數字。由於它體積小(10M左右),數據多(6萬張訓練圖片),適用範圍廣(NN/CNN/SVM/KNN均可以拿來跑跑)而天下聞名,其地位至關於機器學習界的Hello World。在LeCun的Mnist官方網站上,貼有各類模型跑這個數據集的最好成績,當前的最好得分是CNN的大概99.7%。
MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burgeshttp://yann.lecun.com/exdb/mnist/
由於這個數據集實在很是的小,因此即便在CPU上,也能夠用幾秒鐘時間跑完NN的訓練,或者幾分鐘跑完一個簡單的CNN的模型。
➤ CIFAR
而對於打算從圖像方面入手的同窗,Cifar(讀作see far)數據庫則是更好的入門選項。
官網:CIFAR-10 and CIFAR-100 datasets
http://www.cs.toronto.edu/~kriz/cifar.html
這個數據庫分爲2個版本,CIFAR-10和CIFAR-100,顧名思義,CIFAR-10有10個分類,每一個分類有5000張訓練圖片和1000張測試圖片,每張圖片是32x32像素的3通道位圖。大概長這樣:
而CIFAR-100有100個分類,每一個分類變成了500張訓練圖片+100張測試圖片,而圖片的大小並沒什麼變化。
之因此說它比Mnist更適合做爲圖片處理的入門,是由於它雖然分辨率低了些,可是倒是三通道,真實拍攝的照片。其中有些圖片的背景還略微複雜,更貼近咱們真實的圖片處理場景。相對而言,Mnist的灰度輸入和乾淨背景就顯得有些過於簡單,並且99.7%的準確率也確實很難有提高的空間。
Tensorflow給出了Cifar的例程:
https://www.tensorflow.org/tutorials/deep_cnn
並附有代碼 :tensorflow/models
https://github.com/tensorflow/models/tree/fb96b71aec356e054678978875d6007ccc068e7a/tutorials/image/cifar10
➤ ImageNet 和 MS COCO
至於ImageNet(ImageNet)和COCO(http://mscoco.org/),則是兩個工業級別的圖像數據集。一般咱們提到他們時,ImageNet指的是ILSVRC2012的訓練集,而COCO則是COCO-2014訓練集。
ImageNet具備大量的圖片(一百多萬張,分紅1000個分類)和標註,大部分都是這樣的:
COCO雖然圖片數量少一些(8萬多張,80個分類),可是每張圖片都有輪廓標記,而且附帶分類標註和5句描述話語(英文的)。大概是這樣的:
因此當咱們進入實際的工做時,能夠根據具體的須要從中選擇適合本身的數據集做爲benchmark或者pretrain數據集。
在Tenforflow 安裝完成後,咱們能夠用這種方式最快地跑起來第一個Cifar demo:
git clone https://github.com/tensorflow/models.git my_models
cd my_models/tutorials/image/cifar10/
python cifar10_train.py
OK,只需幾分鐘下載數據,咱們就能夠看到咱們的第一個「圖像識別模型」正在訓練了。
訓練過程當中咱們能夠看到log中在不斷地輸出loss信息,可是咱們除了想要跟蹤loss以外,還但願可以看到當前訓練的模型到底識別的準確率如何,這個就不是cifar10_train.py這個腳本能提供的了。咱們還須要執行
python cifar10_eval.py
這個腳本會不斷地驗證最近的檢查點的識別準確率。
若是使用GPU的話,會發如今運行起來訓練腳本以後,全部的顯存都已經被這個進程佔滿,再啓動驗證腳本的話會報錯一大堆的內存不足(OOM),這是Tensorflow的機制決定的,它會默認佔據全部顯卡的全部顯存,而無論本身是否真的用到那麼多。
解決這個問題的辦法也很簡單。
首先,咱們能夠指定Tensorflow使用哪幾塊顯卡進行訓練。要作到這一點,能夠在執行較本前,用命令行指定環境變量:
export CUDA_VISIBLE_DEVICES="0,2"
其中的「0,2」就是但願使用的GPU編號,從0開始,用逗號分隔開。
或者在代碼中建立一個GPUOption,設置visible_device_list=‘0,2',也能起到一樣的效果。
而後,咱們能夠限制Tensorflow使用的顯存,使其動態增加而不是啓動就佔滿。方法和上面的相似,代碼中建立一個GPUOption,並設置allow_growth=True便可。
官方的Cifar例程大概能達到86%的準確率,這個成績在如今能夠說算是比較差的了,最新的模型一般都有97%左右的準確率,即便是不仔細調參隨便訓訓,也能輕鬆達到93%左右,你們能夠嘗試着修改cifar10.py中定義的模型,獲得更好的效果。
我跑完了,而後呢?
那麼,在運行完這個例子以後,其實你已經能夠算是機器學習工程師中的一員了。
接下來就能夠收集一些本身的數據,而且訓練一些本身的識別引擎;或者嘗試着優化這個模型,感覺一下所謂調參黨的痛苦;又或者直接嘗試實現ResNet、Inception這些更爲先進的網絡來刷刷Cifar;再否則能夠嘗試着向NLP或者強化學習方向去學習一下。
總之,這些事情遠沒有看起來那麼難。
固然,不論那條路,學習,進步和自我鞭策都是逃避不掉的必修課。
一個新生的領域,勃勃的生機必然也意味着新成果的層出不窮。完成我上面提到的三門課程只能讓一我的從門外漢變成圈裏人,有了進入這個領域,遇上這波浪潮的基本資格,至於究竟是成爲弄潮兒仍是直接被大浪吞沒,仍是那句話,不勞苦必然無所得。努力學習不必定能修成正果,而不去努力學習,則註定是一無所得。
對於堅強地完成了全部課程的同窗們,我得說聲恭喜,從咱們掌握的數據來看,只有10%左右的現役程序員決定向AI轉身,並付諸了行動;而可以完成基礎課程的人,只佔了其中的30%不到。也就是說,當你完成CS231n的最後一個做業開始,你就已經站在了開發者的Top 5%之列。
在這個層面上,一般就會面臨兩件更加困難的任務:追論文和補數學。
如今的機器學習界,「ArXiv醒」已經成了症候羣,幾乎每週都會有更先進的內容冒出來,隔一兩個月就會發現不少公認的知識被刷新了,隔一兩年?簡直沒法想象。因此跟蹤學術界的動態就成了從業者的必修課。哪怕做爲工業實現者,若是不能第一時間掌握學術界的動態,就必定會面臨對手忽然實力碾壓本身的窘境。
好在機器學習界的風氣和傳統領域的學術界有一個很大的區別,得益於鋼鐵俠Elon Musk的OpenAI組織,學術界造成了ArXiv上預印論文和開源的風氣。只是要想看懂這些論文和代碼,前面提到的那些知識,卻遠遠不夠。看到這種論文([1706.02515] Self-Normalizing Neural Networks)的時候,你纔會真正理解什麼叫「沒個博士學位都搞不了這東西」:
[1706.02515] Self-Normalizing Neural Networks
https://arxiv.org/abs/1706.02515
不管如何,感謝這開源的學術環境,讓全部從業者都站在了同一塊兒跑線上:最新的成果再也不是大公司壟斷,小公司也同樣能夠彎道超車,用最早進的產品佔領某個細分領域市場。
同時,這也讓全部人都變得壓力倍增:也許辛辛苦苦積累的經驗技巧模型和數據,在一個顛覆性的成果面前忽然變得一文不值,隨時隨地都要面對後來者的降維打擊。
這是個讓人辛勞痛苦的領域。
這是個讓人振奮鼓舞的領域。
這是個讓人慾罷不能的領域。
這是個讓人充滿期待的領域。
這是天堂。
這是地獄。
咱們已經在這裏等你,來嗎,少年?
本文做者智亮:魯朗軟件聯合創始人,tensorflow contributor,花伴侶團隊機器學習負責人。
擁有十餘年開發和管理經驗。2010年起在移動互聯網行業創業,團隊曾開發多個千萬用戶級別的移動端產品。近期帶領團隊開發的人工智能識花應用上線數月,在0推廣的狀況下迅速達到百萬用戶,得到2017阿里雲棲API Solution大賽一等獎,並受邀成爲微信公開課北京站九位演講嘉賓之一。因爲其團隊內部機器學習開發者,大部分從移動互聯網開發者經過內部培訓轉型而來,其對行業的判斷,以及對程序員轉型到機器學習領域的經驗值得借鑑。