全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

Python培訓(xùn)之普通程序員如何向人工智能方向轉(zhuǎn)型?

更新時(shí)間:2017-08-18 來(lái)源:黑馬程序員python培訓(xùn)學(xué)院 瀏覽量:

眼下,人工智能已經(jīng)成為越來(lái)越火的一個(gè)方向。普通程序員,如何轉(zhuǎn)向人工智能方向,是知乎上的一個(gè)問(wèn)題。本文是我對(duì)此問(wèn)題的一個(gè)回答的歸檔版。相比原回答有所內(nèi)容增加。


一. 目的

本文的目的是給出一個(gè)簡(jiǎn)單的,平滑的,易于實(shí)現(xiàn)的學(xué)習(xí)方法,幫助 “普通” 程序員踏入AI領(lǐng)域這個(gè)門(mén)。這里,我對(duì)普通程序員的定義是:擁有大學(xué)本科知識(shí);平時(shí)工作較忙;自己能獲取的數(shù)據(jù)有限。因此,本文更像是一篇 “from the scratch” 的AI入門(mén)教程。


二. AI領(lǐng)域簡(jiǎn)介

AI,也就是人工智能,并不僅僅包括機(jī)器學(xué)習(xí)。曾經(jīng),符號(hào)與邏輯被認(rèn)為是人工智能實(shí)現(xiàn)的關(guān)鍵,而如今則是基于統(tǒng)計(jì)的機(jī)器學(xué)習(xí)占據(jù)了主導(dǎo)地位。最近火熱的深度學(xué)習(xí)正是機(jī)器學(xué)習(xí)中的一個(gè)子項(xiàng)。目前可以說(shuō),學(xué)習(xí)AI主要的是學(xué)習(xí)機(jī)器學(xué)習(xí)。

但是,人工智能并不等同于機(jī)器學(xué)習(xí),這點(diǎn)在進(jìn)入這個(gè)領(lǐng)域時(shí)一定要認(rèn)識(shí)清楚。關(guān)于AI領(lǐng)域的發(fā)展歷史介紹推薦看周老師寫(xiě)的《機(jī)器學(xué)習(xí)簡(jiǎn)介》。下面一個(gè)問(wèn)題是:AI的門(mén)好跨么?其實(shí)很不好跨。我們以機(jī)器學(xué)習(xí)為例。

在學(xué)習(xí)過(guò)程中,你會(huì)面對(duì)大量復(fù)雜的公式,在實(shí)際項(xiàng)目中會(huì)面對(duì)數(shù)據(jù)的缺乏,以及艱辛的調(diào)參等。如果僅僅是因?yàn)橛X(jué)得這個(gè)方向未來(lái)會(huì)“火”的話(huà),那么這些困難會(huì)容易讓人放棄??紤]到普通程序員的特點(diǎn),而要學(xué)習(xí)如此困難的學(xué)科,是否就是沒(méi)有門(mén)路的?答案是否定的。只要制定合適的學(xué)習(xí)方法即可。


三. 學(xué)習(xí)方法

學(xué)習(xí)方法的設(shè)定簡(jiǎn)單說(shuō)就是回答以下幾個(gè)問(wèn)題:我要學(xué)的是什么?我怎樣學(xué)習(xí)?我如何去學(xué)習(xí)?這三個(gè)問(wèn)題概括說(shuō)就是:學(xué)習(xí)目標(biāo),學(xué)習(xí)方針與學(xué)習(xí)計(jì)劃。學(xué)習(xí)目標(biāo)比較清楚,就是踏入AI領(lǐng)域這個(gè)門(mén)。這個(gè)目標(biāo)不大,因此實(shí)現(xiàn)起來(lái)也較為容易?!斑^(guò)大的目標(biāo)時(shí)就是為了你日后放棄它時(shí)找到了足夠的理由”。

