當前位置:編程學習大全網 - 源碼下載 - 機器學習工程師第壹年的 12 點體會

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

作者 | 人工智能大數據與深度學習

來源 | Datawhale

機器學習和數據科學都是廣義上的術語,它們涉及超級多的領域以及知識,壹位數據科學家所做的事情可能與另壹位有很大的不同,機器學習工程師也是如此。通常使用過去(數據)來理解或預測(構建模型)未來。

為了將上面剛剛提到的要點融入上下文中,我必須要解釋我的角色是什麽。曾經我待在壹個小機器學習咨詢團隊。我們做到了從數據收集到清洗、構建模型再到妳能想到的多個行業的服務部署。因為團隊很小,所以每個人頭上都有很多頭銜。

機器學習工程師的日常:

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

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

在我看來,閱讀是壹種終極元技能。因為壹旦有更好的方式來完成我當前在做的事情,我會立即通過學習使用它,從而節約更多的時間和精力。但也有特殊情況,如果有壹個項目的截止日期臨近,那麽我將把閱讀時間縮短來推進該項目。

完成閱讀之後,我會檢查前壹天的工作,檢查我的記事本,看看我需要從什麽地方開始工作,為什麽我可以這樣做?因為我的記事本是流水賬式的日記。

例如:「將數據處理為正確格式,現在需要在模型中訓練這些數據。」如果我在工作過程中遇到了困難,則會寫下類似於:「發生了數據不匹配的情況,接下來我將嘗試修復混合匹配,並在嘗試新模型之前獲得基線。」

大約在下午4點的時候我會整理壹下我的代碼,大概涉及:讓混亂代碼變得清晰,添加註釋,組合。為什麽要這樣做?因為這個問題我經常會問自己:如果其他人看不懂這個怎麽辦?如果是我要讀這段代碼,我最需要什麽?有了這樣的思考後,我覺得花費壹段時間來整理代碼變的格外有意義。大約在下午5點,我的代碼應該會被上傳到GitHub上。

這是理想的壹天,但並不是每壹天都是如此。有時候妳會在下午4點有壹個極好的想法,然後跟隨它,然後就有可能是通宵。

現在妳應該已經大致了解了機器學習工程師壹天的日常了吧,接下來我會將我在其中獲得的心得分享給妳:

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條就足夠了。

  • 上一篇:家庭作業快速源代碼
  • 下一篇:C語言中函數調用是什麽意思,調用的作用是什麽?
  • copyright 2024編程學習大全網