本文想要告訴你,程序員可以進(jìn)入機(jī)器學(xué)習(xí)領(lǐng)域。我會告訴你學(xué)習(xí)機(jī)器學(xué)習(xí)就像學(xué)習(xí)其他任何一門技術(shù)一樣。我們會首先將學(xué)習(xí)機(jī)器學(xué)習(xí)和編程進(jìn)行對比,這本身就是一向更大的挑戰(zhàn)。
想要學(xué)習(xí)編碼的設(shè)計(jì)師
設(shè)想你是一個(gè)設(shè)計(jì)師,一個(gè)經(jīng)驗(yàn)不多的設(shè)計(jì)師。你使用類似Photoshop的工具,切圖并且轉(zhuǎn)換成CSS。你的身邊都是程序員,或許你也羨慕他們的編碼能力。你想要學(xué)習(xí)編程。不管對錯(cuò),你認(rèn)為CSS和HTML是“實(shí)踐編碼”,是一種創(chuàng)意的表達(dá),但是編程,和你的創(chuàng)意相比,完全是另外一回事。
你跑到Quora和StackOverflow去提類似于“我是一個(gè)設(shè)計(jì)師,如何學(xué)習(xí)編程?”這樣的問題。
你得到一堆不著邊際的回答。你得到貌似高手的程序員奉上免費(fèi)的建議“學(xué)習(xí)C和指針”,“學(xué)習(xí)二進(jìn)制”,“買一本ASM的書”,“先學(xué)LIST”??赡軙幸粋€(gè)雄辯家寫了長篇大論來說服你買一本Knuth的《編程藝術(shù)》1-3卷。你接受了他的建議,只看了介紹就從Amazon買了那書,然后覺得自己學(xué)不會編程是因?yàn)樽约翰粔蚵斆?,并且在接下來?個(gè)月中重復(fù)著向同的過程。
發(fā)生了什么?建議看起來沒問題呀?
問提出在建議過時(shí)了。這樣的建議來自從他們自己的角度考慮問題的程序員,并且是關(guān)于已經(jīng)是程序員的人如何做得更好。這樣的建議沒有考慮一個(gè)完全的新手的情況,好比一個(gè)僅有一點(diǎn)興趣的業(yè)余選手正在試探水溫,看看是否適合游泳。
現(xiàn)在我承認(rèn),情況有一點(diǎn)不一樣了。這種場景已經(jīng)被重視,并且已經(jīng)有針對這種場景的服務(wù)了。例如:教人如何編程。
當(dāng)然,我們也需要學(xué)習(xí)指針,ASM,LISP甚至閱讀Knuth的著作(我相信不會有人一頁一頁的讀的),那是稍后的事情了。那如何開始呢?我是通過改造一些東西,嘗試一些東西,來體驗(yàn),創(chuàng)造和學(xué)習(xí)。我會把深挖技術(shù)的部分往后放,因?yàn)槲蚁雱?chuàng)造更大規(guī)模,更好,更強(qiáng)大的程序。我沒有從技術(shù)的細(xì)節(jié)入手。我認(rèn)為這種經(jīng)驗(yàn)和當(dāng)前大部分程序員是相似的,這和你的相似么?在評論中告訴我。
想要學(xué)習(xí)機(jī)器學(xué)習(xí)的程序員
現(xiàn)在正在閱讀這篇文章的你,很可能是個(gè)程序員或某方面的開發(fā)人員。想想你在機(jī)器學(xué)習(xí)方面的興趣。你有看到過專業(yè)的機(jī)器學(xué)習(xí)領(lǐng)域的專家給你免費(fèi)的如何開始的建議嗎?
我已經(jīng)搜索并且閱讀了這樣的建議,有用的很少。如下是我收集的一部分。
學(xué)習(xí)機(jī)器學(xué)習(xí)需要具備那些數(shù)學(xué)知識?
你需要熟練使用線性代數(shù)(向量和矩陣)并且懂得指數(shù)和對數(shù)。
如果你想簡單一點(diǎn),你至少需要知道線性代數(shù)中的特征項(xiàng)量。
對于機(jī)器學(xué)習(xí),很強(qiáng)的數(shù)學(xué)功底真的這么重要嗎?
你的確需要熟悉一些概率,線性代數(shù),線性編程,多變量微積分的東西。
對于機(jī)器學(xué)習(xí),哪些技能是必須的呢?
第一,你要有個(gè)相當(dāng)?shù)挠?jì)算機(jī)/數(shù)學(xué)背景。機(jī)器學(xué)習(xí)是一個(gè)高級玩意,所以大多數(shù)文檔都假設(shè)你有這樣的背景。
統(tǒng)計(jì)學(xué),概率,分布式計(jì)算。
有一些好的建議,但是這些建議對于一個(gè)完全的新手是否合適?是否適合那些正在試探水溫的程序員?
有可能大家在問一個(gè)錯(cuò)誤的問題。并且,我已經(jīng)摘取了在回答中提到學(xué)習(xí)機(jī)器學(xué)習(xí)必須先學(xué)習(xí)數(shù)學(xué)的片段。我需要指出的是,如果一個(gè)初學(xué)者把大量時(shí)間花在他們不具備的條件和無法做到的事情上,他們會過早得放棄,而那時(shí),他們甚至都沒有是個(gè)。
很好的掌握線性代數(shù)和概率論對進(jìn)入機(jī)器學(xué)習(xí)領(lǐng)域是一個(gè)很好的基礎(chǔ),我完全同意。對多階分析《統(tǒng)計(jì)元素》是一本很棒的書,我完全同意。我只是不贊成學(xué)習(xí)機(jī)器學(xué)習(xí)的第一步應(yīng)該是學(xué)一門數(shù)學(xué)課程或讀一套領(lǐng)域中相當(dāng)深奧的理論。實(shí)際上,我強(qiáng)烈的反對這樣。
兩個(gè)機(jī)器學(xué)習(xí)領(lǐng)域
機(jī)器學(xué)習(xí)有兩個(gè)方面:
機(jī)器學(xué)習(xí)實(shí)踐:這會涉及數(shù)據(jù)查詢,數(shù)據(jù)清洗,編寫用于轉(zhuǎn)換數(shù)據(jù)的腳本和把算法和庫連接起來和寫一些代碼來解決困難的定義不清的命題。這個(gè)都是現(xiàn)實(shí)中的。
機(jī)器學(xué)習(xí)理論:這會涉及數(shù)學(xué),抽象,理想方案,極限,美學(xué)和可行性判斷。這個(gè)相對純粹并且脫離現(xiàn)實(shí)。
沒有了理論部分的支持,實(shí)踐部分便失去了框架和嚴(yán)謹(jǐn)性。沒有了實(shí)踐部分,理論就失去了意義和動力。將這兩者分開說是行不通的,這真的是一個(gè)有很多工具,很多公式的領(lǐng)域,跟著我就好了。