學(xué)習(xí)方針可以總結(jié)為 “興趣為先,踐學(xué)結(jié)合”。簡(jiǎn)單說(shuō)就是先培養(yǎng)興趣,然后學(xué)習(xí)中把實(shí)踐穿插進(jìn)來(lái),螺旋式提高。這種方式學(xué)習(xí)效果好,而且不容易讓人放棄。有了學(xué)習(xí)方針以后,就可以制定學(xué)習(xí)計(jì)劃,也稱(chēng)為學(xué)習(xí)路線(xiàn)。下面就是學(xué)習(xí)路線(xiàn)的介紹。


四. 學(xué)習(xí)路線(xiàn)

我推薦的學(xué)習(xí)路線(xiàn)是這樣的,如下圖:

圖1 AI領(lǐng)域?qū)W習(xí)路線(xiàn)圖

這個(gè)學(xué)習(xí)路線(xiàn)是這樣設(shè)計(jì)的:首先了解這個(gè)領(lǐng)域,建立起全面的視野,培養(yǎng)起充足的興趣,然后開(kāi)始學(xué)習(xí)機(jī)器學(xué)習(xí)的基礎(chǔ),這里選擇一門(mén)由淺入深的課程來(lái)學(xué)習(xí),課程最好有足夠的實(shí)驗(yàn)?zāi)軌蜻M(jìn)行實(shí)戰(zhàn)?;A(chǔ)打下后,對(duì)機(jī)器學(xué)習(xí)已經(jīng)有了充足的了解,可以用機(jī)器學(xué)習(xí)來(lái)解決一個(gè)實(shí)際的問(wèn)題。

這時(shí)還是可以把機(jī)器學(xué)習(xí)方法當(dāng)作一個(gè)黑盒子來(lái)處理的。實(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ī)律對(duì)兩者是共通的。學(xué)習(xí)完后,你已經(jīng)具備了較強(qiáng)的知識(shí)儲(chǔ)備,可以進(jìn)入較難的實(shí)戰(zhàn)。這時(shí)候有兩個(gè)選擇,工業(yè)界的可以選擇看開(kāi)源項(xiàng)目,以改代碼為目的來(lái)讀代碼;學(xué)術(shù)界的可以看特定領(lǐng)域的論文,為解決問(wèn)題而想發(fā)論文。

無(wú)論哪者,都需要知識(shí)過(guò)硬,以及較強(qiáng)的編碼能力,因此很能考察和鍛煉水平。經(jīng)過(guò)這個(gè)階段以后,可以說(shuō)是踏入AI領(lǐng)域的門(mén)了?!皫煾殿I(lǐng)進(jìn)門(mén),修行在個(gè)人”。之后的路就要自己走了。

下面是關(guān)于每個(gè)階段的具體介紹:

0.領(lǐng)域了解

在學(xué)習(xí)任何一門(mén)知識(shí)之前,首先第一步就是了解這個(gè)知識(shí)是什么?它能做什么事?它的價(jià)值在什么地方?如果不理解這些的話(huà),那么學(xué)習(xí)本身就是一個(gè)沒(méi)有方向的舟,不知道駛向何處,也極易有沉船的風(fēng)險(xiǎn)。了解這些問(wèn)題后,你才能培養(yǎng)出興趣,興趣是最好的引路人,學(xué)習(xí)的動(dòng)力與持久力才能讓你應(yīng)付接下來(lái)的若干個(gè)階段。關(guān)于機(jī)器學(xué)習(xí)是什么,能做什么,它與深度學(xué)習(xí)以及人工智能的關(guān)系,可以看我寫(xiě)的博客 從機(jī)器學(xué)習(xí)談起。

1.知識(shí)準(zhǔn)備

如果你離校過(guò)久,或者覺(jué)得基礎(chǔ)不牢,最好事先做一下準(zhǔn)備復(fù)習(xí)工作?!肮び破涫?,必先利其器”。以下的準(zhǔn)備工作不多,但足以應(yīng)付后面階段的學(xué)習(xí)。

數(shù)學(xué):復(fù)習(xí)以下基本知識(shí)。線(xiàn)性代數(shù):矩陣乘法;高數(shù):求導(dǎo);概率論:條件與后驗(yàn)概率。其他的一些知識(shí)可以在后面的學(xué)習(xí)的過(guò)程中按需再補(bǔ);

