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

在數(shù)據(jù)科學(xué)領(lǐng)域,真正的“全科專家”屈指可數(shù)
評論