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