機器學習工程師第一年的12點體會

機器學習和數據科學都是廣義上的術語,它們涉及超級多的領域以及知識,一位數據科學家所作的事情可能與另外一位有很大的不一樣,機器學習工程師也是如此。一般使用過去(數據)來理解或預測(構建模型)將來。
爲了將上面剛剛提到的要點融入上下文中,我必需要解釋個人角色是什麼。曾經我呆在一個小機器學習諮詢團隊。咱們作到了從數據收集到清洗、構建模型再到你能想到的多個行業的服務部署。由於團隊很小,因此每一個人頭上都有不少頭銜。算法

機器學習工程師的平常:

早上9點,我走進辦公室,向同事問好,把食物放在冰箱裏,倒一杯咖啡,走到個人辦公桌前。而後我坐下來,看看前一天的筆記,打開Slack,閱讀未讀的消息並打開團隊共享的論文或博客文章連接,由於這個領域發展很快,因此要多看一些前沿的東西。數組

我一般都是在讀完未讀消息後,會花一點時間來瀏覽論文和博客文章,並仔細研究那些理解起來困難的內容。不得不說這其中,有一些內容對我正在作的工做有很大的幫助。通常來講,閱讀會花費我大概一個小時甚至更久,這取決於文章自己。有些朋友會問我爲何這麼久?框架

在我看來,閱讀是一種終極元技能。由於一旦有更好的方式來完成我當前在作的事情,我會當即經過學習使用它,從而節約更多的時間和精力。但也有特殊狀況,若是有一個項目的截止日期臨近,那麼我將把閱讀時間縮短來推動該項目。機器學習

完成閱讀以後,我會檢查前一天的工做,檢查個人記事本,看看我須要從什麼地方開始工做,爲何我能夠這樣作?由於個人記事本是流水帳式的日記。工具

例如:「將數據處理爲正確格式,如今須要在模型中訓練這些數據。」若是我在工做過程當中遇到了困難,則會寫下相似於:「發生了數據不匹配的狀況,接下來我將嘗試修復混合匹配,並在嘗試新模型以前得到基線。」學習

大約在下午4點的時候我會整理一下個人代碼,大概涉及:讓混亂代碼變得清晰,添加註釋,組合。爲何要這樣作?由於這個問題我常常會問本身:若是其餘人看不懂這個怎麼辦?若是是我要讀這段代碼,我最須要什麼?有了這樣的思考後,我以爲花費一段時間來整理代碼變的格外有意義。 大約在下午5點,個人代碼應該會被上傳到GitHub上。動畫

這是理想的一天,但並非每一天都是如此。有時候你會在下午4點有一個極好的想法,而後跟隨它,而後就有多是通宵。spa

如今你應該已經大體瞭解了機器學習工程師一天的平常了吧,接下來我會將我在其中得到的心得分享給你。blog

1.睜眼閉眼全是數據

不少時候,機器學習工程師都會專一於構建更好的模型,而不是改進構建它的數據。儘管能夠經過投入足夠的計算能力讓模型提供使人興奮的短時間結果,但這始終不會是咱們想要的目標。生命週期

首次接觸項目時,必需要花費大量時間熟悉數據。由於從長遠來看,熟悉這些數據在將來會將節省你更多的時間。

這並不意味着你不該該從細節着手,對於任何新數據集,你的目標應該是成爲這方面的「專家」。檢查分佈、找到不一樣類型的特徵、異常值、爲何它們是異常值等等此類問題。若是你沒法講出當前這些數據的故事,那又怎麼讓模型更好的處理這些數據呢?

探索性數據分析生命週期的示例(每次遇到新數據集時都會執行的操做)。更多關於探索性數據分析的詳細介紹。

2.溝通比解決技術問題更難

我遇到的大多數障礙都不是技術性的,而是涉及到溝通問題。固然,這其中也存在技術挑戰,但做爲工程師解決技術難題是咱們的本職工做。

