如何開(kāi)始接觸機(jī)器學(xué)習(xí)?方法統(tǒng)統(tǒng)分享給你
一說(shuō)到機(jī)器學(xué)習(xí),我被問(wèn)得最多的問(wèn)題是:給那些開(kāi)始學(xué)習(xí)機(jī)器學(xué)習(xí)的人的最好的建議是什么?
本文引用地址:http://cafeforensic.com/article/201805/379929.htm其實(shí)說(shuō)句實(shí)話,我并不知道怎么回答這個(gè)問(wèn)題。每一個(gè)學(xué)習(xí)者都是獨(dú)一無(wú)二的個(gè)體,有自己的學(xué)習(xí)需求和目的。我所能做的,就是分享一下當(dāng)初我開(kāi)始學(xué)習(xí)機(jī)器學(xué)習(xí)的時(shí)候,對(duì)我很有用的方法。
我是如何開(kāi)始接觸機(jī)器學(xué)習(xí)的
讓時(shí)間回到2017年,我看到了SethBling實(shí)現(xiàn)機(jī)器學(xué)習(xí)來(lái)玩游戲的一個(gè)小演示。
Sethbling-Marl/O-Machine Learing for Video Games
這個(gè)小機(jī)器人有了自主學(xué)習(xí)的能力,甚至可以一次又一次地玩馬里奧游戲,當(dāng)時(shí)我就震驚了。在那之后,我看到了別的使用神經(jīng)網(wǎng)絡(luò)的機(jī)器人,被用于各種不同的游戲——
Ding Nicolas-A genetic algorithm learns how to fight!
從 Caryhk 傳統(tǒng)的機(jī)器學(xué)習(xí)項(xiàng)目
carykh-Neural Networks and Unwanted Pregnancies in Evolv.io!
到星際機(jī)器學(xué)習(xí)項(xiàng)目——
Youtube Uploaded-AI SC2 FirstSteps
有些人還做了關(guān)于侃爺 Rap 的 LSTM 項(xiàng)目
Rabboie Barrat-Neural Network Generated Rap, V2
還有Dota2的Open AI
Dota 2 Dendi vs OpenAI(Bot)-1v1-T17
sentdex 制作的 GTA
sentdex-Stream, FPV, and more dada-Python plays GTA P.15
我知道我必須要去學(xué)機(jī)器學(xué)習(xí),這玩意兒簡(jiǎn)直太酷了。
我安裝了TensorFlow,從syntax上下載了些代碼,但是完全不知道代碼里是怎么一回事,神經(jīng)網(wǎng)絡(luò)的確成功地使用大量的數(shù)據(jù)集,訓(xùn)練了模型,但我對(duì)代碼所做的每一次修改都會(huì)報(bào)錯(cuò),部分是因?yàn)?nbsp;Python的語(yǔ)法我之前完全沒(méi)接觸過(guò),更為重要的是,我完全不知道該怎么寫(xiě)神經(jīng)網(wǎng)絡(luò)。
我先是快速Google了一下“怎樣寫(xiě)一個(gè)神經(jīng)網(wǎng)絡(luò)?”,我發(fā)現(xiàn)了一個(gè)由完全聽(tīng)不同的數(shù)學(xué)和符號(hào)組成的龐然大物,對(duì)我而言看上去就像是外星語(yǔ),那時(shí)我感覺(jué)到了強(qiáng)烈的挫敗感,但我不達(dá)目的誓不罷休。就在那時(shí)我接觸到了Coursera上吳恩達(dá)的機(jī)器學(xué)習(xí)課程,我的天,那個(gè)課程同樣也是外星語(yǔ),我能夠完成前幾章課程完全沒(méi)有問(wèn)題,但那之后,吳恩達(dá)又開(kāi)始講外星語(yǔ)了。
我是如何堅(jiān)持下去的
同志們,如果像我這樣開(kāi)始機(jī)器學(xué)習(xí)旅程,毫無(wú)疑問(wèn)你會(huì)碰到一次巨大的詞匯沖擊。相信我,你大多數(shù)的困惑是因?yàn)闊o(wú)法理解提及的單詞所引起的。當(dāng)我意識(shí)到這個(gè)之后,我改變了我學(xué)習(xí)方法,轉(zhuǎn)而去學(xué)習(xí)這個(gè)龐大的外星語(yǔ)。在我學(xué)習(xí)的過(guò)程中,有很多術(shù)語(yǔ)和符號(hào)會(huì)反復(fù)出現(xiàn):向量,矩陣,激活函數(shù)傳播,機(jī)器學(xué)習(xí)等等。我在“向量”這個(gè)概念上花了一段時(shí)間,感謝 unity3D,每當(dāng)我覺(jué)得理解了機(jī)器學(xué)習(xí)中的一些概念,比如矩陣乘法,我都會(huì)回到我最喜歡的機(jī)器學(xué)習(xí)資源,去看看它們對(duì)于我來(lái)說(shuō),是不是變得容易理解了。我很驚訝突然之間,我能夠稍微更好地理解這門(mén)外星語(yǔ)了。
每當(dāng)有概念毫無(wú)頭緒讓我止步不前,我都會(huì)把他們單獨(dú)拿出來(lái),舉個(gè)例子,當(dāng)我遇到sigmoid或者其他的激活函數(shù),我就會(huì)列出一堆困擾我的問(wèn)題,然后一個(gè)個(gè)單獨(dú)查找。
說(shuō)到這,我非常推薦可汗學(xué)院.com。這里有所有在你寫(xiě)自己的機(jī)器學(xué)習(xí)算法所要用到的。我在這里列出了一些你需要去學(xué)習(xí)的很重要的數(shù)學(xué)課供你參考,對(duì)我個(gè)人而言,幫助很大。
我個(gè)人很喜歡的學(xué)習(xí)資源:
Activation Functions - https://en.wikipedia.org/wiki/Activation_function
Luis Serrano's Neural Network Series (REALLY GOOD) - https://www.youtube.com/watch?v=UNmqTiOnRfg
Giant_Neural_Network's Neural Network Series (REALLY GOOD) - https://www.youtube.com/watch?v=ZzWaow1Rvho
Macheads101's Neural Network series - https://www.youtube.com/watch?v=OypPjvm4kiA
3Blue1Brown's Neural Network Series - https://www.youtube.com/watch?v=aircAruvnKk
Hugo's Neural Network Series - http://www.mooc.ai/course/300
James Mccaffrey Talk (A BIT OUTDATED INFORMATION BUT STILL A FUN ONE)- https://www.youtube.com/watch?v=-zT1Zi_ukSk
一些很重要的數(shù)學(xué)課
Vectors (explained with Linear Algebra): https://www.khanacademy.org/math/linear-algebra/vectors-and-spaces
Vectors (explained with PreCal): https://www.khanacademy.org/math/precalculus/vectors-precalc
Matrices: https://www.khanacademy.org/math/precalculus/precalc-matrices
Sequences: https://www.khanacademy.org/math/precalculus/seq-induction
Derivative Rules: h https://www.khanacademy.org/math/ap-calculus-bc/bc-derivative-rules
一些可能會(huì)幫助到你的數(shù)學(xué)課
Algebra Functions: https://www.khanacademy.org/math/algebra/algebra-functions
Quadratics: https://www.khanacademy.org/math/algebra/quadratics
Irrational: https://www.khanacademy.org/math/algebra/rational-and-irrational-numbers
Analyzing Categorical Data: https://www.khanacademy.org/math/statistics-probability/analyzing-categorical-data
我的建議
(1)更好地理解偽代碼
我覺(jué)得學(xué)習(xí)如何寫(xiě)機(jī)器學(xué)習(xí)算法最好的方法,就是去更好地理解偽代碼。我們要理解如何去計(jì)算它們,還有各種不同的能夠相互轉(zhuǎn)換的指數(shù)。在我的經(jīng)驗(yàn)里,大多數(shù)情況下,偽代碼是十分清晰的。但如果不是的話,可能是因?yàn)樵谕庑钦Z(yǔ)中出現(xiàn)的太頻繁了。
學(xué)習(xí)怎樣將偽代碼轉(zhuǎn)換成你最喜歡的編程語(yǔ)言,其實(shí)是最重要的事。其實(shí)沒(méi)有一個(gè)一碼通吃的神經(jīng)網(wǎng)絡(luò),實(shí)際上當(dāng)你從不同的老師那里學(xué)習(xí)怎樣寫(xiě)神經(jīng)網(wǎng)絡(luò)的時(shí)候,請(qǐng)一定要注意,他們不會(huì)總是使用同樣數(shù)量的輸入,隱藏層節(jié)點(diǎn),激活函數(shù),可能連術(shù)語(yǔ)都不一樣,有些老師可能會(huì)把偏置說(shuō)成另一個(gè)詞,這就是偽代碼如此重要的原因。
(2)前饋神經(jīng)網(wǎng)絡(luò)例子
除了之前所說(shuō)的我能給你最好的建議,就是用一個(gè)簡(jiǎn)單的前饋神經(jīng)網(wǎng)絡(luò)例子來(lái)開(kāi)始你的學(xué)習(xí),這有一個(gè)很好的例子——做一個(gè)文字顏色預(yù)測(cè)器,當(dāng)你提供給它,紅,綠,藍(lán)值作為輸入的時(shí)候,嘗試去訓(xùn)練它作出,在此之上應(yīng)該使用深色字還是淺色字,讓它能夠可以被認(rèn)出來(lái)的預(yù)測(cè)。我覺(jué)得這是個(gè)很好的有很簡(jiǎn)單的項(xiàng)目,值得認(rèn)真研究以此來(lái)學(xué)習(xí)機(jī)器學(xué)習(xí)的基礎(chǔ)。
(3)立刻開(kāi)始著手
建議你從最開(kāi)始就著手寫(xiě)你的神經(jīng)網(wǎng)絡(luò),我指的是你學(xué)習(xí)的第一天,就在這個(gè)視頻結(jié)束的時(shí)候,立刻打開(kāi)你的IDE。紙上得來(lái)終覺(jué)淺,絕知此事要躬行。盡管理論上知道,如何寫(xiě)神經(jīng)網(wǎng)絡(luò)很酷,但實(shí)際去寫(xiě)一個(gè)神經(jīng)網(wǎng)絡(luò)是完全不同的。
當(dāng)你開(kāi)始去寫(xiě)一個(gè)神經(jīng)網(wǎng)絡(luò)的時(shí)候,你會(huì)卡住,然后你就有了第一個(gè)需要去找的問(wèn)題,嘗試去解決它,如此往復(fù),直到你成功。我特別希望,從最一開(kāi)始我就知道這個(gè)建議,這可能會(huì)減少我大部分學(xué)習(xí)的時(shí)間。
(4)站在巨人的肩膀上
如果你真的想要能夠很好地寫(xiě)出機(jī)器學(xué)習(xí)算法,你需要依靠他人的研究和代碼,因?yàn)槭聦?shí)上這其實(shí)還是一個(gè)剛起步的領(lǐng)域,每周都會(huì)有新的東西誕生。
最后一個(gè)我想給你們的重要建議是,其實(shí)你也可以不像我之前說(shuō)的那樣做,形象點(diǎn)來(lái)說(shuō),機(jī)器學(xué)習(xí)就好像電腦一樣。如果你真的想要一臺(tái)電腦,你可以從頭組裝一臺(tái),或者你也可以直接買(mǎi)一臺(tái)整機(jī),這兩件事最后的結(jié)果是一樣的。我個(gè)人想要去學(xué)習(xí)如何從頭構(gòu)建神經(jīng)網(wǎng)絡(luò)因?yàn)?,我是個(gè)控制欲很強(qiáng)的瘋子。
有很多諸如,TensorFlow,PyTorch,Theano,Keras,和其他的機(jī)器學(xué)習(xí)框架,他們就好像是一臺(tái)裝好的電腦,你可以直接開(kāi)始看教程,開(kāi)始學(xué)習(xí)怎樣去使用它們,你不需要關(guān)心很多,諸如導(dǎo)數(shù),矩陣乘法,激活函數(shù)這些概念,這些機(jī)器學(xué)習(xí)框架已經(jīng)把大多數(shù)復(fù)雜的事情做好了,不過(guò)顯而易見(jiàn)的,以此為代價(jià)的就是,當(dāng)網(wǎng)絡(luò)內(nèi)部出現(xiàn)問(wèn)題,或者運(yùn)行不正確時(shí),找出哪里出現(xiàn)問(wèn)題,會(huì)是件很困難的事,這都取決于你想要什么。
不管怎么樣,請(qǐng)一定要記得滿足你的好奇心,在機(jī)器學(xué)習(xí)的道路上走得越來(lái)越遠(yuǎn)。
評(píng)論