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