英文:常備一個(gè)在線(xiàn)英文詞典,例如愛(ài)詞霸,能夠不吃力的看一些英文的資料網(wǎng)頁(yè);

FQ:可以隨時(shí)隨地上Google,這是一個(gè)很重要的工具。不是說(shuō)百度查的不能看,而是很多情況下Google搜出來(lái)的資料比百度搜的幾十頁(yè)的資料還管用,尤其是在查英文關(guān)鍵字時(shí)。節(jié)省時(shí)間可是很重要的學(xué)習(xí)效率提升;

2.機(jī)器學(xué)習(xí)

機(jī)器學(xué)習(xí)的第一門(mén)課程首推Andrew Ng的機(jī)器學(xué)習(xí)。這門(mén)課程有以下特點(diǎn):難度適中,同時(shí)有足夠的實(shí)戰(zhàn)例子,非常適合第一次學(xué)習(xí)的人。cs229 這門(mén)課程我這里不推薦,為什么,原因有以下:

時(shí)間:cs229 的時(shí)間太早,一些知識(shí)已經(jīng)跟不上當(dāng)今的發(fā)展,目前最為火熱的神經(jīng)網(wǎng)絡(luò)一筆帶過(guò)。而Cousera上神經(jīng)網(wǎng)絡(luò)可是用了兩個(gè)課時(shí)去講的!而且非常詳細(xì);教學(xué):Ng在cs229 時(shí)候的教學(xué)稍顯青澀,可能是面對(duì)網(wǎng)絡(luò)教學(xué)的原因。有很多問(wèn)題其實(shí)他都沒(méi)有講清楚,而且下面的人的提問(wèn)其實(shí)也很煩躁,你往往不關(guān)心那些人的問(wèn)題。這點(diǎn)在Coursera上就明顯得到了改善,你會(huì)發(fā)現(xiàn)Ng的教學(xué)水平大幅度改善了,他會(huì)對(duì)你循循善誘,推心置腹,由淺入深的教學(xué),在碰到你不明白的單詞術(shù)語(yǔ)時(shí)也會(huì)叫你不要擔(dān)心,更重要的,推導(dǎo)與圖表不要太完善,非常細(xì)致清晰,這點(diǎn)真是強(qiáng)力推薦;字幕:cs229 的字幕質(zhì)量比Coursera上的差了一截。Coursera上中文字幕翻譯經(jīng)過(guò)了多人把關(guān),質(zhì)量很有保證;作業(yè):cs229 沒(méi)有作業(yè),雖然你可以做一些,但不會(huì)有人看。這點(diǎn)遠(yuǎn)不如Coursera上每周有deadline的那種作業(yè),而且每期作業(yè)提交上去都有打分。更重要的是,每期作業(yè)都有實(shí)際的例子,讓你手把手練習(xí),而且能看到自己的成果,成就感滿(mǎn)滿(mǎn)!

3.實(shí)踐做項(xiàng)目

學(xué)習(xí)完了基礎(chǔ)課程,你對(duì)機(jī)器學(xué)習(xí)就有了初步了解?,F(xiàn)在使用它們是沒(méi)有問(wèn)題的,你可以把機(jī)器學(xué)習(xí)算法當(dāng)作黑盒子,放進(jìn)去數(shù)據(jù),就會(huì)有結(jié)果。在實(shí)戰(zhàn)中你更需要去關(guān)心如何獲取數(shù)據(jù),以及怎么調(diào)參等。如果有時(shí)間,自己動(dòng)手做一個(gè)簡(jiǎn)單的實(shí)踐項(xiàng)目是最好的。

