熱線電話:13121318867

登錄
首頁精彩閱讀機器學習工程師第一年的 12 點體會
機器學習工程師第一年的 12 點體會
2019-11-26
收藏
<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機器學習</a>工程師第一年的 12 點體會

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

來源 | Datawhale

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

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

機器學習工程師的日常:

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

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

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機器學習</a>工程師第一年的 12 點體會

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

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

例如:「將數據處理為正確格式,現在需要在模型中訓練這些數據?!谷绻以诠ぷ鬟^程中遇到了困難,則會寫下類似于:「發生了數據不匹配的情況,接下來我將嘗試修復混合匹配,并在嘗試新模型之前獲得基線?!?/span>

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

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

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

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機器學習</a>工程師第一年的 12 點體會

1.睜眼閉眼全是數據

很多時候,機器學習工程師都會專注于構建更好的模型,而不是改進構建它的數據。盡管可以通過投入足夠的計算能力讓模型提供令人興奮的短期結果,但這始終不會是我們想要的目標。

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

這并不意味著你不應該從細節著手,對于任何新數據集,你的目標應該是成為這方面的「專家」。檢查分布、找到不同類型的特征、異常值、為什么它們是異常值等等此類問題。如果你無法講出當前這些數據的故事,那又怎么讓模型更好的處理這些數據呢?

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機器學習</a>工程師第一年的 12 點體會

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

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

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

但永遠不要低估內部和外部溝通的重要性。沒有什么比技術選型錯誤更糟的了,因為這是要解決錯誤的技術挑戰。到底什么情況會出現這樣的情況呢?

從外部來看,這是因為客戶所追求的與我們可以提供的東西之間的不匹配。而在內部,因為很多人都身兼數職,所以很難確保每個人都可以全身貫注于一件事情。

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

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

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

它完美嗎?不,但似乎有效。它給了我一個機會來反思我做了什么,并告訴大家我接下來的什么工作需要誰的支持,甚至可以從大家那里得到建議。

無論你是多么優秀的工程師,你維持和獲得新業務的能力都與你溝通的技能能力有關。

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機器學習</a>工程師第一年的 12 點體會

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

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

BERT雖然在最近一年很火。但是,如果沒有谷歌那樣規模的計算,用BERT訓練模型來解決我們想要解決的問題時還是很復雜的,因為在投入生產之前,我們需要修改很多內容。相反,我們使用了另一種方法ULMFiT,盡管它不是最先進的,但仍然可以得到令人滿意的結果,并且更容易使用。

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

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

我在互聯網上學習機器學習課程,以此來完成自己的AI碩士學位。但即使在完成了許多最好的課程之后,當我開始擔任機器學習工程師時,我發現我的技能是建立在課程的結構化主干上,而項目并沒有課程那樣井井有條。

我缺乏很多在課程中無法學到的具體的知識,例如:如何質疑數據,探索什么數據與利用什么數據。

如何彌補這個缺陷呢?我很幸運能夠成為澳大利亞最優秀的人才,但我也愿意學習并愿意做錯。當然,錯誤不是目標,但為了正確,你必須弄清楚什么是錯的。

如果你正在通過一門課程學習機器學習,那么繼續學習這門課程,不過你需要通過自己的項目來學習你正在學習的知識,從而彌補課程中的不足。

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

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機器學習</a>工程師第一年的 12 點體會

5. 20%的時間

20%的時間,這意味著我們20%的時間都花在了學習上??陀^意義上,學習是一個松散的術語,只要是關于機器學習的都可以納入到學習范疇內,相關業務也要不斷的學習,作為機器學習工程師,懂業務可以極大的提高你的工作效率。

如果你的業務優勢在于你現在所做的最好,那么未來的業務取決于你繼續做你最擅長的事情,這意味著需要不斷學習。

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

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

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

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

7. 成為你自己最大的質疑者

探索與開發問題是嘗試新事物和已經發揮作用事物之間的兩難選擇,你可以通過成為自己最大的懷疑者來處理這些問題。不斷的向自己提問,選擇這些取代舊的可以帶來哪些好處?

開發

一般來說,運行你已經使用過的模型并獲得高精度數字很容易,然后可以將其作為新基準報告給團隊。但是如果你得到了一個好的結果,記得檢查你的工作,并再次讓你的團隊也這樣做。因為你是一名工程師,你應該有這樣的意識。

探索

20%的時間花費在探索上是一個不錯的決定,但是如果是70/20/10可能會更好。這意味著你需要在核心產品上花費70%的時間,在核心產品的二次開發上花費20%,在moonshots(未來要用的事情)上花費10%,雖然這些東西可能不會立即起作用。說起來很慚愧,我從來沒有在我的角色中練習這個,但這是我正朝著這個方向發展的。

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機器學習</a>工程師第一年的 12 點體會

8.“玩具問題”非常有用

玩具問題可以幫你理解很多問題,特別是幫助解決一個復雜的問題。首先先建立一個簡單的問題,它可能是關于你的數據或不相關數據集的一小部分。找出這個問題的解決方法,然后把他擴展到整個數據集中。在一個小團隊中,處理問題的訣竅是抽象問題,然后理出頭緒解決。

9.橡皮鴨

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

“Ron,我正在嘗試遍歷這個數組,并在循環通過另一個數組并跟蹤狀態,然后我想將這些狀態組合成一個元組列表?!?/span>

“循環中的循環?你為什么不把它矢量化呢?“

“我能這樣做嗎?”

“讓我們來嘗試下吧?!?/span>

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

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

除非你的數據問題非常具體,否則許多問題非常相似,分類、回歸、時間序列預測、建議。

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

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

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機器學習</a>工程師第一年的 12 點體會

11.數學還是代碼?

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

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

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

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

這是大趨勢,因為軟件工程和機器學習工程的融合,這種情況正在變得越來越明顯。

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

現在怎么辦?機器學習工程師的成長道路上應該還有很多坑需要去探,如果你是一個新手,先掌握這12條就足夠了。

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