成為一名機(jī)器學(xué)習(xí)工程師并不簡(jiǎn)單,你不僅要處理代碼中的各種問(wèn)題,還需要不斷學(xué)習(xí)、與其他部門(mén)的人員溝通、了解和學(xué)會(huì)使用各種新型代碼庫(kù)或模型…… 成為機(jī)器學(xué)習(xí)工程師的第一年,本文作者 Daniel Bourke 學(xué)到了 12 件重要的事,在此與你分享。
機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)都是含義較為寬泛的術(shù)語(yǔ)。舉個(gè)例子,即便兩人同為數(shù)據(jù)科學(xué)家,他們所做的事也可能大不相同。機(jī)器學(xué)習(xí)工程師也同樣如此。兩者的共同之處在于利用過(guò)去的(數(shù)據(jù))來(lái)理解或預(yù)測(cè)(構(gòu)建模型)未來(lái)。
我會(huì)先介紹一下我當(dāng)時(shí)的角色,然后再展開(kāi)講述本文的要點(diǎn)。
當(dāng)時(shí)我們有一個(gè)小規(guī)模機(jī)器學(xué)習(xí)咨詢(xún)團(tuán)隊(duì),從事數(shù)據(jù)收集、數(shù)據(jù)處理、模型建立及服務(wù)部署等各個(gè)環(huán)節(jié)的工作,凡是你能想到的任何行業(yè),我們都有所涉及,所以每個(gè)人都身兼數(shù)職。
我使用 “當(dāng)時(shí)” 這兩個(gè)字眼是因?yàn)槲椰F(xiàn)在已經(jīng)不是一名機(jī)器學(xué)習(xí)工程師了,目前我專(zhuān)注于自己的事業(yè)。
作為機(jī)器學(xué)習(xí)工程師的一天
每天早上九點(diǎn),我走進(jìn)工作室,和同事打完招呼,把食物放進(jìn)冰箱,泡上一杯咖啡,再走向我的辦工桌。接著我坐下來(lái)開(kāi)始看前一天的筆記,打開(kāi) Slack,查看新消息和團(tuán)隊(duì)分享的論文或博客鏈接。我總會(huì)發(fā)現(xiàn)一些可以閱讀的內(nèi)容,因?yàn)檫@個(gè)領(lǐng)域發(fā)展很快。
處理完消息,我就開(kāi)始瀏覽論文和博客,然后閱讀其中吸引我的內(nèi)容。通常情況下,我都會(huì)讀到一些可能對(duì)我正在研究的問(wèn)題有幫助的內(nèi)容。閱讀時(shí)間一般會(huì)花費(fèi)一個(gè)小時(shí),有時(shí)會(huì)更長(zhǎng),視具體內(nèi)容而定。
為什么用這么長(zhǎng)的時(shí)間?
閱讀是最基本的元技能,如果還有比這更好的方式,我會(huì)去學(xué)習(xí)和使用,好讓自己節(jié)省時(shí)間和力氣。
時(shí)針轉(zhuǎn)到上午十點(diǎn)。
如果有一個(gè)項(xiàng)目的截止日期快到了,我就會(huì)縮短閱讀時(shí)間,轉(zhuǎn)而推進(jìn)緊急的項(xiàng)目,這部分工作占用的時(shí)間最多。我會(huì)回顧自己前一天的工作,然后查看我的記事本看下一步要做什么。
我的記事本記的是當(dāng)天的日志。
“我已經(jīng)將數(shù)據(jù)處理成了正確的形狀,現(xiàn)在我需要在模型上運(yùn)行它。開(kāi)始階段我會(huì)設(shè)置一個(gè)較短的訓(xùn)練時(shí)間,取得一些進(jìn)展后再逐漸延長(zhǎng)?!?/p>
我也會(huì)遇到困難。
“出現(xiàn)了數(shù)據(jù)不匹配的情況。接下來(lái)我需要解決數(shù)據(jù)不匹配的問(wèn)題,在嘗試新模型前得到一個(gè)基線(xiàn)?!?/p>
大多數(shù)時(shí)間都用來(lái)確保數(shù)據(jù)形式能夠成為模型。
下午四點(diǎn),我開(kāi)始進(jìn)行收尾工作。我會(huì)清理一下自己創(chuàng)建的混亂代碼使其清晰可讀,然后添加一些注釋?zhuān)詈笤龠M(jìn)行重構(gòu)。萬(wàn)一別的人會(huì)讀呢?我一般都會(huì)這樣想。當(dāng)然通常情況下讀的人會(huì)是我自己,因?yàn)槲液芸炀蜁?huì)忘記當(dāng)時(shí)的一連串想法。
下午五點(diǎn)我的代碼就已經(jīng)傳到 GitHub 上,第二天要用的筆記也已經(jīng)記好了。
上面描述的是理想狀態(tài)下的一天,并不是每天都是如此。有時(shí)到下午 4:37 了,我的腦子里會(huì)突然蹦出一個(gè)好想法,然后我就得把它實(shí)踐下去。
現(xiàn)在你已經(jīng)大致了解了我作為機(jī)器學(xué)習(xí)工程師的一天是怎樣度過(guò)的,接下來(lái)我會(huì)帶你了解一些更具體的內(nèi)容。
1. 最重要的是數(shù)據(jù)
如果你熟悉一些數(shù)據(jù)科學(xué)的第一原理,這點(diǎn)對(duì)你而言不過(guò)是老生常談。但奇怪的是我經(jīng)常會(huì)忘記它。很多時(shí)候我們關(guān)注的是構(gòu)建一個(gè)更好的模型,而非改善構(gòu)建模型的數(shù)據(jù)。構(gòu)建更大的模型、使用更多算力可以帶來(lái)不錯(cuò)的短期效果,但是,捷徑走多了,最后就不得不走一些遠(yuǎn)路。
第一次接觸一個(gè)項(xiàng)目,多花些時(shí)間熟悉數(shù)據(jù)。通常情況下,你首先會(huì)估計(jì)出一個(gè)時(shí)長(zhǎng)用來(lái)熟悉數(shù)據(jù),而所謂的 “多花時(shí)間” 就是多花兩倍的時(shí)間。長(zhǎng)遠(yuǎn)來(lái)看,這樣做會(huì)節(jié)省你的時(shí)間。
這并不是說(shuō)你不應(yīng)該從小處著手。后文會(huì)談到這一點(diǎn)。
面對(duì)新的數(shù)據(jù)集,你的目標(biāo)應(yīng)該是成為一名行業(yè)專(zhuān)家。你需要檢查數(shù)據(jù)集的分布情況,尋找不同種類(lèi)的特征、異常值的位置,并了解為什么它們是異常值。如果你都不能了解自己正在處理的數(shù)據(jù),又怎么能指望你的模型呢?
探索性數(shù)據(jù)分析生命周期示例(每次遇到新數(shù)據(jù)集你會(huì)做的事)。更多相關(guān)內(nèi)容可參考 《探索性數(shù)據(jù)分析入門(mén)》
2. 溝通問(wèn)題比技術(shù)問(wèn)題更困難
我遇到的主要問(wèn)題都不是技術(shù)性的,而是溝通層面的。當(dāng)然,技術(shù)難題總是存在的,但解決它們不就是一名工程師的工作嗎?
不要低估溝通的重要性,不管是外部溝通還是內(nèi)部溝通。沒(méi)有什么比解決錯(cuò)了技術(shù)難題更糟糕了。
這種情況是怎么發(fā)生的?
從外部層面上看,問(wèn)題在于客戶(hù)的需求與我們團(tuán)隊(duì)能提供的服務(wù)以及機(jī)器學(xué)習(xí)可以提供的服務(wù)之間不匹配,當(dāng)然,跟后者的關(guān)系更大。
從內(nèi)部層面上看,由于團(tuán)隊(duì)成員往往身兼數(shù)職,因此很難確保每個(gè)人都目標(biāo)一致。這些挑戰(zhàn)并不獨(dú)特。機(jī)器學(xué)習(xí)看起來(lái)很奇幻,在某些情況下確實(shí)如此,但在另外一些情況下就不是了,承認(rèn)這一點(diǎn)很重要。
外部溝通問(wèn)題如何解決?
經(jīng)常聯(lián)系。你的客戶(hù)了解你能提供什么服務(wù)嗎?你理解客戶(hù)的問(wèn)題嗎?客戶(hù)理解機(jī)器學(xué)習(xí)能提供什么,不能提供什么嗎?什么樣的方式才能有效傳達(dá)自己的發(fā)現(xiàn)?
內(nèi)部溝通問(wèn)題呢?
你可以根據(jù)解決內(nèi)部溝通問(wèn)題的軟件工具的數(shù)量來(lái)判斷內(nèi)部溝通有多難。這些工具有 Asana、Jira、Trello、Slack、Basecamp、Monday 及 Microsoft Teams。
我找到的最有效的方法之一是在一天結(jié)束時(shí)在相關(guān)項(xiàng)目的交流通道中簡(jiǎn)單更新一條消息。
更新內(nèi)容包括:
三至四項(xiàng)
我做了什么
為什么這么做
下一步:根據(jù)以上內(nèi)容,我接下來(lái)打算做什么
這種方式完美嗎?不,但它似乎有效。它讓我有機(jī)會(huì)反思我做了什么以及想做什么。這樣做還有一個(gè)額外的好處是公開(kāi)化,這意味著如果有人不滿(mǎn)意我的工作,我可能會(huì)受到批評(píng)。
作為工程師你有多優(yōu)秀并不重要,影響你能否維護(hù)和獲得新業(yè)務(wù)的是你的溝通能力,也就是你能不能把自己的技能及其帶來(lái)的好處傳播出去。
3. 穩(wěn)定性>先進(jìn)性
我們碰到過(guò)一個(gè)將文本進(jìn)行分類(lèi)的自然語(yǔ)言問(wèn)題。我們希望,用戶(hù)在將一段文字發(fā)送到一項(xiàng)服務(wù)后,這段文字能被自動(dòng)劃分到兩類(lèi)中的一類(lèi)。如果這個(gè)模型對(duì)預(yù)測(cè)結(jié)果不自信,這段文字就會(huì)被傳送給人工分類(lèi)員。每天可以發(fā)起 1000~3000 次分類(lèi)請(qǐng)求,從數(shù)量上看不多也不少。
BERT 是今年的熱門(mén),如果沒(méi)有谷歌的規(guī)模計(jì)算,訓(xùn)練一個(gè) BERT 模型來(lái)做我們需要做的事需要大量數(shù)據(jù)改動(dòng)。這還只是投入生產(chǎn)之前。
于是我們使用了另一個(gè)方法 ULMFiT,從理論上看它不是最先進(jìn)的,但仍能產(chǎn)生非常多的結(jié)果,且使用起來(lái)更加容易。
與其執(zhí)著于在一個(gè)東西上追求完美,不如嘗試其它有用的東西,這會(huì)帶來(lái)更多價(jià)值。
4. 機(jī)器學(xué)習(xí)的兩大障礙
將機(jī)器學(xué)習(xí)應(yīng)用到實(shí)踐中存在兩大障礙 ,一是從課程學(xué)習(xí)到項(xiàng)目落地的障礙,二是從電腦模型到實(shí)際生產(chǎn)模型的障礙(模型部署)。
在網(wǎng)上搜索機(jī)器學(xué)習(xí)課程,可以找到非常多的內(nèi)容。我利用其中的一些內(nèi)容創(chuàng)建了自己的 人工智能碩士學(xué)位項(xiàng)目。
然而,在我學(xué)完許多最優(yōu)質(zhì)的課程,并開(kāi)始成為一名機(jī)器學(xué)習(xí)工程師之后,我的技能還是建立在機(jī)器學(xué)習(xí)課程構(gòu)建的骨架之上。在現(xiàn)實(shí)中,項(xiàng)目根本不是結(jié)構(gòu)化的。
我缺少特定知識(shí),這種技能在課程中是學(xué)不到的,比如如何質(zhì)疑數(shù)據(jù)、要探索什么以及利用什么。
特定知識(shí):課程中沒(méi)有但可以學(xué)習(xí)的技能。
什么是修正?
我很幸運(yùn)能和澳大利亞最優(yōu)秀的人才一起工作,我愿意學(xué)習(xí),愿意犯錯(cuò)。當(dāng)然,犯錯(cuò)不是目的,但為了正確,你必須明辨什么是錯(cuò)的。
如果你正在學(xué)習(xí)機(jī)器學(xué)習(xí)的課程,那就跟著學(xué)下去,但同時(shí)你也要把所學(xué)知識(shí)勇于實(shí)踐,開(kāi)展自己的項(xiàng)目,用特定知識(shí)來(lái)武裝自己。
關(guān)于部署
在這方面我仍然很弱,但我確實(shí)注意到了一個(gè)趨勢(shì) ———— 機(jī)器學(xué)習(xí)工程和軟件工程正在融合。有了 Seldon、Kubeflow 和 Kubernetes 之類(lèi)的服務(wù),機(jī)器學(xué)習(xí)很快會(huì)成為堆棧的另一部分。
你可以在 Jupyter Notebook 上構(gòu)建一個(gè)模型,但是怎樣才能讓幾千人,甚至是幾百萬(wàn)人都能獲取呢?據(jù)我觀(guān)察,在大公司以外沒(méi)有太多人知道怎么做。
5. 20% 時(shí)間原則
我們有一個(gè) 20% 時(shí)間原則,意思是我們會(huì)用 20% 的時(shí)間來(lái)學(xué)習(xí)東西(things)?!皷|西” 一詞 的含義較為松散,在這里它指的是機(jī)器學(xué)習(xí)領(lǐng)域的內(nèi)容,而且相關(guān)內(nèi)容很多。
這一原則不止一次體現(xiàn)了它的價(jià)值,比如 我們就是在花 20% 的時(shí)間學(xué)習(xí)時(shí)才發(fā)現(xiàn) ULMFiT 優(yōu)于 BERT。
我們花 20% 的時(shí)間來(lái)學(xué)習(xí)就意味著剩下的 80% 的時(shí)間會(huì)花在核心項(xiàng)目上。
80% 的時(shí)間用在核心產(chǎn)品上(機(jī)器學(xué)習(xí)專(zhuān)業(yè)服務(wù))
20% 的時(shí)間用在與核心產(chǎn)品相關(guān)的新事物上
時(shí)間不一定總是遵循二八比例進(jìn)行劃分,但有這樣一個(gè)目標(biāo)還是很不錯(cuò)的。
如果你的商業(yè)優(yōu)勢(shì)在于你是自己所在領(lǐng)域的最優(yōu)秀的,那么未來(lái)你的優(yōu)勢(shì)應(yīng)該是繼續(xù)保持自己作為最優(yōu)秀人才的地位,而這就意味著不斷學(xué)習(xí)。
6. 被閱讀的論文只占十分之一,被使用的就更少了
這是比較粗略的說(shuō)法, 但如果你去探索任何數(shù)據(jù)集或現(xiàn)象,很快就會(huì)發(fā)現(xiàn)它確實(shí)普遍存在。按照 Price 定律的說(shuō)法,全部作者總量的平方根貢獻(xiàn)了一半的出版物。
換句話(huà)說(shuō),在每年提交的成千上萬(wàn)篇論文中,可能會(huì)有 10 篇具有開(kāi)創(chuàng)性。而在這 10 篇開(kāi)創(chuàng)性的論文中,有 5 篇可能來(lái)自同一所研究所或個(gè)人。
所以結(jié)論是?
你無(wú)法跟進(jìn)每個(gè)新突破(新突破指的是創(chuàng)新性突破),所以最好學(xué)會(huì)基本原則,打下堅(jiān)實(shí)基礎(chǔ),再去應(yīng)用這些原則。它們已經(jīng)經(jīng)受住了時(shí)間的考驗(yàn)。
接下來(lái)我要說(shuō)的是探索 - 利用問(wèn)題(exploration versus exploration problem)。
7. 做你自己最大的質(zhì)疑者
你可以通過(guò)成為你自己最大的質(zhì)疑者來(lái)解決探索 - 利用問(wèn)題。
這個(gè)問(wèn)題其實(shí)是體現(xiàn)了在嘗試新事物與舊技重操之間的兩難困境。
利用
運(yùn)行一個(gè)你已經(jīng)用過(guò)的模型來(lái)得到高精度數(shù)字是件很容易的事,你可以把它作為新基準(zhǔn)匯報(bào)給團(tuán)隊(duì)。但是如果你打算得到一個(gè)好結(jié)果,就要記得多檢查幾次你的工作,同時(shí)讓你的團(tuán)隊(duì)也這樣做。
探索
我們可以花 20%的時(shí)間來(lái)進(jìn)行探索, 但其實(shí) 70%-20%-10% 這樣的時(shí)間劃分比例可能更好。你可以在核心產(chǎn)品上花費(fèi) 70%的時(shí)間,在核心產(chǎn)品的上層構(gòu)建上花 20%的時(shí)間,然后在那些可能進(jìn)展不順利的事上花費(fèi) 10%的時(shí)間。
我做機(jī)器學(xué)習(xí)工程師時(shí)沒(méi)有親身實(shí)踐過(guò)這個(gè)比例劃分,但現(xiàn)在我正在向這個(gè)標(biāo)準(zhǔn)靠近。
8. “玩具問(wèn)題” 有用
玩具問(wèn)題(toy problem)是有用的,尤其可以幫助理解一個(gè)新概念。先從小處做起,可以先構(gòu)建一個(gè)你自己數(shù)據(jù)的子集,或者一個(gè)不相關(guān)的數(shù)據(jù)集。
在一個(gè)小團(tuán)隊(duì)工作的技巧就是先讓一件事運(yùn)作起來(lái),然后進(jìn)行重復(fù)迭代,最后加快速度。
9. 橡皮鴨
我是從 Ron 那里學(xué)到這一點(diǎn)的。如果你在一個(gè)問(wèn)題上卡住了,繼續(xù)坐著盯著代碼看可能會(huì)幫你解決它,也可能不能。但你還可以和其他的團(tuán)隊(duì)成員討論一下,假裝他們是你的橡皮鴨。
“Ron,我正試著遍歷這個(gè)數(shù)組,并跟蹤它的狀態(tài),與此同時(shí)我還要遍歷另一個(gè)數(shù)組并跟蹤其狀態(tài),然后我想將這些狀態(tài)組合成一個(gè)元組列表。”*
“嵌套循環(huán)嗎?你為什么不把它向量化?”
“我可以這樣做嗎?”
“試試看?!?/p>
10. 從零開(kāi)始構(gòu)建的模型正在減少
這點(diǎn)牽涉到了上文我們提到的機(jī)器學(xué)習(xí)工程正在與軟件工程融合這一觀(guān)點(diǎn)。
除非你的數(shù)據(jù)問(wèn)題十分具體,否則許多主要問(wèn)題都是十分相似的,涉及到分類(lèi)、回歸、時(shí)間序列預(yù)測(cè)及推薦。
谷歌和微軟的 AutoML 及其它服務(wù)允許那些能上傳數(shù)據(jù)集并選擇目標(biāo)變量的人獲取世界一流的機(jī)器學(xué)習(xí)內(nèi)容,雖然這些服務(wù)還處于發(fā)展的早期階段,但它們的勢(shì)頭越來(lái)愈強(qiáng),發(fā)展速度也越來(lái)越快。
此外,由于 fast.ai 之類(lèi)的庫(kù)以及各種 model zoo(一組預(yù)先構(gòu)建的模型,如 PyTorch hub 和 TensorFlow hub)的存在,開(kāi)發(fā)人員只需幾行代碼就可以調(diào)用最先進(jìn)的模型。這意味著什么?
了解數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)的基本原則是必須的,但知道如何利用它們來(lái)解決問(wèn)題才更有價(jià)值。
現(xiàn)在你的基線(xiàn)可能要么接近先進(jìn)模型,要么已經(jīng)稱(chēng)得上先進(jìn)了。
11. 數(shù)學(xué)還是代碼?
處理客戶(hù)問(wèn)題時(shí),我們都是代碼優(yōu)先。所有的機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)代碼都是用 Python 寫(xiě)的。有時(shí)我在閱讀論文并重現(xiàn)論文實(shí)驗(yàn)結(jié)果時(shí)會(huì)稍稍涉足數(shù)學(xué),但 99.9%時(shí)間里,現(xiàn)有的框架就已經(jīng)包含了數(shù)學(xué)。
這并不是說(shuō)數(shù)學(xué)不必要,畢竟機(jī)器學(xué)習(xí)和深度學(xué)習(xí)都是應(yīng)用數(shù)學(xué)的形式。
了解最小矩陣運(yùn)算、一些線(xiàn)性代數(shù)和微積分知識(shí),特別是 鏈?zhǔn)椒▌t,足以讓一個(gè)人成為機(jī)器學(xué)習(xí)領(lǐng)域的從業(yè)者。
請(qǐng)注意,我的目標(biāo)不是發(fā)明一種新的機(jī)器學(xué)習(xí)算法,而是向客戶(hù)展示機(jī)器學(xué)習(xí)可以為他們的業(yè)務(wù)提供什么以及不能提供什么。
旁注:在這篇文章的過(guò)程中,fast.ai 發(fā)布了一個(gè)新課程 《深度學(xué)習(xí)基礎(chǔ)》,從零開(kāi)始介紹深度學(xué)習(xí)涉及的數(shù)學(xué)和代碼知識(shí)。它面向的是跟我一樣熟悉深度學(xué)習(xí)和機(jī)器學(xué)習(xí)應(yīng)用但缺乏數(shù)學(xué)背景的人。為了解決這個(gè)問(wèn)題,我認(rèn)真學(xué)了這門(mén)課程,并立刻將它添加到我最喜歡的機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)資源列表中。如果基礎(chǔ)扎實(shí),你可以構(gòu)建自己的先進(jìn)技術(shù),而無(wú)需在舊技術(shù)的基礎(chǔ)上再去迭代。
12. 你去年做的工作到了明年可能就沒(méi)用了
這是必然的。隨著軟件工程和機(jī)器學(xué)習(xí)工程日益融合,這種情況越來(lái)越多。
你所處的就是這樣一個(gè)多變的領(lǐng)域。
有什么是一成不變的呢?
雖然框架和庫(kù)都會(huì)發(fā)生變化,但底層的統(tǒng)計(jì)學(xué)、概率論以及數(shù)學(xué)是沒(méi)有什么終止日期的(適逢 fast.ai 推出新課程,它們恰恰迎來(lái)了好時(shí)機(jī))。
最大的挑戰(zhàn)仍然在于:你如何應(yīng)用他們。
-
數(shù)據(jù)處理
+關(guān)注
關(guān)注
0文章
627瀏覽量
29184 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8503瀏覽量
134625
原文標(biāo)題:成為機(jī)器學(xué)習(xí)工程師第一年,我學(xué)到的 12 件事
文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄


硬件工程師看了只會(huì)找個(gè)角落默默哭泣#硬件工程師 #MDD #MDD辰達(dá)半導(dǎo)體 #產(chǎn)品經(jīng)理 #軟件工程師
機(jī)械工程師的九個(gè)段位,你現(xiàn)在處于哪一層?



硬件系統(tǒng)工程師寶典—完整版

硬件工程師的終極幻想:焊板子焊上人生巔峰!#半導(dǎo)體器件 #硬件工程師 #MDD辰達(dá)半導(dǎo)體
如何成為嵌入式開(kāi)發(fā)工程師?

不同時(shí)期的硬件工程師,最怕發(fā)生的事 #電子工程師 #硬件工程師 #內(nèi)容過(guò)于真實(shí) #YXC晶振 #揚(yáng)興科技
【面試題】人工智能工程師高頻面試題匯總:機(jī)器學(xué)習(xí)深化篇(題目+答案)

人工智能工程師高頻面試題匯總——機(jī)器學(xué)習(xí)篇


硬件工程師VS軟件工程師|硬件工程師看到這都淚目了!#硬件設(shè)計(jì) #硬件工程師 #電子工程師 #軟件工程師

評(píng)論