但永遠不要低估內部和外部溝通的重要性。沒有什麼比技術選型錯誤更糟的了,由於這是要解決錯誤的技術挑戰。到底什麼狀況會出現這樣的狀況呢?
從外部來看,這是由於客戶所追求的與咱們能夠提供的東西之間的不匹配。而在內部,由於不少人都身兼數職,因此很難確保每一個人均可以全身貫注於一件事情。

碰到這些問題時到底如何解決呢?

對於外部問題,咱們只能不斷的與客戶溝通。你的客戶是否瞭解你能夠提供的服務?你瞭解你的客戶的需求嗎?他們是否瞭解機器學習能夠提供什麼以及它不能提供什麼?怎麼樣才能更有效的傳達你的想法?

對於內部問題,你能夠根據咱們使用解決問題的軟件工具的數量來判斷內部通訊有多難:Asana,Jira,Trello,Slack,Basecamp,Monday,Microsoft Teams。我找到的最有效的方法之一是在一天結束時在相關項目頻道中進行簡單的消息更新。

它完美嗎?不,但彷佛有效。它給了我一個機會來反思我作了什麼,並告訴你們我接下來的什麼工做須要誰的支持,甚至能夠從你們那裏獲得建議。
不管你是多麼優秀的工程師,你維持和得到新業務的能力都與你溝通的技能能力有關。

3.穩定性>最早進的技術

如今有一個天然語言問題:將文本分類到不一樣的類別,目標是讓用戶將一段文本發送到服務並將其自動分類爲兩個類別之一。若是模型對預測沒有信心,請將文本傳遞給人類分類器,天天的負載約爲1000-3000個請求。

BERT雖然在最近一年很火。可是,若是沒有谷歌那樣規模的計算,用BERT訓練模型來解決咱們想要解決的問題時仍是很複雜的,由於在投入生產以前,咱們須要修改不少內容。相反,咱們使用了另外一種方法ULMFiT,儘管它不是最早進的,但仍然能夠獲得使人滿意的結果,而且更容易使用。

4.機器學習初學者最多見的兩個坑

將機器學習運用到實際生產中存在兩個坑:一是從課程工做到項目工做的差距,二是從筆記本中的模型到生產模型(模型部署)的差距。

我在互聯網上學習機器學習課程,以此來完成本身的AI碩士學位。但即便在完成了許多最好的課程以後,當我開始擔任機器學習工程師時,我發現個人技能是創建在課程的結構化主幹上,而項目並無課程那樣層次分明。

我缺少不少在課程中沒法學到的具體的知識,例如:如何質疑數據,探索什麼數據與利用什麼數據。

如何彌補這個缺陷呢?我很幸運可以成爲澳大利亞最優秀的人才,但我也願意學習並願意作錯。固然,錯誤不是目標,但爲了正確,你必須弄清楚什麼是錯的。

若是你正在經過一門課程學習機器學習,那麼繼續學習這門課程,不過你須要經過本身的項目來學習你正在學習的知識,從而彌補課程中的不足。

至於如何進行部署?在這點上我仍然作的不是很好。還好我注意到了一種趨勢:機器學習工程和軟件工程正在融合。經過像Seldon,Kubeflow和Kubernetes這樣的服務,很快機器學習將成爲堆棧的另外一部分。在Jupyter中構建模型是很簡單的,可是如何讓數千甚至數百萬人使用該模型?這纔是機器學習工程師應該思考的事情,這也是機器學習創造價值的前提。可是,根據最近在Cloud Native活動上的討論狀況來看,大公司之外的人並不知道如何作到這一點。

5. 20%的時間

20%的時間,這意味着咱們20%的時間都花在了學習上。客觀意義上,學習是一個鬆散的術語,只要是關於機器學習的均可以歸入到學習範疇內,相關業務也要不斷的學習,做爲機器學習工程師,懂業務能夠極大的提升你的工做效率。

若是你的業務優點在於你如今所作的最好,那麼將來的業務取決於你繼續作你最擅長的事情,這意味着須要不斷學習。

6.十分之一的論文值得閱讀,但少用

這是一個粗略的指標。可是,探索任何數據集或者模型時,你很快就會發現這個規律是廣泛存在的。換句話說,在每一年數以千計的提交中,你可能會獲得10篇開創性的論文。在這10篇開創性的論文中,有5篇可能來自於同一所研究所或者我的。