這里需要選擇一個(gè)應(yīng)用方向,是圖像(計(jì)算機(jī)視覺(jué)),音頻(語(yǔ)音識(shí)別),還是文本(自然語(yǔ)言處理)。這里推薦選擇圖像領(lǐng)域,這里面的開(kāi)源項(xiàng)目較多,入門(mén)也較簡(jiǎn)單,可以使用OpenCV做開(kāi)發(fā),里面已經(jīng)實(shí)現(xiàn)好了神經(jīng)網(wǎng)絡(luò),SVM等機(jī)器學(xué)習(xí)算法。項(xiàng)目做好后,可以開(kāi)源到到 Github 上面,然后不斷完善它。實(shí)戰(zhàn)項(xiàng)目做完后,你可以繼續(xù)進(jìn)一步深入學(xué)習(xí),這時(shí)候有兩個(gè)選擇,深度學(xué)習(xí)和繼續(xù)機(jī)器學(xué)習(xí);

4.深度學(xué)習(xí)

深度學(xué)習(xí):深度學(xué)習(xí)是目前最火熱的研究方向。有以下特點(diǎn):知識(shí)更新快,較為零碎,沒(méi)有系統(tǒng)講解的書(shū)。因此學(xué)習(xí)的資源也相對(duì)零散,下面是一些資源介紹。其中不推薦的部分并不代表不好,而是在這個(gè)初學(xué)階段不合適:

推薦,UFLDL: 非常好的DL基礎(chǔ)教程,也是Andrew Ng寫(xiě)的。有很詳盡的推導(dǎo),有翻譯,且翻譯質(zhì)量很高;推薦,Deep learning (paper):2015年Nature上的論文,由三位深度學(xué)習(xí)界的大牛所寫(xiě),讀完全篇論文,給人高屋建瓴,一覽眾山小的感覺(jué),強(qiáng)烈推薦。如果只能讀一篇論文了解深度學(xué)習(xí),我推薦此篇。這篇論文有同名的中文翻譯;推薦,Neural networks and deep learning:這本書(shū)的作者非常擅長(zhǎng)以淺顯的語(yǔ)言表達(dá)深刻的道理,雖然沒(méi)有翻譯,但是閱讀并不困難;推薦,Recurrent Neural Networks: 結(jié)合一個(gè)實(shí)際案例告訴你RNN是什么,整篇教程學(xué)完以后,會(huì)讓你對(duì)RNN如何產(chǎn)生作用的有很清晰的認(rèn)識(shí),而這個(gè)效果,甚至是讀幾篇相關(guān)論文所沒(méi)有的;不推薦,Neural Networks for Machine Learning – University of Toronto | Coursera:深度學(xué)習(xí)創(chuàng)始人教的課,最大的問(wèn)題是太難,而且老先生的吐字有時(shí)不是很標(biāo)準(zhǔn);不推薦,Deep Learning (book):同樣也是由深度學(xué)習(xí)大牛所寫(xiě)的書(shū),但感覺(jué)就像是第二作者,也就是他的學(xué)生所寫(xiě)的。很多內(nèi)容都講了,但是感覺(jué)也沒(méi)講出什么內(nèi)容來(lái),只是告訴你來(lái)自那篇論文,這樣的話(huà)可能直接閱讀論文更合適。不推薦,cs231n:李菲菲的課程,很有名,專(zhuān)門(mén)講CNN。但是這門(mén)課程有一個(gè)最大的問(wèn)題,就是沒(méi)有字幕,雖然有youtube的自動(dòng)翻譯字幕,但有還不如沒(méi)有。

5.繼續(xù)機(jī)器學(xué)習(xí)

深度學(xué)習(xí)未必就是未來(lái)的一定主流,至少一些大牛是這么認(rèn)為的。傳統(tǒng)的機(jī)器學(xué)習(xí)有如下特點(diǎn),知識(shí)系統(tǒng)化,有相對(duì)經(jīng)典的書(shū)。其中統(tǒng)計(jì)學(xué)習(xí)(代表SVM)與集成學(xué)習(xí)(代表adaboost)是在實(shí)踐中使用非常多的技術(shù)。下面是相關(guān)資源:

推薦,機(jī)器學(xué)習(xí)(周志華):如果是在以前,機(jī)器學(xué)習(xí)方面的經(jīng)典教材首推PRML,但現(xiàn)在周老師的書(shū)出來(lái)以后,就不再是這樣了。首先推薦讀周老師的書(shū)。這本書(shū)有一個(gè)特點(diǎn),那就是再難的道理也能用淺顯精煉的語(yǔ)言表達(dá)出來(lái)。正如周老師的名言:“體現(xiàn)你水平的地方是把難的東西講容易了,而不是把容易的東西講難,想把一個(gè)東西講難實(shí)在太簡(jiǎn)單”;

