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