編者按:William Koehrsen是一位入職還不滿一年的數(shù)據(jù)科學(xué)家。雖然剛步入社會(huì),但他已經(jīng)樹立起危機(jī)意識(shí),開始尋找自身缺點(diǎn)不斷改進(jìn)。正是因?yàn)檫@種自省精神,他的這篇文章引起了大批資深數(shù)據(jù)科學(xué)家的關(guān)注。
不認(rèn)識(shí)到自己的弱點(diǎn),就永遠(yuǎn)無法克服它們。
如果說現(xiàn)代工作面試教會(huì)了我們什么,那就是在回答“你最大的缺點(diǎn)是什么?”的時(shí)候,正確答案是告訴面試官:“我工作起來太拼命了?!边@聽起來有點(diǎn)像段子,但如果你真的把自己從頭到腳批判一番,你也未免太滑稽了。面對(duì)求職就業(yè),有誰愿意去談?wù)撟约翰粫?huì)的東西呢?然而,雖然各大招聘網(wǎng)站在完善求職者信息時(shí)不會(huì)要求用戶披露自己的缺點(diǎn),如果我們從不承認(rèn)自己的缺陷,我們就不能采取措施來解決它們。
努力讓自己變得更好其實(shí)很簡(jiǎn)單:
找準(zhǔn)自己現(xiàn)在的位置:找出缺點(diǎn)
弄清楚你的目標(biāo)方向:制定相應(yīng)計(jì)劃
執(zhí)行計(jì)劃:一小步一小步慢慢積累
可惜的是,很多人連第一步都做不好:尤其是在技術(shù)領(lǐng)域,我們只會(huì)利用已經(jīng)習(xí)得的技能埋頭苦干,卻不善于學(xué)習(xí)新的東西,讓自己有機(jī)會(huì)去擁有一份更輕松的工作,或是抓住嶄新的人生機(jī)遇。我們需要自我反思,所以有時(shí)候后退一步,去審視自己擅長(zhǎng)什么、做什么更高效,對(duì)在任何領(lǐng)域提升自我都至關(guān)重要。
以我個(gè)人為例,我會(huì)在這篇文章中從3方面介紹自己曾經(jīng)的弱點(diǎn),并解釋它們是怎么讓我成為更好的數(shù)據(jù)科學(xué)家的:
軟件工程
大規(guī)模數(shù)據(jù)科學(xué)
這篇文章的寫作目的有三個(gè)。首先,我真的希望提升自己,所以我必須承認(rèn)自己的弱點(diǎn),找出它們的具體解決方法,讓自己更有動(dòng)力完成學(xué)習(xí)目標(biāo)。
其次,我希望讀者能受到鼓舞,開始去接觸他們?cè)瓤赡懿涣私獾募寄?,并努力學(xué)習(xí)這些新知識(shí)。你不需要像我一樣寫文章梳理自己的缺點(diǎn),但如果有機(jī)會(huì)能在新領(lǐng)域有所成就,在思考問題上花點(diǎn)時(shí)間絕對(duì)物有所值。
最后,我希望讀者能明白,無所不知并不是成為成功數(shù)據(jù)科學(xué)家的必要條件。數(shù)據(jù)科學(xué)/機(jī)器學(xué)習(xí)領(lǐng)域的內(nèi)容有很多,一個(gè)人不可能掌握其中的所有知識(shí),可能有些公司會(huì)在崗位介紹里列上一大堆不切實(shí)際的要求,但如果你想成為一名實(shí)踐數(shù)據(jù)科學(xué)家,其實(shí)你不需要完全掌握每種算法(甚至也請(qǐng)無視“5-10年工作經(jīng)驗(yàn)”)。初學(xué)者往往會(huì)被這些“必須”學(xué)的東西壓得不堪重負(fù),對(duì)此,我的建議是:從基礎(chǔ)開始,你不需要了解所有一切。
在數(shù)據(jù)科學(xué)領(lǐng)域,真正的“全科專家”屈指可數(shù)
1. 軟件工程
當(dāng)我還在大學(xué)讀書的時(shí)候,我寫了一篇關(guān)于數(shù)據(jù)科學(xué)和建筑能源審計(jì)的長(zhǎng)論文,這是我第一個(gè)真正意義上的數(shù)據(jù)科學(xué)項(xiàng)目。從那時(shí)起,我就有開始意無意地糾正自己的一些編程壞習(xí)慣,比如編寫只能跑一次的代碼、缺少文檔、代碼混亂難以讀懂、硬編碼特定值……它們都是寫論文的產(chǎn)物——那時(shí)我只想開發(fā)一個(gè)數(shù)據(jù)科學(xué)解決方案,而這個(gè)方案是一次性的。
舉個(gè)典型的例子,這個(gè)項(xiàng)目用的是建筑能源數(shù)據(jù),最初我把它的測(cè)量周期設(shè)為每隔15分鐘進(jìn)行一次。后來,我想把時(shí)間調(diào)到20分鐘,再運(yùn)行時(shí)管道就全崩了,因?yàn)橛袛?shù)百個(gè)地方已經(jīng)把時(shí)間間隔明確定義成了15分鐘。我也不能做簡(jiǎn)單的查找替換,因?yàn)槲医o這個(gè)參數(shù)設(shè)計(jì)了一大堆不同的名稱:electricity_interval、timeBetweenMeasurements、dataFreq……在寫代碼前,我完全沒考慮過會(huì)出現(xiàn)這種問題。
如果當(dāng)時(shí)我有軟件工程方面的技術(shù)常識(shí),我就會(huì)知道要用不同輸入對(duì)寫好的代碼進(jìn)行廣泛測(cè)試、要寫文檔、可以直接用已有框架、要遵守編碼標(biāo)準(zhǔn)以便其他開發(fā)人員理解,上述問題就不會(huì)存在。所以我開始意識(shí)到,盡管我有最好的想法,但我有時(shí)并不能像軟件工程師一樣寫代碼,我需要讓自己學(xué)會(huì)像計(jì)算機(jī)科學(xué)家一樣思考。
解決方案
和學(xué)習(xí)其他東西一樣,練習(xí)是掌握新知識(shí)的最佳途徑。我很幸運(yùn),在為公司開發(fā)內(nèi)部工具和為開源庫(kù)做貢獻(xiàn)的過程中,我有了很多實(shí)踐機(jī)會(huì):
編寫單元測(cè)試
學(xué)習(xí)怎么遵循編碼風(fēng)格
編寫能修改參數(shù)的函數(shù)
編寫完整文檔
讓其他人審查我的代碼
重構(gòu)代碼,使其更簡(jiǎn)單、更易于閱讀
即便是那些還未進(jìn)入社會(huì)的數(shù)據(jù)科學(xué)愛好者,他們也可以通過參加開源項(xiàng)目、閱讀一些流行庫(kù)的源代碼(我愛Scikit-Learn)獲取可靠的實(shí)踐機(jī)會(huì)。此外,獲得其他人的反饋也很重要,所以你最好能主動(dòng)去社區(qū)找一些資深人士尋求建議。
像軟件工程師一樣思考意味著需要改變?cè)兴季S模式,如果你愿意靜下心來慢慢思考,這其實(shí)并不難。舉個(gè)例子,每當(dāng)我在Jupyte notebook中復(fù)制粘貼代碼并更改一些值時(shí),我會(huì)停下來想一想:這里是否存在一種從長(zhǎng)遠(yuǎn)來看更高效的方法?從結(jié)果上來看,雖然我的做法并不完美,但它們確實(shí)能讓其他人更輕松地閱讀我的代碼,我在上面部署一些新東西也更方便。所以說,你讀代碼的次數(shù)應(yīng)該比你寫代碼的次數(shù)多,因?yàn)樵陂喿x過程中,你能以未來人的視角審視它的風(fēng)格和文檔。
當(dāng)然,改變思維方式的好處不止如此。對(duì)很多數(shù)據(jù)科學(xué)家來說,編寫數(shù)據(jù)分析的單元測(cè)試可能是件奇怪的事,但當(dāng)你需要確保自己的代碼能按預(yù)期運(yùn)行時(shí),你會(huì)發(fā)現(xiàn)這么做很實(shí)用。此外,許多l(xiāng)inting工具也可以幫助我們檢查代碼是否遵循一致的編碼風(fēng)格。
我還想研究計(jì)算機(jī)科學(xué)的許多其他方面,例如編寫有效的實(shí)現(xiàn)而不是蠻力解決。但是,我也深知自己不能同時(shí)改變所有東西,這一點(diǎn)很重要。這也是為什么我會(huì)專注于一些實(shí)踐并把它們納入我的工作流中。
雖然我們做的是數(shù)據(jù)科學(xué)領(lǐng)域的事,但學(xué)習(xí)軟件工程等領(lǐng)域的最佳實(shí)踐也能讓我們受益頗多。
2. 大規(guī)模數(shù)據(jù)科學(xué)
雖然數(shù)據(jù)科學(xué)里的很多東西都可以通過自學(xué)付諸實(shí)踐,但一旦涉及基于大型數(shù)據(jù)集建模,大多數(shù)普通人都負(fù)擔(dān)不起那么高昂的硬件費(fèi)用。這也就是說,我們?cè)趯W(xué)習(xí)新技術(shù)時(shí)其實(shí)是有偏向性的,我們更傾向于把它們用于小型、表現(xiàn)良好的數(shù)據(jù)集。
不幸的是,現(xiàn)實(shí)世界中沒有那么多實(shí)用的小數(shù)據(jù)集,更沒有那么多整潔的數(shù)據(jù)集,我們得學(xué)會(huì)用不同方法來解決問題。首先,本地計(jì)算機(jī)肯定是不夠用了,我們要學(xué)著使用遠(yuǎn)程機(jī)器,甚至是多臺(tái)機(jī)器——這意味著我們要學(xué)會(huì)如何連接遠(yuǎn)程計(jì)算機(jī)并掌握命令行。
其次,即便解決了命令行問題,第二個(gè)問題是數(shù)據(jù)集大小很多時(shí)候會(huì)超過租用機(jī)器的內(nèi)存,這在深度學(xué)習(xí)里更普遍,有時(shí)機(jī)器內(nèi)存甚至都放不下一個(gè)樣本,所以學(xué)會(huì)如何處理大型數(shù)據(jù)集非常重要。
解決方案
總而言之,錢不是解決內(nèi)存問題的唯一方法。我們還有很多途徑可以選擇,比如一次只遍歷數(shù)據(jù)集一個(gè)數(shù)據(jù)塊、把大型數(shù)據(jù)集分成許多較小的數(shù)據(jù)集、用Dask之類的工具來處理大數(shù)據(jù)集等。
我現(xiàn)在在內(nèi)部項(xiàng)目和開源項(xiàng)目上最常用的方法是把大型數(shù)據(jù)集分割成許多小的子集,開發(fā)可以處理一個(gè)分區(qū)的管道,然后用Dask/Spark/PySpark并行地運(yùn)行子集。這種方法不需要超級(jí)計(jì)算機(jī),也不需要集群——你甚至在個(gè)人計(jì)算機(jī)上多核心并行計(jì)算。之后,當(dāng)我可以訪問更多資源時(shí),我就能用同樣的方法進(jìn)行擴(kuò)展。
為了鍛煉自己在處理大型數(shù)據(jù)集上的技巧,我也從像kaggle這樣的平臺(tái)上找到了不少非常大的數(shù)據(jù)集,與之相伴的還有一眾數(shù)據(jù)科學(xué)家分享的精彩經(jīng)驗(yàn)。通過閱讀,現(xiàn)在我已經(jīng)學(xué)到了很多有用的方法,幫助自己提高處理任何規(guī)模數(shù)據(jù)集的效率。
雖然現(xiàn)在我還沒有很多處理TB級(jí)數(shù)據(jù)集的經(jīng)驗(yàn),但很多基礎(chǔ)策略是通用的??梢钥隙ǖ氖?,未來的數(shù)據(jù)集都會(huì)只大不小,繼續(xù)提高這方面的能力非常有必要。
美國(guó)國(guó)會(huì)圖書館的數(shù)據(jù)集大小“才”3PB哦
3. 深度學(xué)習(xí)
盡管人工智能在過去經(jīng)歷了繁榮期和蕭條期,但近年來學(xué)界、工業(yè)界在計(jì)算機(jī)視覺、自然語言處理和深度強(qiáng)化學(xué)習(xí)等領(lǐng)域取得的成功讓我深信——使用多層神經(jīng)網(wǎng)絡(luò)并不是一種炒作起來的“時(shí)尚”。
和軟件工程、大規(guī)模數(shù)據(jù)科學(xué)不同,我現(xiàn)在的工作完全不涉及深度學(xué)習(xí):傳統(tǒng)的機(jī)器學(xué)習(xí)技術(shù)(比如隨機(jī)森林)已經(jīng)足夠解決客戶提出的所有問題。但是,我也發(fā)現(xiàn),不是每個(gè)數(shù)據(jù)集都是整齊地以行和列呈現(xiàn)的,未來它們也可能是文本、圖像,而神經(jīng)網(wǎng)絡(luò)是目前處理這些任務(wù)的最佳選擇。我可以繼續(xù)用已經(jīng)掌握的技術(shù)解決問題,但是,特別是在我職業(yè)生涯的早期,適當(dāng)做一些新的探索也很有練習(xí)價(jià)值。
強(qiáng)化學(xué)習(xí)的exploration/exploitation權(quán)衡也適用于生活
深度學(xué)習(xí)有很多子領(lǐng)域,現(xiàn)在我們還很難預(yù)測(cè)哪些算法、哪些庫(kù)會(huì)最終勝出。盡管如此,我認(rèn)為熟悉這個(gè)領(lǐng)域的操作可以讓自己具備處理更廣泛?jiǎn)栴}的能力。鑒于解決問題是驅(qū)使我學(xué)習(xí)數(shù)據(jù)科學(xué)的原因,在我的“技能欄”多加一項(xiàng)深度學(xué)習(xí)也會(huì)是值得的投資。
解決方案
我現(xiàn)在制定的深度學(xué)習(xí)學(xué)習(xí)計(jì)劃和以前學(xué)數(shù)據(jù)科學(xué)時(shí)的差不多:
1. 閱讀強(qiáng)調(diào)實(shí)踐的書籍和教程
2. 在現(xiàn)實(shí)項(xiàng)目中練習(xí)技術(shù)和方法
3. 通過寫作分享、解釋自己做過的項(xiàng)目
對(duì)我來說,邊做邊學(xué)是學(xué)習(xí)新技術(shù)最有效的方法之一,也就是把學(xué)習(xí)基礎(chǔ)理論先放一邊,直接從找出如何實(shí)現(xiàn)解決問題的方法開始。因?yàn)槲业膶W(xué)習(xí)方式是自上而下的,所以我找的學(xué)習(xí)資料也更側(cè)重實(shí)踐性,會(huì)包含很多代碼。一旦我學(xué)會(huì)了這種技術(shù)該怎么用,我會(huì)再回歸理論,以便更有效地理解和使用。
從實(shí)際情況來看,我應(yīng)該算是個(gè)獨(dú)立學(xué)習(xí)者,因?yàn)槲覜]有能教我神經(jīng)網(wǎng)絡(luò)怎么用的同事,但在數(shù)據(jù)科學(xué)領(lǐng)域,由于具備豐富的開源資源和繁榮的社區(qū),你永遠(yuǎn)不會(huì)真正孤單。對(duì)于深度學(xué)習(xí),這三本書讓我受益匪淺:
Douwe Osinga的《Deep Learning Cookbook》
Francois Chollet的《Deep Learning with Python》
Ian Goodfellow, Yoshua Bengio和Aaron Courville的《Deep Learning》
前兩本書重點(diǎn)介紹了如何用神經(jīng)網(wǎng)絡(luò)構(gòu)建實(shí)際解決方案,第三本書深入理論。閱讀這類技術(shù)書的優(yōu)點(diǎn)是可以把文字轉(zhuǎn)變成生動(dòng)的體驗(yàn):只要有可能,你就可以隨機(jī)用鍵盤碼代碼驗(yàn)證書里寫的內(nèi)容。
此外,我不單單是復(fù)制別人的代碼,我也會(huì)做一些調(diào)整,使它們適合我自己的項(xiàng)目。比如最近我就在做一個(gè)推薦系統(tǒng),它是根據(jù)深度學(xué)習(xí)書本里的練習(xí)代碼改編的,雖然從頭開始構(gòu)建項(xiàng)目聽起來有點(diǎn)令人生畏,但當(dāng)你真正動(dòng)手操作時(shí),采用別人曾經(jīng)做過的工作會(huì)方便很多。
最后,學(xué)習(xí)新技術(shù)的另一種有效方法是自己當(dāng)老師,把它教給其他新手。根據(jù)我的經(jīng)驗(yàn),如果我不完全了解某個(gè)術(shù)語的概念,我是沒法把它解釋給別人聽的。所以每當(dāng)我在新學(xué)到了一些深度學(xué)習(xí)知識(shí),我就喜歡寫一篇文章,分享關(guān)于它的實(shí)現(xiàn)細(xì)節(jié)和概念性解釋。
小結(jié)
我知道,袒露自己的缺點(diǎn)很奇怪,我在寫這篇文章的時(shí)候也很不舒服,但我還是選擇說出來,因?yàn)檫@能幫我成為一名更好的數(shù)據(jù)科學(xué)家。此外,我也發(fā)現(xiàn)如果你有自我意識(shí)來承認(rèn)缺點(diǎn)并討論如何解決這些問題,那么許多人,包括雇主在內(nèi),都會(huì)對(duì)你個(gè)人另眼相看。
缺乏技能并不是一個(gè)缺點(diǎn)——真正的缺點(diǎn)是假裝自己知道一切,并覺得沒有必要變得更好。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4777瀏覽量
100974 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5511瀏覽量
121356 -
數(shù)據(jù)科學(xué)
+關(guān)注
關(guān)注
0文章
165瀏覽量
10081
原文標(biāo)題:作為數(shù)據(jù)科學(xué)家,我有哪些弱點(diǎn)
文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論