曾經(jīng)也只是一個(gè)只懂 ACM 競賽相關(guān)算法的普通程序員,誤打誤撞接觸到了數(shù)據(jù)挖掘,之后才開始系統(tǒng)地了解機(jī)器學(xué)習(xí)相關(guān)的知識,如今已經(jīng)基本走上了正軌,開始了走向 Data Scientist 的征途。但是最高贊的一篇回答居然是關(guān)于 Deep Learning 的,這感覺就想是有人問我這山地車好高級,能不能教我怎么換擋,我告訴他說,這車太low了,我教你開飛機(jī)吧。我想即使目前開飛機(jī)(Deep Learning)的門檻一再降低,如果你沒有一個(gè)優(yōu)秀的基礎(chǔ),即使是老司機(jī)也是容易翻車的。 簡單認(rèn)真回答一下,首先作為一個(gè)普通程序員,C++ / Java / Python 這樣的語言技能棧應(yīng)該是必不可少的,其中 Python 需要重點(diǎn)關(guān)注爬蟲、數(shù)值計(jì)算、數(shù)據(jù)可視化方面的應(yīng)用,主要是:
推薦閱讀:《集體智慧編程》、Andrew Ng — Machine Learning Coursera from Stanford
此時(shí)的你或許已經(jīng)有一塊可以用的敲門磚了,但離工業(yè)界實(shí)際應(yīng)用還有比較大的距離,主要差距就在于 Feature Engineering,這也是我在面試考察有經(jīng)驗(yàn)的人面前比較注重的點(diǎn)。這一塊中有一些比較基礎(chǔ)的知識點(diǎn),簡單羅列如下:
可用性評估:獲取難度、覆蓋率、準(zhǔn)確率
特征清洗:清洗異常樣本
采樣:數(shù)據(jù)不均衡、樣本權(quán)重
單個(gè)特征:無量綱化(標(biāo)準(zhǔn)化、歸一化)、二值化、離散化、缺失值(均值)、啞編碼(一個(gè)定性特征擴(kuò)展為N個(gè)定量特征)
數(shù)據(jù)變換:log、指數(shù)、Box-Cox 降維:主成分分析PCA、線性判別分析LDA、SVD分解
特征選擇:Filter(相關(guān)系數(shù)、卡方檢驗(yàn))、Wrapper(AUC、設(shè)計(jì)評價(jià)函數(shù)A*、Embedded(L1-Lasso、L2-Ridge、決策樹、DL)
衍生變量:組合特征 特征監(jiān)控:監(jiān)控重要特征,fa特征質(zhì)量下降放一張公司內(nèi)部算法培訓(xùn)關(guān)于特征工程的 PPT,僅供學(xué)習(xí)參考:
再往后你就可以在技能樹上點(diǎn)幾個(gè)酷炫的了:
提升
SVM
聚類
EM算法
主題模型
詞向量
HMM
數(shù)據(jù)計(jì)算平臺
可以看到,不管你是用 TensorFlow 還是用 Caffe 還是用 MXNET 等等一系列平臺來做高大上的 Deep Learning,在我看來都是次要的。想要在這個(gè)行業(yè)長久地活下去,內(nèi)功的修煉要比外功重要得多,不然會活得很累,也很難獲得一個(gè)優(yōu)秀的晉升空間。
最后,關(guān)注你所在行業(yè)的最新 paper,對最近的算法理論體系發(fā)展有一個(gè)大致印象,譬如計(jì)算廣告領(lǐng)域的幾大經(jīng)典問題:
目的
本文的目的是給出一個(gè)簡單的,平滑的,易于實(shí)現(xiàn)的學(xué)習(xí)方法,幫助 “普通” 程序員踏入AI領(lǐng)域這個(gè)門。這里,我對普通程序員的定義是:擁有大學(xué)本科知識;平時(shí)工作較忙;自己能獲取的數(shù)據(jù)有限。因此,本文更像是一篇 “from the scratch” 的AI入門教程。
AI領(lǐng)域簡介
AI,也就是人工智能,并不僅僅包括機(jī)器學(xué)習(xí)。曾經(jīng),符號與邏輯被認(rèn)為是人工智能實(shí)現(xiàn)的關(guān)鍵,而如今則是基于統(tǒng)計(jì)的機(jī)器學(xué)習(xí)占據(jù)了主導(dǎo)地位。最近火熱的深度學(xué)習(xí)正是機(jī)器學(xué)習(xí)中的一個(gè)子項(xiàng)。目前可以說,學(xué)習(xí)AI主要的是學(xué)習(xí)機(jī)器學(xué)習(xí)。但是,人工智能并不等同于機(jī)器學(xué)習(xí),這點(diǎn)在進(jìn)入這個(gè)領(lǐng)域時(shí)一定要認(rèn)識清楚。關(guān)于AI領(lǐng)域的發(fā)展歷史介紹推薦看周老師寫的《機(jī)器學(xué)習(xí)簡介》。下面一個(gè)問題是:AI的門好跨么?其實(shí)很不好跨。我們以機(jī)器學(xué)習(xí)為例。在學(xué)習(xí)過程中,你會面對大量復(fù)雜的公式,在實(shí)際項(xiàng)目中會面對數(shù)據(jù)的缺乏,以及艱辛的調(diào)參等。如果僅僅是因?yàn)橛X得這個(gè)方向未來會“火”的話,那么這些困難會容易讓人放棄。考慮到普通程序員的特點(diǎn),而要學(xué)習(xí)如此困難的學(xué)科,是否就是沒有門路的?答案是否定的。只要制定合適的學(xué)習(xí)方法即可。
學(xué)習(xí)方法
學(xué)習(xí)方法的設(shè)定簡單說就是回答以下幾個(gè)問題:我要學(xué)的是什么?我怎樣學(xué)習(xí)?我如何去學(xué)習(xí)?這三個(gè)問題概括說就是:學(xué)習(xí)目標(biāo),學(xué)習(xí)方針與學(xué)習(xí)計(jì)劃。學(xué)習(xí)目標(biāo)比較清楚,就是踏入AI領(lǐng)域這個(gè)門。這個(gè)目標(biāo)不大,因此實(shí)現(xiàn)起來也較為容易。“過大的目標(biāo)時(shí)就是為了你日后放棄它時(shí)找到了足夠的理由”。學(xué)習(xí)方針可以總結(jié)為 “興趣為先,踐學(xué)結(jié)合”。簡單說就是先培養(yǎng)興趣,然后學(xué)習(xí)中把實(shí)踐穿插進(jìn)來,螺旋式提高。這種方式學(xué)習(xí)效果好,而且不容易讓人放棄。有了學(xué)習(xí)方針以后,就可以制定學(xué)習(xí)計(jì)劃,也稱為學(xué)習(xí)路線。下面就是學(xué)習(xí)路線的介紹。
學(xué)習(xí)路線
我推薦的學(xué)習(xí)路線是這樣的,如下圖:
圖1 AI領(lǐng)域?qū)W習(xí)路線圖
這個(gè)學(xué)習(xí)路線是這樣設(shè)計(jì)的:首先了解這個(gè)領(lǐng)域,建立起全面的視野,培養(yǎng)起充足的興趣,然后開始學(xué)習(xí)機(jī)器學(xué)習(xí)的基礎(chǔ),這里選擇一門由淺入深的課程來學(xué)習(xí),課程最好有足夠的實(shí)驗(yàn)?zāi)軌蜻M(jìn)行實(shí)戰(zhàn)。基礎(chǔ)打下后,對機(jī)器學(xué)習(xí)已經(jīng)有了充足的了解,可以用機(jī)器學(xué)習(xí)來解決一個(gè)實(shí)際的問題。這時(shí)還是可以把機(jī)器學(xué)習(xí)方法當(dāng)作一個(gè)黑盒子來處理的。實(shí)戰(zhàn)經(jīng)驗(yàn)積累以后,可以考慮繼續(xù)進(jìn)行學(xué)習(xí)。這時(shí)候有兩個(gè)選擇,深度學(xué)習(xí)或者繼續(xù)機(jī)器學(xué)習(xí)。深度學(xué)習(xí)是目前最火熱的機(jī)器學(xué)習(xí)方向,其中一些方法已經(jīng)跟傳統(tǒng)的機(jī)器學(xué)習(xí)不太一樣,因此可以單獨(dú)學(xué)習(xí)。除了深度學(xué)習(xí)以外,機(jī)器學(xué)習(xí)還包括統(tǒng)計(jì)學(xué)習(xí),集成學(xué)習(xí)等實(shí)用方法。如果條件足夠,可以同時(shí)學(xué)習(xí)兩者,一些規(guī)律對兩者是共通的。學(xué)習(xí)完后,你已經(jīng)具備了較強(qiáng)的知識儲備,可以進(jìn)入較難的實(shí)戰(zhàn)。這時(shí)候有兩個(gè)選擇,工業(yè)界的可以選擇看開源項(xiàng)目,以改代碼為目的來讀代碼;學(xué)術(shù)界的可以看特定領(lǐng)域的論文,為解決問題而想發(fā)論文。無論哪者,都需要知識過硬,以及較強(qiáng)的編碼能力,因此很能考察和鍛煉水平。經(jīng)過這個(gè)階段以后,可以說是踏入AI領(lǐng)域的門了。“師傅領(lǐng)進(jìn)門,修行在個(gè)人”。之后的路就要自己走了。
下面是關(guān)于每個(gè)階段的具體介紹:
領(lǐng)域了解
在學(xué)習(xí)任何一門知識之前,首先第一步就是了解這個(gè)知識是什么?它能做什么事?它的價(jià)值在什么地方?如果不理解這些的話,那么學(xué)習(xí)本身就是一個(gè)沒有方向的舟,不知道駛向何處,也極易有沉船的風(fēng)險(xiǎn)。了解這些問題后,你才能培養(yǎng)出興趣,興趣是最好的引路人,學(xué)習(xí)的動(dòng)力與持久力才能讓你應(yīng)付接下來的若干個(gè)階段。關(guān)于機(jī)器學(xué)習(xí)是什么,能做什么,它與深度學(xué)習(xí)以及人工智能的關(guān)系
知識準(zhǔn)備
如果你離校過久,或者覺得基礎(chǔ)不牢,最好事先做一下準(zhǔn)備復(fù)習(xí)工作。“工欲善其事,必先利其器”。以下的準(zhǔn)備工作不多,但足以應(yīng)付后面階段的學(xué)習(xí)。
機(jī)器學(xué)習(xí)
機(jī)器學(xué)習(xí)的第一門課程首推Andrew Ng的機(jī)器學(xué)習(xí)。這門課程有以下特點(diǎn):難度適中,同時(shí)有足夠的實(shí)戰(zhàn)例子,非常適合第一次學(xué)習(xí)的人。cs229 這門課程我這里不推薦,為什么,原因有以下:
實(shí)踐做項(xiàng)目
學(xué)習(xí)完了基礎(chǔ)課程,你對機(jī)器學(xué)習(xí)就有了初步了解。現(xiàn)在使用它們是沒有問題的,你可以把機(jī)器學(xué)習(xí)算法當(dāng)作黑盒子,放進(jìn)去數(shù)據(jù),就會有結(jié)果。在實(shí)戰(zhàn)中你更需要去關(guān)心如何獲取數(shù)據(jù),以及怎么調(diào)參等。如果有時(shí)間,自己動(dòng)手做一個(gè)簡單的實(shí)踐項(xiàng)目是最好的。這里需要選擇一個(gè)應(yīng)用方向,是圖像(計(jì)算機(jī)視覺),音頻(語音識別),還是文本(自然語言處理)。這里推薦選擇圖像領(lǐng)域,這里面的開源項(xiàng)目較多,入門也較簡單,可以使用OpenCV做開發(fā),里面已經(jīng)實(shí)現(xiàn)好了神經(jīng)網(wǎng)絡(luò),SVM等機(jī)器學(xué)習(xí)算法。項(xiàng)目做好后,可以開源到到 Github 上面,然后不斷完善它。實(shí)戰(zhàn)項(xiàng)目做完后,你可以繼續(xù)進(jìn)一步深入學(xué)習(xí),這時(shí)候有兩個(gè)選擇,深度學(xué)習(xí)和繼續(xù)機(jī)器學(xué)習(xí);
深度學(xué)習(xí)
深度學(xué)習(xí):深度學(xué)習(xí)是目前最火熱的研究方向。有以下特點(diǎn):知識更新快,較為零碎,沒有系統(tǒng)講解的書。因此學(xué)習(xí)的資源也相對零散,下面是一些資源介紹。其中不推薦的部分并不代表不好,而是在這個(gè)初學(xué)階段不合適:
繼續(xù)機(jī)器學(xué)習(xí)
深度學(xué)習(xí)未必就是未來的一定主流,至少一些大牛是這么認(rèn)為的。傳統(tǒng)的機(jī)器學(xué)習(xí)有如下特點(diǎn),知識系統(tǒng)化,有相對經(jīng)典的書。其中統(tǒng)計(jì)學(xué)習(xí)(代表SVM)與集成學(xué)習(xí)(代表adaboost)是在實(shí)踐中使用非常多的技術(shù)。下面是相關(guān)資源:
開源項(xiàng)目
當(dāng)知識儲備較為充足時(shí),學(xué)習(xí)可以再次轉(zhuǎn)入實(shí)踐階段。這時(shí)候的實(shí)踐仍然可以分兩步走,學(xué)習(xí)經(jīng)典的開源項(xiàng)目或者發(fā)表高質(zhì)量的論文。開源項(xiàng)目的學(xué)習(xí)應(yīng)該以盡量以優(yōu)化為目的,單純?yōu)樽x代碼而學(xué)習(xí)效果往往不太好。好的開源項(xiàng)目都可以在Github 里搜索。這里以深度學(xué)習(xí)為例。深度學(xué)習(xí)的開源優(yōu)秀庫有很多,例如torch,theano等等,這里列舉其中的兩個(gè):
會議論文
較好的課程都會推薦你一些論文。一些著名的技術(shù)與方法往往誕生于一些重要的會議。因此,看往年的會議論文是深入學(xué)習(xí)的方法。在這時(shí),一些論文中的內(nèi)容會驅(qū)使你學(xué)習(xí)數(shù)學(xué)中你不擅長的部分。有時(shí)候你會覺得數(shù)學(xué)知識儲備不夠,因此往往需要學(xué)習(xí)一些輔助課程。當(dāng)你看完足夠的論文以后,在這個(gè)階段,如果是在校學(xué)生,可以選擇某個(gè)課題,以發(fā)論文為目的來學(xué)習(xí)研究。一般來說,論文是工作的產(chǎn)物。有時(shí)候一篇基于實(shí)驗(yàn)的論文往往需要你寫代碼或者基于開源項(xiàng)目。因此開源項(xiàng)目的學(xué)習(xí)與會議論文的工作兩者之間是有相關(guān)的。兩者可以同時(shí)進(jìn)行學(xué)習(xí)。關(guān)于在哪里看論文,可以看一下CCF推薦排名,了解一下這個(gè)領(lǐng)域里有哪些優(yōu)秀的會議。下面介紹兩個(gè)圖像與機(jī)器學(xué)習(xí)領(lǐng)域的著名頂級會議:
自由學(xué)習(xí)
自由學(xué)習(xí):到這里了,可以說是進(jìn)入這個(gè)門了。下面可以依據(jù)興趣來自由學(xué)習(xí)。前階段不推薦的學(xué)習(xí)資源也可隨意學(xué)習(xí),下面是點(diǎn)評:
總結(jié)
本文的目的是幫助對AI領(lǐng)域了解不深,但又想進(jìn)入的同學(xué)踏入這個(gè)門。這里只說踏入,是因?yàn)檫@個(gè)領(lǐng)域的專精實(shí)在非常困難,需要數(shù)年的積累與努力。在進(jìn)行領(lǐng)域?qū)W習(xí)前,充分認(rèn)識自己的特點(diǎn),制定合適的學(xué)習(xí)方法是十分重要的。首先得對這個(gè)領(lǐng)域進(jìn)行充分了解,培養(yǎng)興趣。在學(xué)習(xí)時(shí),保持著循序漸進(jìn)的學(xué)習(xí)方針,不要猛進(jìn)的學(xué)習(xí)過難資源;結(jié)合著學(xué)習(xí)與實(shí)踐相輔的策略,不要只讀只看,實(shí)際動(dòng)手才有成就感。學(xué)習(xí)某個(gè)資源時(shí)要有充分的目的,不是為了學(xué)開源項(xiàng)目而看代碼,而是為了寫開源項(xiàng)目而看;不是為了發(fā)論文而寫論文,而是為了做事情而寫論文。如果一個(gè)學(xué)習(xí)資源對你過難,并不代表一定是你的問題,可能是學(xué)習(xí)資源的演講或撰寫人的問題。能把難的問題講簡單的人才是真正有水平的人。所以,一定要學(xué)習(xí)優(yōu)質(zhì)資源,而不是不分青紅皂白的學(xué)習(xí)。最后,牢記以興趣來學(xué)習(xí)。學(xué)習(xí)的時(shí)間很長,過程也很艱難,而只有興趣才是讓你持之以恒,攻克難關(guān)的最佳助力。
如有問題請聯(lián)系我們,我們7*24小時(shí)竭誠為您服務(wù)