如果你決定開始學機器學習,并且按照常規(guī)的方式開始學習,那么很可能出現(xiàn)這樣的情況:學習線性代數(shù)和多變量微積分兩周后就選擇放棄。
原因在于,大多數(shù)機器學習的入門材料不是面向開發(fā)者的,而是面向機器學習研究人員開發(fā)的,而對于只想使用機器學習來構建產(chǎn)品的開發(fā)者來說,這些材料未免太難了。
你是想只想做產(chǎn)品還是想做研究?在20年代末,機器學習或多或少只是一個學術研究問題,在實際產(chǎn)品中使用機器學習的公司并不多。
因此,很多機器學習的入門資料都是從這個學術研究的角度出發(fā),它首先從數(shù)學的角度解釋了神經(jīng)網(wǎng)絡、機器學習背后的理論知識、反向傳播和對抗性網(wǎng)絡等等。
即使不是屬于大學課程的學習資料也是沿用了這個模式,例如,這句直接摘自Tensor Flow的中的一句話:
很顯然,如果你已經(jīng)掌握了機器學習背后的數(shù)學知識或者你對學習機器學習本來充滿了興趣,那么這種學習方法對你來說會是可行的。但是,如果你主要是想在構建產(chǎn)品加入機器學習,那么這可能不是你需要的。
就好比你想學習程序設計,這種方法就像先學習匯編代碼,然后學習寫代碼,事實是幾乎沒有面向產(chǎn)品的開發(fā)者是這樣學習的。
當你學習代碼時,你很可能是通過使用高級語言寫“hello world”來入門的,然后,當項目變得稍微復雜了些,你會按照需求學習越來越多的低級編程。
如果你在構建自動推薦引擎和發(fā)表論文,那么你就應該去學習機器學習本身,如果只是想構建產(chǎn)品,那么你需要通過構建軟件來學習機器學習。
如何通過構建軟件來學習機器學習如果你喜歡通過線上課程來學習,那么最好的資源或許就是fast.ai的Practial Deep Learning For Coders,fast.ai是最有發(fā)言權的機器學習倡導者,它推薦使用自上而下、理論實踐相結(jié)合的學習方法來學習機器學習。
課程鏈接:
https://course.fast.ai/
當然,這篇文章的目的不是為fast.ai做廣告,只是想說fast.ai的創(chuàng)始人Jeremy Howard和Rachel Thomas成功地把幾門課程整合在一起,這些課程讓開發(fā)者構建產(chǎn)品、深入了解項目相關的底層邏輯。
另外,如果你是那種通過深入了解并且自己構建知識體系,以此可以達到最大的學習效果的人,那么學習機器學習就和你學過的編程語言一樣。挑選一個聽起來讓你感興趣的項目,并深入其中學習就可以了。
這里推薦一種熟悉機器學習的好方法:
確定目標,例如構建文本自動填充器或車牌識別器。
找到一個適合你項目的預訓練模型,比如用GPT2和YOLOv3分別適用于前面提到的文本自動填充器和車牌識別器。
如果你覺得太復雜了,你甚至可以使用GPT2-simple這樣的庫來微調(diào)你的模型(根據(jù)數(shù)據(jù)集定制)。
最后,將你的模型部署成一項小型應用。
一旦你有了一個API接口的模型,你就可以像其他查詢web服務一樣,并且圍繞它構建你的應用程序。
通過這種學習方法,可以促使你了解到不同流行的模型構架和機器學習的方法,以及它們的使用場景。同樣重要的是,你將學習機器學習基礎構架,這對構建真實的產(chǎn)品至關重要。
學會構建產(chǎn)品后可以回頭再學習理論如果你是一名工程師,你可能已經(jīng)學習過實現(xiàn)了某種形式的身份驗證,這意味著你很可能用過散列密碼。
那么當你設置散列密碼時,你是否有自定義散列算法?你花了幾周時間去研究密碼學?還是說你只是使用內(nèi)置的加密算法bcrypt。
同樣,當你構建你的第一個Web應用程序時,你是否花了幾周時間去學習數(shù)據(jù)庫?你是否從頭開始編寫自己的數(shù)據(jù)庫?還是說使用了你最喜歡的框架所附帶的ORM?
這些問題的邏輯同樣也適用于機器學習,如果你是那種喜歡構建軟件的人,那就從構建軟件開始,從工具、預訓練模型和機器學習框架中抽象出底層的機器學習理論。如果你依然很好奇或者你的項目需要更高的復雜度,那就深入進去,看看這一切是如何運作的。