不推薦,Pattern Recognition And Machine Learning:當(dāng)前階段不推薦。PRML是以貝葉斯的觀(guān)點(diǎn)看待很多機(jī)器學(xué)習(xí)方法,這也是它的一大特色。但對(duì)于初學(xué)者來(lái)說(shuō),這種觀(guān)點(diǎn)其實(shí)并無(wú)必要。而且此書(shū)沒(méi)有中文翻譯,當(dāng)前階段硬啃很容易放棄;

6.開(kāi)源項(xiàng)目

當(dāng)知識(shí)儲(chǔ)備較為充足時(shí),學(xué)習(xí)可以再次轉(zhuǎn)入實(shí)踐階段。這時(shí)候的實(shí)踐仍然可以分兩步走,學(xué)習(xí)經(jīng)典的開(kāi)源項(xiàng)目或者發(fā)表高質(zhì)量的論文。開(kāi)源項(xiàng)目的學(xué)習(xí)應(yīng)該以盡量以?xún)?yōu)化為目的,單純?yōu)樽x代碼而學(xué)習(xí)效果往往不太好。好的開(kāi)源項(xiàng)目都可以在Github 里搜索。這里以深度學(xué)習(xí)為例。深度學(xué)習(xí)的開(kāi)源優(yōu)秀庫(kù)有很多,例如torch,theano等等,這里列舉其中的兩個(gè):

推薦,DeepLearnToolbox:較早的一個(gè)深度學(xué)習(xí)庫(kù),用matlab語(yǔ)言撰寫(xiě),較為適合從剛學(xué)習(xí)的課程轉(zhuǎn)入學(xué)習(xí)。遺憾的是作者不再維護(hù)它了;

推薦,tensorflow:Google的開(kāi)源庫(kù),時(shí)至今日,已經(jīng)有40000多個(gè)star,非常驚人,支持移動(dòng)設(shè)備;

7.會(huì)議論文

較好的課程都會(huì)推薦你一些論文。一些著名的技術(shù)與方法往往誕生于一些重要的會(huì)議。因此,看往年的會(huì)議論文是深入學(xué)習(xí)的方法。在這時(shí),一些論文中的內(nèi)容會(huì)驅(qū)使你學(xué)習(xí)數(shù)學(xué)中你不擅長(zhǎng)的部分。有時(shí)候你會(huì)覺(jué)得數(shù)學(xué)知識(shí)儲(chǔ)備不夠,因此往往需要學(xué)習(xí)一些輔助課程。

當(dāng)你看完足夠的論文以后,在這個(gè)階段,如果是在校學(xué)生,可以選擇某個(gè)課題,以發(fā)論文為目的來(lái)學(xué)習(xí)研究。一般來(lái)說(shuō),論文是工作的產(chǎn)物。有時(shí)候一篇基于實(shí)驗(yàn)的論文往往需要你寫(xiě)代碼或者基于開(kāi)源項(xiàng)目。因此開(kāi)源項(xiàng)目的學(xué)習(xí)與會(huì)議論文的工作兩者之間是有相關(guān)的。

兩者可以同時(shí)進(jìn)行學(xué)習(xí)。關(guān)于在哪里看論文,可以看一下CCF推薦排名,了解一下這個(gè)領(lǐng)域里有哪些優(yōu)秀的會(huì)議。

下面介紹兩個(gè)圖像與機(jī)器學(xué)習(xí)領(lǐng)域的著名頂級(jí)會(huì)議:

CVPR:與另兩個(gè)會(huì)議ICCV和ECCV合稱(chēng)計(jì)算機(jī)視覺(jué)領(lǐng)域的三大會(huì),注意會(huì)議每年的主頁(yè)是變動(dòng)的,因此搜索需要加上年份;Conference on Neural Information Processing Systems:簡(jiǎn)稱(chēng)NIPS,許多重要的工作發(fā)表在這上面,例如關(guān)于CNN的一篇重要論文就是發(fā)表在上面;

