知乎上有一個(gè)關(guān)于“機(jī)器學(xué)習(xí)該怎么入門”的火熱問(wèn)題,在從事機(jī)器學(xué)習(xí)研究?jī)赡曛H,分享一下我的看法。絕對(duì)干貨哈!本文的宗旨是:1、指出一些自學(xué)誤區(qū) 2、推薦近年精品資料 3、分享切實(shí)可行的機(jī)器學(xué)習(xí)入門路線 4、給出進(jìn)階/深入研究的方法。0. 背景
本科時(shí)我是一個(gè)很貪玩的人,幾乎每個(gè)周末都不在學(xué)校待著,摻和在一群騎行、登山、旅行者的隊(duì)伍中。實(shí)驗(yàn)室有一次開組會(huì),老師提到了神經(jīng)網(wǎng)絡(luò),聽的我一頭霧水。怎么計(jì)算機(jī)學(xué)院的老師,還兼職搞起生物了?到了大三,我想著必須得學(xué)點(diǎn)什么了,不然畢不了業(yè),于是選擇了入門門檻較低的安卓開發(fā)。有幾個(gè)月,我每天在宿舍啃《第一行安卓代碼》,看b站的開發(fā)教程。最終做出了幾個(gè)還過(guò)得去的demo,比如訂票app和炸彈人小游戲:

