看似一望無際、高深難懂而又時刻更新的數據科學知識,該怎樣學才更高效呢?但願讀過本文後,你能得到一些幫助。git
週五下午,我給本身的研究生開組會。主題是工做坊教學,嘗試搭建本身的第一個深度神經網絡。程序員
參考資料是個人文章《如何用Python和深度神經網絡發現即將流失的客戶?》。我帶着學生們從下載最新版Anaconda安裝包開始,直到完成第一個神經網絡分類器。github
過程涉及編程虛擬環境問題,他們參考了《如何在Jupyter Notebook中使用Python虛擬環境?》一文,比較順利地掌握瞭如何在虛擬環境裏安裝軟件包和執行命令。算法
我要求他們,一旦遇到問題就當即提出。我幫助解決的時候,全部人圍過來一塊兒看解決方案,以提高效率。編程
我給學生們介紹了神經網絡的層次結構,而且用Tensorboard可視化展現。他們對神經網絡和傳統的機器學習算法(師兄師姐答辯的時候,他們聽過,有印象)的區別不是很瞭解,我就帶着他們一塊兒玩兒了一把深度學習實驗場。微信
看着本來傻乎乎的直線繞成了曲線,而後從開放到閉合,把平面上的點根據內外區分,他們都很興奮。還錄了視頻發到了微信朋友圈。網絡
欣喜之餘,一個學生不無擔心地問我:框架
老師,我如今可以把樣例跑出來了,可是裏面有不少內容如今還不懂。這麼多東西該怎麼學呢?機器學習
我以爲這是個很是好的問題。編程語言
對於非IT類本科畢業生,尤爲是「文科生」(定義見這裏),讀研階段若要用到數據科學方法,確實有不少知識和技能須要補充。他們中很多人所以很焦慮。
可是焦慮是沒有用的,不會給你一絲一毫完善和進步。學會拆解和處理問題,纔是你不斷進步的保證。
這篇文章,我來跟你談一談,看似一望無際、高深難懂而又時刻更新的數據科學知識,該怎樣學才更高效。
許多讀者曾經給我留言,詢問過相似的問題。所以我把給本身學生的一些建議分享給你,但願對你也有一些幫助。
你以爲本身在數據科學的知識海洋裏面迷失,是由於套用的學習模式不對。
從上小學開始,你就習慣了把要學習的內容當成學科知識樹,而後系統地一步步學完。前面若是學很差,必然會影響後面內容的理解消化。
知識樹的學習,也必須全覆蓋。不然考試的時候,一旦考察你沒有掌握的內容,就會扣分。
學習的進程,有教學大綱、教材和老師來負責一步步餵給你,而且督促你不斷預習、學習和複習。
如今,你忽然獨自面對一個新的學科領域。沒了教學大綱和老師的方向與進度指引,教材又如此繁多,根本不知道該看哪一本,茫然無措。
其實若是數據科學的知識是個凝固的、靜態的集合,你又有無限長的學習時間,用原先的方法來學習,也挺好。
可現實是,你的時間是有限的,數據科學的知識倒是突飛猛進。今年的熱點,興許到了明年就會退潮。深度學習專家Andrej Karpathy評論不一樣的機器學習框架時說:
Matlab is so 2012. Caffe is so 2013. Theano is so 2014. Torch is so 2015. TensorFlow is so 2016. :D
怎麼辦呢?
你須要以目標導向來學習。
例如說,你手頭要寫的論文裏,須要作數據分類。那你就研究分類模型。
分類模型屬於監督學習。傳統機器學習裏,KNN, 邏輯迴歸,決策樹等都是經典的分類模型;若是你的數據量很大,但願用更爲複雜而精準的模型,那麼能夠嘗試深度神經網絡。
若是你要須要對圖片進行識別處理,便須要認真學習卷積神經網絡(Convolutional Neural Network),以便高效處理二維圖形數據。
若是你要作的研究,是給時間序列數據(例如金融資產價格變更)找到合適的模型。那麼你就得認真瞭解遞歸神經網絡(recurrent neural network),尤爲是長短時間記憶(Long short-term memory, LSTM)模型。這樣用人工智能玩兒股市水晶球才能遊刃有餘。
但若是你目前尚未明確的研究題目,怎麼辦?
沒關係。能夠在學習中,以案例爲單位,不斷積累能力。
實踐領域需求旺盛,數據科學的內容又過於龐雜,近年來MOOC上數據科學類課程的發展,愈來愈有案例化趨勢。
一貫以技術培訓類見長的平臺,如Udacity, Udemy等自沒必要說。就連從高校生長出來的Coursera,也大量在習題中加入實際案例場景。Andrew Ng最新的Deep Neural Network課程就是很好的例證。
我以前推薦過的華盛頓大學機器學習課程,更是很是激進地在第一門課中,經過案例完整展現後面若干門課的主要內容。
注意,學第一門課時,學員們對於相關的技術(甚至是術語)還一無所知呢!
然而你把代碼跑完,出現告終果的時候,真的會由於不瞭解和掌握細節就一無所得嗎?
固然不是。
退一萬步說,至少你見識了能夠用這樣的方法成功解決該場景的問題。這就叫認知。
告訴你一個小竅門:在生活、工做和學習中,你跟別人比拼的,基本上都是認知。
你得到了認知後,能夠快速瞭解整個領域的概況。知道哪些知識對本身目前的需求更加劇要,學習的優先級更高。
比案例學習更高效的「找目標」方式,是參加項目,動手實踐。
動手實踐,不斷迭代的原理,在《如何高效學Python?》和《創新怎麼教?》文中我都有詳細分析,歡迎查閱。
這裏我給你講一個真實的例子。
個人一個三年級研究生,本科學的是工商管理。剛入學的時候按照個人要求,學習了密歇根大學的Python課程,而且拿到了系列證書。可是很長的一段時間裏,他根本就不知道該怎麼實際應用這些知識,論文天然也寫不出來。
一個偶然的機會,我帶着他參加了另外一個老師的研究項目,負責技術環節,作文本挖掘。由於有了實際的應用背景和嚴格的時間限定,他學得很用心,乾得很是起勁兒。以前學習的技能在此時真正被激活了。
等到項目圓滿結束,他主動跑來找我,跟我探討可否把這些技術方法應用於本學科的研究,寫篇小論文出來。
因而我倆一塊兒肯定了題目,設計了實驗。而後我把數據採集和分析環節交給了他,他也很完滿地作出告終果。
有了這些經驗,他意識到了本身畢業論文數據分析環節的缺失,因而又順手改進了畢業論文的分析深度。
剛好是週五工做坊當天,咱們收到了期刊的正式錄用通知。
看得出來,他很激動,也很開心。
肯定目標後,你就明白了該學什麼,不應學什麼。
可是下一個問題就來了,該學的內容,要學到多深、多細呢?
在《貸仍是不貸:如何用Python和機器學習幫你決策?》一文裏,咱們嘗試了決策樹模型。
所謂應用決策樹模型,實際上就是調用了一個包。
from sklearn import tree
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X_train_trans, y_train)
複製代碼
只用了三行語句,咱們就完成了決策樹的訓練功能。
這裏咱們用的是默認參數。若是你須要瞭解能夠進行哪些參數調整設置,在函數的括號裏使用shift+tab
按鍵組合,就能看到詳細的參數列表,而且知道了默認的參數取值是多少。
若是你須要更詳細的說明,能夠直接查文檔。在搜索引擎裏搜索sklearn tree DecisionTreeClassifier
這幾個關鍵詞,你會看到如下的結果。
點擊其中的第一項,就能夠看到最新版本scikit-learn相關功能的官方文檔。
當你明白了每一個函數工做的方法、參數能夠調整的類型和取值範圍時,你是否能夠宣稱本身瞭解這個功能了?
你好像不太有信心。
由於你以爲這只是「知其然」,而沒有作到「知其因此然」。
可是,你真的須要進一步瞭解這個函數/功能是如何實現的嗎?
注意圖中函數定義部分,有一個指向source
的連接。
點開它,你就會導航到這個函數的源代碼,託管在github上。
若是你是個專業人士,但願研究、評估或者修改該函數,認真閱讀源代碼就不只必要,並且必須。
可是做爲文科生的你,若是僅是爲了應用,那徹底能夠沒必要深刻到這樣的細節。將別人寫好的,廣受好評的軟件包當成黑箱,正確地使用就行了。
這就如同你不須要了解電路原理,就能夠看電視;不須要了解川菜的技藝和傳承,就能夠吃麻婆豆腐。只要你會用遙控器,會使筷子,就能享受這些好處。
愈來愈多的優秀軟件包被創造出來,數據科學的門檻也所以變得愈來愈低。甚至低到被聲討的地步。例如這篇帖子,就大聲疾呼「進入門檻過低正在毀掉深度學習的名聲!」
可是,不要高興得太早。以爲本身終於遇到一門能夠投機取巧的學問了。
你的基礎必須打牢。
數據科學應用的基礎,主要是編程、數學和英語。
數學(包括基礎的微積分和線性代數)和英語許多本科專業都會開設。文科生主要須要補充的,是編程知識。
只有明白基礎的語法,你才能和計算機之間無障礙交流。
一門簡單到使人髮指的編程語言,能夠節省你大量的學習時間,直接上手作應用。
程序員圈子裏,流行一句話,叫作:
人生苦短,我用Python。
Python有多簡單?個人課上,一個會計學本科生,爲了拿下證書去學Python基礎語法,一門課在24小時內,便搞定了。這還包括作習題、項目和系統判分時間。
怎麼高效入門和掌握Python呢?歡迎讀讀《如何高效學Python?》,但願對你快速上手能有幫助。
瞭解了該學什麼,學多深刻以後,咱們來說講提高學習效率的終極祕密武器。
這個武器,就是協做的力量。
協做的好處,彷佛原本就是人人都知道的。
可是,在實踐中,太多的人根本就沒有這樣作。
由於,咱們都過於長期地被訓練「獨立」完成問題了。
例如考試的時候跟別人交流,那叫做弊。
可是,你即使再習慣一我的完成某些「創舉」,也不得不逐漸面對一個真實而殘酷的世界——一我的的單打獨鬥很難帶來大成就,你必須學會協做。
這就像《權力的遊戲》裏史塔克家族的名言:
When the cold winds blow the lone wolf dies and the pack survives. (凜冬將至,獨狼死,羣狼活。)
文科生面對屏幕編程,總會有一種孤獨無助的感受,彷佛本身被這個世界拋棄了。
這種錯誤的心態會讓你變得焦慮、恐慌,並且很容易放棄。
正確的概念卻可以拯救你——你正在協做。並且你須要主動地、更好地協做。
你面前這臺電腦或者移動終端,就是無數人的協做成果。
你用的操做系統,也是無數人的協做成果。
你用的編程語言,仍是無數人的協做成果。
你調用的每個軟件包,依然是無數人的協做成果。
並不是只有你所在的小團隊溝通和共事,才叫作協做。協做其實早已發生在地球級別的尺度上。
當你從Github上下載使用了某個開源軟件包的時候,你就與軟件包的做者創建了協做關係。想一想看,這些人可能受僱於大型IT企業,月薪6位數(美圓),能跟他們協做不是很可貴的機會嗎?
當你在論壇上拋出技術問題、而且得到解答的時候,你就與其餘的使用者創建了協做關係。這些人有多是資深的IT技術專家,作諮詢的收費是按照秒來算的。
這個社會,就是由於分工協做,才變得更加高效的。
數據科學也是同樣。Google, 微軟等巨頭爲何開源本身的深度學習框架,給全世界無償使用?正是由於他們明白協做的終極含義,知道這種看似吃虧的傻事兒,帶來的回報沒法估量。
這種全世界範圍內的協做,使得知識產生的速度加快,用戶的需求被刻畫得更清晰透徹,也使得技術應用的範圍和深度空前提升。
若是你在這個協做系統裏,就會跟系統一塊兒突飛猛進地發展。若是你不幸自外於這個系統,就只能落寞地看着別人一飛沖天了。
這樣的時代,你該怎麼更好地跟別人協做呢?
首先,你要學會尋找協做的夥伴。這就須要你掌握搜索引擎、問答平臺和社交媒體。不斷更新本身的認知,找到更適合解決問題的工具,向更可能回答你問題的人來提問。常常到Github和Stackoverflow上逛一逛,收穫可能大到令你吃驚。
其次,你要掌握清晰的邏輯和表達方式。無論是搜尋答案,仍是提出問題,邏輯能力能夠幫助你少走彎路,表達水平決定了你跟他人協做的有效性和深度。具體的闡釋,請參考《Python編程遇問題,文科生怎麼辦?》。
第三,不要只作個接受幫助者。要嘗試主動幫助別人解決問題,把本身的代碼開源在Github上,寫文章分享本身的知識和看法。這不只能夠幫你在社交資本帳戶中儲蓄(當你須要幫助的時候,至關於在提現),也能夠經過反饋增加本身的認知。羣體的力量能夠經過「贊同」、評論等方式矯正你的錯誤概念,推進你不斷進步。
能夠帶來協做的連接,就在那裏。
你不知道它們的存在,它們對你來講就是虛幻。
你瞭解它們、掌握它們、使用它們,它們給你帶來的巨大益處,就是實打實的。
咱們談了目標,能夠幫助你分清楚哪些須要學,哪些不須要學。你如今知道了找到目標的有效方法——項目實踐或者案例學習。
咱們聊了深度,你瞭解到大部分的功能實現只須要了解黑箱接口就能夠,不須要深刻到內部的細節。然而對於基礎知識和技能,務必夯實,才能走得更遠。
咱們強調了協做。充分使用別人優質的工做成果,主動分享本身的認知,跟更多優秀的人創建連接。擺脫單兵做戰的窘境,把本身變成優質協做系統中的關鍵節點。
願你在學習數據科學過程當中,得到認知的增加,享受知識和技能更新帶來的愉悅。放下焦慮感,體驗心流的美好感覺。
到今天爲止,你掌握了哪些數據科學知識和技能?你爲此花了多少時間?這個過程痛苦嗎?有沒有什麼經驗教訓能夠供你們借鑑?歡迎留言,把你的感悟分享給你們,咱們一塊兒交流討論。
喜歡請點贊。還能夠微信關注和置頂個人公衆號「玉樹芝蘭」(nkwangshuyi)。
若是你對數據科學感興趣,不妨閱讀個人系列教程索引貼《如何高效入門數據科學?》,裏面還有更多的有趣問題及解法。