8.自由學(xué)習(xí)

到這里了,可以說(shuō)是進(jìn)入這個(gè)門(mén)了。下面可以依據(jù)興趣來(lái)自由學(xué)習(xí)。前階段不推薦的學(xué)習(xí)資源也可隨意學(xué)習(xí),下面是點(diǎn)評(píng):

cs229 :Ng寫(xiě)的講義很不錯(cuò),其中關(guān)于SVM的推導(dǎo)部分很清晰,想學(xué)習(xí)SVM推薦;Neural Networks for Machine Learning:大牛的視角跟人就是不一樣,看看Hinton對(duì)神經(jīng)網(wǎng)絡(luò)是怎么看的,往往會(huì)讓你有種原來(lái)如此的感悟。其實(shí)看這門(mén)課程也等同于讀論文,因?yàn)閹缀趺抗?jié)課的參考資料里都有論文要你讀;CS231n: Convolutional Neural Networks for Visual Recognition:最新的知識(shí),還有詳細(xì)的作業(yè)。國(guó)內(nèi)應(yīng)該有團(tuán)隊(duì)對(duì)字幕進(jìn)行了翻譯,可以找找;PRML:作為一門(mén)經(jīng)典的機(jī)器學(xué)習(xí)書(shū)籍,是很有閱讀必要的,會(huì)讓你對(duì)機(jī)器學(xué)習(xí)擁有一個(gè)其他的觀(guān)察視角;

五. 總結(jié)

本文的目的是幫助對(duì)AI領(lǐng)域了解不深,但又想進(jìn)入的同學(xué)踏入這個(gè)門(mén)。這里只說(shuō)踏入,是因?yàn)檫@個(gè)領(lǐng)域的專(zhuān)精實(shí)在非常困難,需要數(shù)年的積累與努力。在進(jìn)行領(lǐng)域?qū)W習(xí)前,充分認(rèn)識(shí)自己的特點(diǎn),制定合適的學(xué)習(xí)方法是十分重要的。

首先得對(duì)這個(gè)領(lǐng)域進(jìn)行充分了解,培養(yǎng)興趣。在學(xué)習(xí)時(shí),保持著循序漸進(jìn)的學(xué)習(xí)方針,不要猛進(jìn)的學(xué)習(xí)過(guò)難資源;結(jié)合著學(xué)習(xí)與實(shí)踐相輔的策略,不要只讀只看,實(shí)際動(dòng)手才有成就感。學(xué)習(xí)某個(gè)資源時(shí)要有充分的目的,不是為了學(xué)開(kāi)源項(xiàng)目而看代碼,而是為了寫(xiě)開(kāi)源項(xiàng)目而看;不是為了發(fā)論文而寫(xiě)論文,而是為了做事情而寫(xiě)論文。

如果一個(gè)學(xué)習(xí)資源對(duì)你過(guò)難,并不代表一定是你的問(wèn)題,可能是學(xué)習(xí)資源的演講或撰寫(xiě)人的問(wèn)題。能把難的問(wèn)題講簡(jiǎn)單的人才是真正有水平的人。所以,一定要學(xué)習(xí)優(yōu)質(zhì)資源,而不是不分青紅皂白的學(xué)習(xí)。最后,牢記以興趣來(lái)學(xué)習(xí)。學(xué)習(xí)的時(shí)間很長(zhǎng),過(guò)程也很艱難,而只有興趣才是讓你持之以恒,攻克難關(guān)的最佳助力。

謹(jǐn)以此文與在學(xué)海中乘舟的諸位共勉。我就是一名普通程序員,剛剛轉(zhuǎn)入AI領(lǐng)域,還有很多不足。希望此文可以幫助到大家。



本文版權(quán)歸黑馬程序員Python培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!

作者:黑馬程序員Python培訓(xùn)學(xué)院

首發(fā):http://m.ko1818.cn/news/python.html


分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!