空閑時(shí)我會(huì)寫寫博客,當(dāng)時(shí)分享的技術(shù)內(nèi)容也已安卓為主。
總的來(lái)說(shuō),本科時(shí)目標(biāo)比較模糊,機(jī)器學(xué)習(xí)0基礎(chǔ),以被動(dòng)學(xué)習(xí)為主;好在考研成功上岸,沒(méi)有完全荒廢。讀碩士后,發(fā)現(xiàn)身邊很多同學(xué)都在研究AI,CV、NLP、ASR各行其道,人工智能的烈火燒得正旺。因?yàn)槲規(guī)缀鯖](méi)有任何基礎(chǔ),只能從Python和理論部分學(xué)起。來(lái)實(shí)驗(yàn)室的最初3個(gè)月,我每天只做三件事:1.惡補(bǔ)python,2.看Andrew Ng的機(jī)器學(xué)習(xí)啟蒙課,3.學(xué)習(xí)爬蟲,幫師兄爬取訓(xùn)練語(yǔ)料。由于做爬蟲和文本分析的緣故,我對(duì)自然語(yǔ)言產(chǎn)生了興趣,能讓機(jī)器懂得文字的含義是很酷的一件事。于是我3個(gè)月后,我真正開始接觸NLP,從分詞、文本分類等底層任務(wù)做起。學(xué)習(xí)到現(xiàn)在2年的時(shí)間,我真正喜歡上了NLP研究。在科研和實(shí)習(xí)過(guò)程中,邊踩坑,邊收獲了一些發(fā)明專利和頂會(huì)論文,認(rèn)識(shí)了很多業(yè)界大咖;在前不久的校招中,成功拿下不少大廠的offer。以上是我大學(xué)期間的經(jīng)歷。以此為背景,這篇回答的目標(biāo)讀者主要是零基礎(chǔ)、想自學(xué)入門機(jī)器學(xué)習(xí)的朋友,包括:- 非計(jì)算機(jī)行業(yè)從業(yè)者
- 已工作想將機(jī)器學(xué)習(xí)和本職工作結(jié)合的朋友
1. 關(guān)于機(jī)器學(xué)習(xí)的誤區(qū)和陷阱
在分享具體方法前,我先談?wù)剻C(jī)器學(xué)習(xí)的常見誤區(qū),其中一些是自己踩過(guò)的坑。1.1 盲目報(bào)班
在這個(gè)日益內(nèi)卷的時(shí)代,得益于機(jī)器學(xué)習(xí)的前沿性和高薪資,很多人還是不顧一切的往“坑”里沖。龐大的市場(chǎng),讓很多AI培訓(xùn)課雨后春筍般涌現(xiàn)。
研一時(shí),實(shí)驗(yàn)室的一個(gè)同學(xué)在網(wǎng)易云課堂花了2000多元報(bào)了一門機(jī)器學(xué)習(xí)課程,上了沒(méi)幾節(jié)就放棄了。我薅了把羊毛,登他的號(hào)去上網(wǎng)課。結(jié)果發(fā)現(xiàn)每節(jié)課不過(guò)是用簡(jiǎn)單的PPT介紹了常見機(jī)器學(xué)習(xí)算法,最后用sklearn開源庫(kù)跑了一個(gè)簡(jiǎn)單demo。其內(nèi)容在任何一本機(jī)器學(xué)習(xí)書或免費(fèi)網(wǎng)課上都能找到。因三分鐘熱度和優(yōu)美的文案,很多時(shí)候我們稀里糊涂成了任人宰割的韭菜。我的建議是,不要盲目報(bào)班。先認(rèn)真想一想自己是否喜歡算法和編程?如果不確定或不希望盲目消費(fèi),建議你先嘗試著看完這篇文章。1.2 收集大量資料
關(guān)于機(jī)器學(xué)習(xí)的資料和書籍層出不窮。我見過(guò)很多同學(xué)從網(wǎng)上收集了一堆pdf資料,或者買了一籮筐的書,認(rèn)真地打開封面,合上,然后再也沒(méi)有看過(guò)。和知乎微調(diào)大佬的想法一致,在入門階段,建議“小而精”的選擇資料,選擇近期出版且口碑良好的書籍。量不在多,在精。這不僅有助于讀者腳踏實(shí)地學(xué)完這些資料,還能樹立信心,集中精力重點(diǎn)突破。在第三部分的機(jī)器學(xué)習(xí)入門階段中,我會(huì)介紹2本書2門網(wǎng)課,進(jìn)階階段推薦了4本書。
這些內(nèi)容我都認(rèn)真學(xué)習(xí)過(guò),如果你不想花錢,我可以幫助你免費(fèi)學(xué)到所有內(nèi)容。1.3 沒(méi)打好基礎(chǔ),不敢開始學(xué)習(xí)
很多書的前言部分,都備注了讀者需要具備概率論、編程等各項(xiàng)基礎(chǔ),導(dǎo)致一些同學(xué)沒(méi)打好基礎(chǔ)前,不敢開始學(xué)習(xí)。其實(shí)學(xué)習(xí)本不是一蹴而就的事兒,把高數(shù)、概率論、編程全過(guò)一邊再開始上手機(jī)器學(xué)習(xí),先不說(shuō)能不能堅(jiān)持下來(lái),時(shí)間性價(jià)比實(shí)在是太低了。換句話說(shuō),等你做好準(zhǔn)備,和你同期開始學(xué)習(xí)的同學(xué)可能已經(jīng)在大廠入職了。更好的方法是,邊學(xué)邊補(bǔ),哪里不會(huì)補(bǔ)哪里。在實(shí)踐中學(xué)習(xí),更容易保持動(dòng)力和干勁。1.4 求速成,狂奔式學(xué)習(xí)
和1.3相反,部分同學(xué)期望速成;刷完一節(jié)課兩本書,會(huì)調(diào)包,認(rèn)為自己已然玩捏于機(jī)器學(xué)習(xí)于股掌之中。然而,此言差矣。學(xué)習(xí)不是百米賽跑而是馬拉松。所謂基礎(chǔ)不牢,地動(dòng)山搖。作為技術(shù)人,對(duì)自身技術(shù)負(fù)責(zé),既是持續(xù)發(fā)展的必要條件也是職業(yè)道德。作為初學(xué)者,需要你穩(wěn)扎穩(wěn)打,在不敢開始和急于求成之間,尋找合適的度。2. 前期準(zhǔn)備
2.1 軟件設(shè)備
明確了誤區(qū),我們來(lái)做一些基礎(chǔ)的準(zhǔn)備工作。首先,你需要在電腦上安裝好相應(yīng)的編程環(huán)境。以運(yùn)行python為例,環(huán)境搭建方法有直接下載安裝包或下載Anaconda發(fā)行包,可以選擇的集成開發(fā)環(huán)境有pychram和VSCode,適合大中型項(xiàng)目開發(fā),debug非常方便。但入門階段,我建議下載Anaconda包,選擇交互式筆記本jupyter lab作為編程環(huán)境,可以分塊查看代碼運(yùn)行結(jié)果,不易出錯(cuò)。詳細(xì)安裝過(guò)程可以參考:Python安裝方法[1]、JupyterLab最全詳解,如果你還在使用Notebook,那你就out了![2]
關(guān)于操作系統(tǒng),首選Linux,對(duì)各種模型訓(xùn)練有最好的兼容性,而且使用GPU非常方便。mac和windows系統(tǒng)也可以做很多簡(jiǎn)單的機(jī)器學(xué)習(xí)實(shí)驗(yàn)。實(shí)際應(yīng)用中,開發(fā)大型機(jī)器學(xué)習(xí)項(xiàng)目一般通過(guò)VSCode或Pycharm,遠(yuǎn)程接入Linux服務(wù)器完成。2.2 硬件設(shè)備
個(gè)人筆記本電腦是完全可以入門機(jī)器學(xué)習(xí)的。最初1年的學(xué)習(xí),我在自己的15年老Mac Air上完成了很多實(shí)驗(yàn)分析。
關(guān)于一些大型項(xiàng)目,或者涉及神經(jīng)網(wǎng)絡(luò)需要GPU顯卡加速的情況,最簡(jiǎn)單的方法是“蹭”實(shí)驗(yàn)室或公司的計(jì)算資源。如果是咱們學(xué)生黨,既沒(méi)錢,實(shí)驗(yàn)室計(jì)算卡資源又不夠用,卻入了機(jī)器學(xué)習(xí)的門...別著急,我們還有白嫖方案:百度PaddleCloud和谷歌Colab平臺(tái),都提供了免費(fèi)的底層計(jì)算資源和GPU。谷歌Colab已經(jīng)把免費(fèi)卡升級(jí)到了P100和V100,薅羊毛快樂(lè)再次加倍!詳細(xì)可以戳:谷歌Colab有了V100加持,薅羊毛快樂(lè)再次加倍
3. 機(jī)器學(xué)習(xí)升級(jí)打怪
有了初始化裝備,游戲即將開始,請(qǐng)同學(xué)們抓緊跟上。3.1 入門,小試牛刀(精品資料分享) 3-6個(gè)月
入門機(jī)器學(xué)習(xí),前期需要掌握的基礎(chǔ)主要包括機(jī)器學(xué)習(xí)算法理論、coding、高數(shù)/線性代數(shù)/概率論。很多人推薦的《西瓜書》和《統(tǒng)計(jì)學(xué)習(xí)方法》,包含了大量數(shù)學(xué)推導(dǎo)和證明,我覺(jué)得并不太適合零基礎(chǔ)的讀者入門。結(jié)合自身學(xué)習(xí)經(jīng)驗(yàn),關(guān)于機(jī)器學(xué)習(xí)我推薦1門網(wǎng)課和1本精品書。網(wǎng)課部分,強(qiáng)烈建議看吳恩達(dá)機(jī)器學(xué)習(xí)系列課程。內(nèi)容側(cè)重于原理和工程實(shí)現(xiàn),對(duì)初學(xué)者友好。b站就能免費(fèi)觀看[3]。
有了理論基礎(chǔ),coding自然必不可少。下面推薦一本機(jī)器學(xué)習(xí)神書《Hands-on Machine Learning with Scikit-Learn, Keras, and TensorFlow》。書中介紹了大量經(jīng)典的機(jī)器學(xué)習(xí)算法,并且都給出了具體的實(shí)現(xiàn)案例。換句話說(shuō),通過(guò)這本書大家不僅收獲了原理,還鍛煉了編程,將算法進(jìn)行實(shí)踐應(yīng)用,一舉多得。Python是學(xué)習(xí)機(jī)器學(xué)習(xí)必不可少的工具之一。如果你是零基礎(chǔ),建議從《笨方法學(xué)python》入手,書中包含了Python最基礎(chǔ)重要的知識(shí)點(diǎn)。
如果不想看書,推薦一個(gè)Python在線學(xué)習(xí)博客:Python教程。[4]會(huì)有同學(xué)糾結(jié)一開始到底該學(xué)哪一門編程語(yǔ)言,C++,Python,Java?其實(shí)語(yǔ)言的學(xué)習(xí)有很多相通之處??梢詮南鄬?duì)簡(jiǎn)單的Python入手,后期結(jié)合實(shí)際需求,學(xué)習(xí)其他編程語(yǔ)言。至于高數(shù)/線性代數(shù)/概率論,我建議你跟著b站up主宋浩老師的課程就足夠了[5],有空時(shí)可以多刷幾集。宋老師的課幽默風(fēng)趣,通俗易懂,如果某節(jié)課的進(jìn)度條特別長(zhǎng),不用慌,大概率有段子!學(xué)完以上內(nèi)容,我相信你已經(jīng)對(duì)機(jī)器學(xué)習(xí)從理論和實(shí)踐上有了初步的認(rèn)識(shí)。前期掌握好基礎(chǔ)為后續(xù)學(xué)習(xí)提供了重要保證。對(duì)了,高數(shù)/線性代數(shù)/概率論的內(nèi)容特別多,學(xué)習(xí)過(guò)程可以貫穿機(jī)器學(xué)習(xí)的各個(gè)階段。3.2 進(jìn)階,初露鋒芒(選擇細(xì)分領(lǐng)域,熱身賽)3-5個(gè)月
經(jīng)過(guò)入門階段的學(xué)習(xí),這時(shí)候大家可以選擇性閱讀《西瓜書》、《花書》、《統(tǒng)計(jì)學(xué)習(xí)方法》,進(jìn)一步夯實(shí)基礎(chǔ)。機(jī)器學(xué)習(xí)包含了眾多細(xì)分領(lǐng)域,當(dāng)掌握前期基礎(chǔ)后,你可以結(jié)合興趣和實(shí)際,選擇一個(gè)細(xì)領(lǐng)域進(jìn)階強(qiáng)化。常見領(lǐng)域包括:純機(jī)器學(xué)習(xí)算法、自然語(yǔ)言處理、圖像識(shí)別、計(jì)算機(jī)視覺(jué)、語(yǔ)音識(shí)別、強(qiáng)化學(xué)習(xí)等,每個(gè)領(lǐng)域又可分為科研和工程兩條道路。科研偏學(xué)術(shù)研究,工程偏業(yè)務(wù)落地。
我在碩士期間主要從事自然語(yǔ)言處理研究,在進(jìn)階和3.3深入階段,我會(huì)以NLP為例進(jìn)一步談?wù)剻C(jī)器學(xué)習(xí)的i強(qiáng)化路線。NLP常和深度學(xué)習(xí)掛鉤,進(jìn)階部分我推薦3本近年的精品書單。第一本是《Python自然語(yǔ)言處理實(shí)戰(zhàn)》,書中包含分詞、命名實(shí)體識(shí)別、關(guān)鍵詞提取、句法分析、情感分析、基于深度學(xué)習(xí)的NLP算法等,同樣是理論和實(shí)戰(zhàn)相結(jié)合的一本書。
另外兩本分別是《Python深度學(xué)習(xí)》和《Pytorch深度學(xué)習(xí)》,掌握兩大深度學(xué)習(xí)主流框架Keras和Pytorch,能讓你方便地上手機(jī)器學(xué)習(xí)和深度學(xué)習(xí)項(xiàng)目。如果你感興趣的話,我可以把這兩本書和之前介紹的機(jī)器學(xué)習(xí)“神書”免費(fèi)分享給你啊,關(guān)注公眾號(hào)【NLP情報(bào)局】回復(fù)“三件套”,即可獲得。除了看書,這一階段我推薦大家參與一個(gè)和研究領(lǐng)域相關(guān)的算法比賽。比賽平臺(tái)包括國(guó)內(nèi)的阿里天池、DataFountain、biendata,國(guó)際的kaggle等,不僅可以通過(guò)一個(gè)完整的項(xiàng)目,在實(shí)際應(yīng)用中提升對(duì)算法的理解,還可能收獲不菲的獎(jiǎng)金哦。當(dāng)然一開始可能會(huì)碰到很多問(wèn)題,這里分享兩個(gè)秘訣:(1)和小伙伴組隊(duì)刷比賽,互相交流鼓勁,比單人solo收獲更大;(2)通過(guò)github、比賽交流群、搜索引擎等途徑,主動(dòng)尋找解決方案。2019年,我和室友參加了科大訊飛舉辦的應(yīng)用分類挑戰(zhàn)賽。這是我們第一次參加算法比賽,經(jīng)過(guò)2個(gè)月的討論和堅(jiān)持,獲得了第2名,也收獲了第一筆比賽獎(jiǎng)金。如果沒(méi)有合適的比賽,可以在博客或Github上找?guī)讉€(gè)合適的項(xiàng)目練手,先參考別人的方法和代碼,再自己實(shí)現(xiàn)一遍,你的思路一定會(huì)清晰很多。進(jìn)階階段,coding能力也得提一提。推薦這本豆瓣評(píng)分9.4的《流暢的Python》,閱讀時(shí)會(huì)感覺(jué)一個(gè)博學(xué)但溫柔的大叔在跟你侃侃而談??紤]到咱們學(xué)生黨資金有限,這兒我再分享一個(gè)“薅羊毛”的方法,讓你能免費(fèi)讀到這本書!微信讀書是一款非常好用的讀書app,除了文學(xué)小說(shuō),很多技術(shù)書籍也可以免費(fèi)閱讀。前兩天我剛下載了3本和Python有關(guān)的精品書。你可以先瀏覽一下目錄,如果有需要再購(gòu)買紙質(zhì)版本。
3.3 深入,如魚得水(比賽 / paper / 實(shí)習(xí) / 專利) 4-12個(gè)月
恭喜你!經(jīng)過(guò)兩個(gè)階段的學(xué)習(xí),你已經(jīng)具備了相當(dāng)不錯(cuò)的理論和實(shí)踐基礎(chǔ)。不過(guò),在越來(lái)越多人涌入機(jī)器學(xué)習(xí)的今天,當(dāng)前學(xué)習(xí)的內(nèi)容還不夠用。之前在創(chuàng)業(yè)公司實(shí)習(xí)期間,曾有幸?guī)椭久嬖嚵顺^(guò)30位985/211計(jì)算機(jī)相關(guān)專業(yè)的同學(xué),給我的一個(gè)感觸是:雖然從事機(jī)器學(xué)習(xí)的人很多,但真正能在某個(gè)領(lǐng)域深入鉆研,并有顯著學(xué)術(shù)產(chǎn)出 or 解決實(shí)際問(wèn)題能力的同學(xué),只是少數(shù)。那么,如何在某個(gè)領(lǐng)域深入鉆研呢?對(duì)于科研能力強(qiáng)(coding、英文寫作、思路敏捷)的同學(xué),可以在CCF-A頂會(huì)中發(fā)表paper。這是證明自己能力最簡(jiǎn)潔的方式。同實(shí)驗(yàn)室就有碩士期間發(fā)表7篇以上A類頂會(huì)的巨佬,還沒(méi)畢業(yè)就被阿里高薪挖走了╮(╯▽╰)╭當(dāng)然,發(fā)paper是有一定門檻的;已經(jīng)參加工作的讀者,更是很難擠出時(shí)間發(fā)表學(xué)術(shù)論文。如果對(duì)自己的實(shí)力和精力沒(méi)有清晰認(rèn)識(shí),很有可能付出和產(chǎn)出不成正比。通過(guò)實(shí)習(xí)提升工程實(shí)踐和解決實(shí)際問(wèn)題能力的門檻相對(duì)低一些,是適合大部分同學(xué)(例如像我這樣零基礎(chǔ))深入鉆研的方式。作為商業(yè)公司,無(wú)論技術(shù)多么酷炫,如果不能落地,缺乏足夠多的業(yè)務(wù)支撐,很容易被競(jìng)爭(zhēng)對(duì)手擊斃。所以企業(yè)對(duì)于候選人的實(shí)習(xí)和項(xiàng)目經(jīng)歷都相當(dāng)重視。除此之外,在知名比賽中獲得Top5,發(fā)表發(fā)明專利,也是研究產(chǎn)出的優(yōu)良證明。這兩部分我之后會(huì)另開文章介紹。切記,無(wú)論處于學(xué)習(xí)的哪個(gè)階段,碰到問(wèn)題要學(xué)會(huì)主動(dòng)學(xué)習(xí)、主動(dòng)解決問(wèn)題,熟練運(yùn)用Github、技術(shù)博客等工具。為了保持技術(shù)和視角的前沿性,建議大家適當(dāng)讀一些論文,途徑包括訂閱Arxiv,關(guān)注機(jī)器學(xué)習(xí)頂級(jí)會(huì)議,如ICML/ACL/NIPS等。4. 心里話
寫了快5500字,分享也接近尾聲了,還有什么不明白的地方可以在公號(hào)后臺(tái)或加微信告訴我,我都會(huì)看到,也會(huì)盡力解答。機(jī)器學(xué)習(xí)是一門多領(lǐng)域交叉學(xué)科,涉及計(jì)算機(jī)基礎(chǔ)、統(tǒng)計(jì)學(xué)甚至心理學(xué),從零入門肯定是艱苦的。你需要經(jīng)歷一段孤獨(dú)、勞累、高飽和的學(xué)習(xí)奮斗期,打磨好自己的基礎(chǔ),才能和名?;蚩瓢喑錾淼耐瑢W(xué)PK。所謂高風(fēng)險(xiǎn),高回報(bào),這又是一條非常有前景的道路。因?yàn)橐詸C(jī)器學(xué)習(xí)為核心的人工智能是大勢(shì)所趨,有很大的應(yīng)用市場(chǎng)。不僅是大廠,很多和新興科技創(chuàng)業(yè)公司都急缺機(jī)器學(xué)習(xí)相關(guān)人才;高門檻確保你的薪資待遇不會(huì)差。
所以當(dāng)你內(nèi)心有目標(biāo)和夢(mèng)想的時(shí)候,不要害怕失敗,勇敢的嘗試一次吧。趁年輕,多多學(xué)習(xí),給自己多一次機(jī)會(huì),有何不可呢!當(dāng)然,以上內(nèi)容主要是我自身的學(xué)習(xí)方法總結(jié),不一定適合所有人。大家還是需要慢下來(lái),好好想一想,調(diào)好心態(tài),制定適合自己的學(xué)習(xí)計(jì)劃。想好之后,朝著既定目標(biāo)努力前進(jìn)吧。正像李宗盛大哥唱的那樣,“不經(jīng)歷風(fēng)雨,怎能見彩虹,沒(méi)有人能隨隨便便成功!” 共勉。推 薦 閱 讀
參 考 文 獻(xiàn)
[1] Python安裝方法:https://zhuanlan.zhihu.com/p/345932168[2] JupyterLab最全詳解,如果你還在使用Notebook,那你就out了!:https://zhuanlan.zhihu.com/p/154515490
[3] 吳恩達(dá)機(jī)器學(xué)習(xí)系列課程:https://www.bilibili.com/video/BV164411b7dx?p=1
[4] Python教程:https://www.liaoxuefeng.com/wiki/1016959663602400
[5] 宋浩高數(shù)/概率論/線性代數(shù):https://search.bilibili.com/all?keyword=%E5%AE%8B%E6%B5%A9&from_source=nav_suggest_new
歡 迎 關(guān) 注 我 們??
原創(chuàng)不易,有收獲的話請(qǐng)幫忙點(diǎn)擊點(diǎn)贊、分享、在看吧??