如何才能從普通程序員轉(zhuǎn)行人工智能?
人工智能已經(jīng)成為一個(gè)非?;鸬姆较?。作為一名普通的程序員,該如何轉(zhuǎn)向人工智能方向。以程序員為例,看看普通程序員如何開(kāi)啟人工智能之路。
AI領(lǐng)域簡(jiǎn)介
AI,也就是人工智能,人工智能是包括十分廣泛的科學(xué),它由不同的領(lǐng)域組成,如機(jī)器學(xué)習(xí),計(jì)算機(jī)視覺(jué)等等,總的說(shuō)來(lái),人工智能研究的一個(gè)主要目標(biāo)是使機(jī)器能夠勝任一些通常需要人類智能才能完成的復(fù)雜工作。但不同的時(shí)代、不同的人對(duì)這種“復(fù)雜工作”的理解是不同的。目前能夠用來(lái)研究人工智能的主要物質(zhì)手段以及能夠?qū)崿F(xiàn)人工智能技術(shù)的機(jī)器就是計(jì)算機(jī),人工智能的發(fā)展歷史是和計(jì)算機(jī)科學(xué)與技術(shù)的發(fā)展史聯(lián)系在一起的。除了計(jì)算機(jī)科學(xué)以外, 人工智能還涉及信息論、控制論、自動(dòng)化、仿生學(xué)、生物學(xué)、心理學(xué)、數(shù)理邏輯、語(yǔ)言學(xué)、醫(yī)學(xué)和哲學(xué)等多門(mén)學(xué)科。
既然要學(xué)習(xí),首先會(huì)想到的一個(gè)問(wèn)題是:AI好入門(mén)嗎?其實(shí)不好是很好入門(mén)的。以機(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ì)很容易讓人放棄。考慮到普通程序員的特點(diǎn),而要學(xué)習(xí)如此困難的學(xué)科,是否就是沒(méi)有門(mén)路的?答案是否定的。只要制定合適的學(xué)習(xí)方法即可。
怎么學(xué)?
首先,要思考一下三個(gè)問(wèn)題:我要學(xué)的是什么?我要怎么學(xué)習(xí)?我怎樣學(xué)習(xí)?
這三個(gè)問(wèn)題其實(shí)就是:學(xué)習(xí)目標(biāo),學(xué)習(xí)計(jì)劃和學(xué)習(xí)方針。學(xué)習(xí)目標(biāo)就是你要學(xué)那個(gè)方向,這個(gè)目標(biāo)很好確定。
學(xué)習(xí)方針可以總結(jié)為 “興趣為先,踐學(xué)結(jié)合”。簡(jiǎn)單的來(lái)說(shuō)就是先培養(yǎng)興趣,然后學(xué)習(xí)中把實(shí)踐穿插進(jìn)來(lái),螺旋式提高。這種方式學(xué)習(xí)效果好,而且不容易讓人放棄。有了學(xué)習(xí)方針以后,就可以制定學(xué)習(xí)計(jì)劃,也就是學(xué)習(xí)路線。下面就是學(xué)習(xí)規(guī)劃路線的介紹,以機(jī)器學(xué)習(xí)為例。
學(xué)習(xí)規(guī)劃路線
小編推薦的學(xué)習(xí)路線是這樣的,如下圖:
首先要了解這個(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)。打下基礎(chǔ)后,對(duì)機(jī)器學(xué)習(xí)已經(jīng)有了充足的了解,可以用機(jī)器學(xué)習(xí)來(lái)解決一個(gè)實(shí)際的問(wèn)題。
無(wú)論學(xué)習(xí)什么,都需要過(guò)硬的基礎(chǔ)知識(shí),以及較強(qiáng)的編碼能力,因此很能考察和鍛煉水平。經(jīng)過(guò)這個(gè)階段以后,可以說(shuō)是踏入AI領(lǐng)域的門(mén)了。“師傅領(lǐng)進(jìn)門(mén),修行在個(gè)人”。之后的路就要自己走了。
下面就是每個(gè)階段的具體介紹:
0. 領(lǐng)域了解
在學(xué)習(xí)任何一門(mén)知識(shí)之前,首先都是了解這個(gè)知識(shí)是什么?它能做什么事?它的價(jià)值在什么地方?如果不理解這些的話,那么學(xué)習(xí)本身就是一個(gè)沒(méi)有方向的舟,不知道駛向何處,也極易有沉船的風(fēng)險(xiǎn)。了解這些問(wèn)題后,你才能培養(yǎng)出興趣,興趣是最好的引路人,學(xué)習(xí)的動(dòng)力與持久力才能讓你應(yīng)付接下來(lái)的若干個(gè)階段。
1. 知識(shí)準(zhǔn)備
如果你離校非常久,或者覺(jué)得基礎(chǔ)不牢,最好是先準(zhǔn)備一下復(fù)習(xí)工作,“工欲善其事,必先利其器”。以下的準(zhǔn)備工作不多,但足以應(yīng)付后面階段的學(xué)習(xí)。
數(shù)學(xué):復(fù)習(xí)以下基本知識(shí);
線性代數(shù):矩陣乘法;
概率論:條件與后驗(yàn)概率。其他的一些知識(shí)可以在后面的學(xué)習(xí)的過(guò)程中按需再補(bǔ);
英文:常備一個(gè)在線英文詞典,例如愛(ài)詞霸,能夠不吃力的看一些英文的資料網(wǎng)頁(yè);
梯子:最好是可以隨時(shí)隨地的上Google,這是一個(gè)很重要的查詢工具。倒不是說(shuō)百度不能查不能看,而是大多數(shù)的情況下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í)的人。
3. 實(shí)踐做項(xiàng)目
在學(xué)完基礎(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)目是最好的。
4. 深度學(xué)習(xí)
深度學(xué)習(xí):深度學(xué)習(xí)是目前最火熱的研究方向。有以下特點(diǎn):知識(shí)更新快,較為零碎,沒(méi)有系統(tǒng)講解的書(shū)。因此學(xué)習(xí)的資源也相對(duì)零散,下面是一些資源介紹:
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)有的。
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é):如果是在以前,機(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)單“。
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)該以盡量以優(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è)備。
總結(jié)
首先你需要對(duì)這個(gè)領(lǐng)域進(jìn)行充分的了解,培養(yǎng)興趣。在學(xué)習(xí)的時(shí)候,保持著循序漸進(jìn)的方法,不要猛進(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)目而看;
如果一個(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)的最佳助力。