你沒法跟上每個新的突破,但能夠在基本原則的堅實基礎應用它們,這些基本原則經受住了時間的考驗。

接下來是探索與開發的問題。

7.成爲你本身最大的質疑者

探索與開發問題是嘗試新事物和已經發揮做用事物之間的兩難選擇,你能夠經過成爲本身最大的懷疑者來處理這些問題。不斷的向本身提問,選擇這些取代舊的能夠帶來哪些好處?

開發
通常來講,運行你已經使用過的模型並得到高精度數字很容易,而後能夠將其做爲新基準報告給團隊。可是若是你獲得了一個好的結果,記得檢查你的工做,並再次讓你的團隊也這樣作。由於你是一名工程師,你應該有這樣的意識。

探索
20%的時間花費在探索上是一個不錯的決定,可是若是是70/20/10可能會更好。這意味着你須要在覈心產品上花費70%的時間,在覈心產品的二次開發上花費20%,在moonshots(將來要用的事情)上花費10%,雖然這些東西可能不會當即起做用。提及來很慚愧,我歷來沒有在個人角色中練習這個,但這是我正朝着這個方向發展的。

8.「玩具問題」很是有用

玩具問題能夠幫你理解不少問題,特別是幫助解決一個複雜的問題。首先先創建一個簡單的問題,它多是關於你的數據或不相關數據集的一小部分。找出這個問題的解決方法,而後把他擴展到整個數據集中。在一個小團隊中,處理問題的訣竅是抽象問題,而後理出頭緒解決。

9.橡皮鴨

若是你遇到問題,坐下來盯着代碼可能會解決問題,可能不會。這時,若是同你的同事探討一下,僞裝他們是你的橡皮鴨,那麼問題可能很容易就被解決了。

「Ron,我正在嘗試遍歷這個數組,並在循環經過另外一個數組並跟蹤狀態,而後我想將這些狀態組合成一個元組列表。」

「循環中的循環?你爲何不把它矢量化呢?「
「我能這樣作嗎?」
「讓咱們來嘗試下吧。」

10.從0開始構建的模型數量正在降低

這與機器學習工程與軟件工程正在融合有關。

除非你的數據問題很是具體,不然許多問題很是類似,分類、迴歸、時間序列預測、建議。

谷歌和微軟的AutoML等服務正在爲每一個能夠上傳數據集並選擇目標變量的人提供世界一流的機器學習。在面向開發人員方面,有像fast.ai這樣的庫,它們能夠在幾行代碼中提供最早進的模型,以及各類模型動畫(一組預先構建的模型),如PyTorch hub和TensorFlow集線器提供相同的功能。

這意味着咱們不須要了解數據科學和機器學習的更深層次原理,只須要知道他們的基本原理便可,咱們應該更關心如何將它們應用到實際問題中去創造價值。

11.數學仍是代碼?

對於我所處理的客戶問題,咱們都是代碼優先,並且全部的機器學習和數據科學代碼都是Python。有時我會經過閱讀論文並復現它來涉足數學,可是現有的框架大都包含了數學。這並非說數學是沒必要要的,畢竟機器學習和深度學習都是應用數學的形式。

掌握最小矩陣的操做、一些線性代數和微積分,特別是鏈式法則足以成爲一個機器學習從業者。

請記住,大多數時候或者大多數從業者的目標不是發明一種新的機器學習算法,而是向客戶展現潛在的機器學習對他們的業務有沒有幫助。

12.你去年所作的工做明年可能會無效

這是大趨勢,由於軟件工程和機器學習工程的融合,這種狀況正在變得愈來愈明顯。

但這也是你進入這個行業的緣由,框架將發生變化,各類實用庫將發生變化,但基礎統計數據、機率學、數學、這些事情都是不變的。最大的挑戰仍然是:如何應用它們創造價值。

如今怎麼辦?

機器學習工程師的成長道路上應該還有不少坑須要去探,若是你是一個新手,先掌握這12條就足夠了!



本文做者:虎說八道

閱讀原文

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索