入職一年后,一位算法工程師給初學者的一封信
大數(shù)據(jù)文摘出品
來源:towardsdatascience
編譯:啤酒泡泡、fuma、張弛、寧靜
“作自己的懷疑論者,不斷試錯,有時,溝通比技術本身能帶來更大的價值。”
——佚名 |
親愛的讀者:
你們好!我是Daniel Bourke,一位來自澳大利亞的機器學習工程師。我在這個崗位上從業(yè)有一年之久了,好吧,可能很多讀者對這個崗位不太熟悉,可以隨我看下一天的工作流程:
早上9點,我會走進公司,問同事早安,把我的食物放進冰箱,倒一杯汽水,然后走向我的辦公桌。我坐下來,看著我昨天的工作筆記,然后打開Slack,接著我會閱讀消息,打開團隊分享的每一篇論文或是博客,每天都會有一些要看的消息,因為這個領域的更新發(fā)展很快。
消息讀完后,我會瀏覽論文和博客,并且會著重閱讀那些讓我困惑的內容。通常,那里面會有一些內容能幫到我現(xiàn)在的工作。我會用一個小時進行閱讀,有時會更多,這取決于我看的內容,閱讀是最基礎也是最關鍵的能力,如果我現(xiàn)在做的事有更好的方法,那么我會學習并運用這個方法,這可以節(jié)約我的時間和精力。
早上10點,如果工作任務的截止日期快要到了,我會縮減閱讀的時間來趕任務,這是我一天中花時間最多的地方。我會回看我昨天的工作內容,并且查看我寫下的后續(xù)工作步驟,我的筆記本記錄了我一天的工作流程。
在后續(xù)操作數(shù)據(jù)的過程中,如果我已經(jīng)把數(shù)據(jù)處理成正確的形式了,那么我就需要用模型跑數(shù)據(jù),一開始我會把訓練時間調得很短,如果有了進展,我會把時間加長,如果我遇到問題,數(shù)據(jù)不匹配的問題出現(xiàn)了,那么接下來,我會解決這個問題,然后在嘗試新模型前,先獲得一個基準。我絕大多數(shù)的時間是用來確定數(shù)據(jù)是不是處理成了模型所要求的形式。
下午4點就快到了,馬上可以放松一下了。我說放松,指的是清理我寫出的代碼,讓它變得清晰易讀。我會加上一些注釋,重新調整代碼的結構,萬一別人要讀我的代碼呢?我會這么問自己,通常,閱讀我代碼的人都是我自己,因為我經(jīng)常會很快忘記那些寫代碼時產(chǎn)生的想法。
以上是一天工作最理想的樣子,但不是每天都這樣,有時候,一個美妙的想法在下午4點37分的時候迸發(fā)出來,那么我會繼續(xù)我的工作,現(xiàn)在你已經(jīng)對我每天的工作有了大致的了解,接下來我們聊聊機器學習的那些事兒。
人工智能的浪潮不斷推進,相信很多讀者和我一樣加入了機器學習的隊伍,我的工作內容很全面:從數(shù)據(jù)收集、數(shù)據(jù)處理、建模、實施服務,業(yè)務范圍涉及你能想到的每一個產(chǎn)業(yè)。在這個崗位上呆久了,發(fā)現(xiàn)很多事情做起來都是有規(guī)律可循的,以一個前人的經(jīng)驗,總結了一名優(yōu)秀的機器學習工程師需要注意的12個方面,希望讀者在閱讀后,能對機器學習的從業(yè)和學習有所幫助!
把時間花在刀刃上:數(shù)據(jù)很重要!
如果你熟悉數(shù)據(jù)科學的一些基本原則,就會發(fā)現(xiàn)解決實際應用問題,處理coding問題,本質上是和數(shù)據(jù)打交道??闪钊梭@訝的是,我時常忘記這一點,很多時候,我著眼于建立更好的模型,而不是去提高數(shù)據(jù)的質量。
建立一個更大的模型、使用更多的計算資源可以在短時間內給你一個很好的結果。然而,出來混總是要還的,接下來你會遇到很麻煩的事。
當你參與第一個項目時,請花很多很多的時間去熟悉數(shù)據(jù)。之所以說很多很多,是因為你通常需要把你預計花的時間乘以3。長遠上看,這會幫你在接下來的工作中節(jié)約不少時間。
當你拿到一個新的數(shù)據(jù),你的目標應該是成為最了解這個數(shù)據(jù)的專家,你要檢查數(shù)據(jù)的分布,找到不同類型的特征,異常值在哪里,為什么它們是異常值?如果你不能把你的數(shù)據(jù)描述清楚,那你又怎么能建立模型呢?
不要低估溝通的重要性
我遇到絕大多數(shù)的問題都不是技術問題而是溝通問題,的確,技術難題一直都有,但是那是工程師應該去解決的問題。永遠不要低估溝通的重要性,無論是公司內部的還是公司外部的。最糟糕的事莫過于解決了一個本不該被解決的技術問題。
為什么會發(fā)生這種事呢?
對外來看,這種事發(fā)生的原因大多是因為客戶的期望和我們所能提供的服務出現(xiàn)了不匹配,雖然客戶的期望能夠用機器學習實現(xiàn)。對內來看,因為我們每個人在公司都負責很多方面事務,所以我們很難為了同一個目標而做到步調一致。
1. 三省吾身
回到問題的本質。請經(jīng)常這樣做。請問一問你自己,你的客戶是否明白你們能提供的服務?你是否理解客戶的問題?他們知道機器學習帶來什么和不能帶來什么嗎?什么樣的交流方式能讓你很輕松地去展示你的工作成果?
2. 針對公司員工內部
為了解決內部溝通的問題,人們設計了很多軟件。從它們的數(shù)量上,你便可以明白解決內部溝通問題有多困難。這些軟件包括Asana, Jira, Trello, Slack, Basecamp, Monday, Microsoft Teams。
對我而言,一個最有效的辦法是,每天工作結束時,在項目相關的頻道上更新我的信息。
更新內容包括:
- 3-4 點ideas
- 關于我的工作內容
- 為什么
- 根據(jù)上面的內容,我接下來要做的
這樣很完美對嗎?不。但是它看上去是有效的,它讓我可以展示我已經(jīng)做的工作和準備去做的工作。把自己的計劃公開有一個額外的好處,如果你的工作方案不成立,別人會指出來。你是多好的工程師這并不重要,重要的是你有能力告訴別人你的技術是什么、你的技術可以帶來什么,這一點和你維持現(xiàn)有業(yè)務并開拓新業(yè)務的能力密切相關。
穩(wěn)定性>前沿性
我們曾經(jīng)有一個有關自然語言的問題:把文字內容歸為不同的類別。任務目標是幫用戶向服務中心發(fā)送一段文本,并且自動把文本歸為兩類中的其中一類,如果模型預測的不夠準確 ,那么把文本交給人工處理,工作量大概是每天1000-3000次請求,不多也不少。
BERT成為了今年最受矚目的名詞。但是如果沒有谷歌的規(guī)模化計算工具,想要使用BERT訓練模型來完成我們的需求則非常麻煩,而且這還僅僅是把模型用于生產(chǎn)前所需要的工作,因此,我們找到了另一種方法——ULMFiT。這個方法雖然不是最前沿的,但是它能產(chǎn)生足夠好的結果,并且這個方法也很容易使用。
與其將某個方法改進到完美,不如借鑒已有的模型,在這基礎上進行遷移學習,這樣能帶來更多的價值。
機器學習中的兩大難點
將機器學習付諸實踐存在兩個瓶頸:從課程成果到項目成果的瓶頸、從理論模型到生產(chǎn)模型(模型部署)的瓶頸。
互聯(lián)網(wǎng)搜索機器學習課程返回了大量的結果,我用了其中許多課程創(chuàng)建自己的AI碩士學位課程。但即使在完成了最好的幾門課程,當我開始擔任機器學習工程師時,我的技能還是建立在課程的結構化主干上,在現(xiàn)實問題中,項目并不是結構化的,我缺乏具體的知識,線上的互聯(lián)網(wǎng)課程中無法教會你一些技能,比如:怎么質疑數(shù)據(jù)、探索與開發(fā)模型。
1. 如何改進?
我很幸運能和澳大利亞最優(yōu)秀的人才在一起工作,但我愿意學習也愿意做錯。當然,錯誤不是目標,但為了正確,你必須弄清楚什么是錯的。如果你正在通過一門課程學習機器學習,那么繼續(xù)學習這門課程,同時要將學到的知識應用到自己的工程項目中,這樣才能使自己具備專業(yè)知識。
2. 如何在工作中提升能力?
我在這方面的知識依舊很匱乏,但我注意到了一種趨勢——機器學習工程和軟件工程正在融合。隨著Seldon,Kubeflow和Kubernetes這些開源平臺的發(fā)展,很快機器學習將成為其中的另一部分。
在Jupyter筆記本中構建模型是一回事,但是如何讓數(shù)千甚至數(shù)百萬人使用該模型就是另一碼事了。根據(jù)最近在Cloud Native活動上的討論情況來看,大公司以外的多數(shù)人并不知道如何做到這一點。
二八定律
機器學習中也有一個二八定律,我們有一個20%的規(guī)則,這個規(guī)則的意思是我們要把20%的時間花在學習上。
事實證明,這段學習時間是寶貴的。比如說ULMFiT的使用率超過BERT就源于20%時間的規(guī)則,20%的時間用來學習,意味著剩下80%的時間將用于核心項目。
- 80%的核心產(chǎn)品(機器學習專業(yè)服務)。
- 20%與核心產(chǎn)品相關的新事物。
如果你的工作優(yōu)勢在于你能將現(xiàn)在做的事情做到最好,那么未來的工作同樣取決于你繼續(xù)做你最擅長的事情,這意味著不斷學習。
論文需要精讀
這是一個粗略的指標,但是在你探索過一些數(shù)據(jù)集和實驗現(xiàn)象后,你就會明白它是一種客觀事實。這個概念來源于Zinf/Price定律,即在同一主題中,半數(shù)的論文為一群高生產(chǎn)力作者所撰寫,這一作者集合的數(shù)量約等于全部作者總數(shù)的平方根。換句話說,在每年數(shù)以千計的提交中,你可能會發(fā)現(xiàn)10篇開創(chuàng)性的論文,在這10篇開創(chuàng)性的論文中,有5篇可能來自同一所研究所或作者。
如何緊跟時代的潮流?你無法跟上每一個新的突破,你最好扎實掌握和運用一些基本原理,這些基本原理經(jīng)受住了時間的考驗,新突破需要依靠原創(chuàng)性的突破,然后便是需要新的探索與開發(fā)。
做自己的懷疑論者
您可以通過懷疑自己來處理探索與開發(fā)問題。探索與開發(fā)問題是嘗試新事物和復用已有模型成果之間的兩難選擇。
1. 開發(fā)自己的模型
運行你已經(jīng)使用的模型并獲得高精度結果然后將其作為新基準報告給團隊是很容易的。但是如果你得到了一個好的結果,記得反復再反復地檢查你的成果,并讓你的團隊也這樣做,因為你是一名工程師、科學家。
2. 探索新的事物
20%時間的標準在這里也有用武之地,但是時間分配如果是70/20/10會更好。也許你在核心產(chǎn)品上花費70%,在核心產(chǎn)品的構造上花費20%,在探索上花費10%,不過探索的東西可能不會起作用,我本人從來沒有試過這個方法,但這是我正朝著這個方向發(fā)展的。
先積跬步,后至千里
不積跬步無以至千里,先建立一些小事,這樣就能快速理解一個新的概念,你可以使用自己的數(shù)據(jù)集或者不相關的小數(shù)據(jù),在一個小團隊中,成功的訣竅是先成功一小步,然后快速迭代。
一起來玩橡皮鴨呀
很多程序員可能知道一種小黃鴨調試法(也稱橡皮鴨)調試法,這個概念說的是在調試代碼的時候隨身攜帶一只小黃鴨,然后詳細地向它解釋每行代碼??赡芎芏嘧x者會覺得好笑,這是有原理依據(jù)的,類似有一種叫做cone of answer的常見現(xiàn)象,比如:你的朋友向你咨詢問題,等說到一半的時候他已經(jīng)找到問題所在,徒留一臉茫然的你...總的來說,當你試圖向別人表述自己的問題的過程中,自然地也在促使自己去調整思路,這種方法對程序員同樣適用。
橡皮鴨方法是同事Ron教會我的,遇到問題的時候,坐下來盯著代碼可能會解決問題,但也有可能不會, 此時,不如用隊友的語言重述,就像你的橡皮鴨。
“Ron,我正在嘗試遍歷這個數(shù)組,并通過循環(huán)另一個數(shù)組以及跟蹤它的狀態(tài)來嘗試跟蹤這個數(shù)組的狀態(tài),然后我想將這些狀態(tài)組合成一個元組列表。”
“循環(huán)中的循環(huán)?你為什么不把它矢量化呢?“ “我能這樣做嗎?” “讓我們來看看。” “...” |
遷移學習很重要
你不需要從底層重構模型,這個問題來自于機器學習工程與軟件工程的融合。除非您的數(shù)據(jù)問題非常具體,否則許多主要問題非常相似,分類,回歸,時間序列預測,推薦系統(tǒng)。
谷歌和微軟的AutoML等服務,只需要上傳數(shù)據(jù)集并選擇目標變量,就可以輕松使用機器學習。但是這些事情還在初始階段,尚未成形。如果你是開發(fā)人員,只需要fast.ai這樣的庫,就可以在幾行代碼中使用最先進的模型,以及各種模型的預建的模型,例如,PyTorch hub和TensorFlow提供相同的功能。
這意味著什么?雖然機器學習已經(jīng)如此方便,但是仍然需要了解數(shù)據(jù)科學和機器學習的基本原理,更重要的是要知道如何恰當?shù)倪\用他們。
Math or Code?It is a problem
對于我處理的客戶端問題,代碼優(yōu)先,所有的機器學習和數(shù)據(jù)科學代碼都是Python。有時我會通過閱讀論文并進行復現(xiàn)來涉足數(shù)學,但99.9%的情況下,現(xiàn)有的框架已經(jīng)包含數(shù)學的庫。
雖說在現(xiàn)實生活中,數(shù)學并沒有想象中的那么重要,畢竟機器學習和深度學習都是數(shù)學的應用。但是知道最小矩陣相乘,一些線性代數(shù)和微積分,特別是鏈式法則依舊是重中之重。
請記住,我的目標不是發(fā)明一種新的機器學習算法,而是向客戶展示機器學習對他們的業(yè)務是否有幫助,有了堅固的基礎,你就可以建立你自己的最好模型,而不是重復使用已有的模型了。
軟件行業(yè)的快速迭代
你去年所做的工作明年可能就沒用了哦!這是客觀事實,由于軟件工程和機器學習工程的融合,這種情況越來越嚴重。但是你既然已經(jīng)加入了機器學習的大家庭,我來告訴你什么保持不變——框架會變化,庫會變化,但基礎統(tǒng)計,概率論,數(shù)學永遠不會變。 最大的挑戰(zhàn)仍然是:如何應用它們。
說了這么多,希望以上建議能對與機器學習的入門者和從業(yè)者有所幫助,最后玩的開心,開啟你的數(shù)據(jù)之旅吧!
相關報道:
https://towardsdatascience.com/12-things-i-learned-during-my-first-year-as-a-machine-learning-engineer-2991573a9195
【本文是51CTO專欄機構大數(shù)據(jù)文摘的原創(chuàng)譯文,微信公眾號“大數(shù)據(jù)文摘( id: BigDataDigest)”】