做算法是“屠龍”,做工程是“狩獵”,做數據是“養豬”!
近來一段時間,能明顯感到,想入行 AI 的人越來越多,而且增幅越來越大。
緣起
為什么這么多人想入行 AI 呢?真的是對計算機科學研究或者擴展人類智能抱著***的熱忱嗎?說白了,大多數人是為了高薪。
人們為了獲得更高的回報而做出選擇、努力工作,原本這是個非常正當的事情,但是關鍵在于:如何找對路徑。
想要入行,總得知道這個行業里面都有什么樣的崗位,分別是干什么的吧。
本文中,我們將從直觀的角度,管窺一下 AI 領域中,幾種不同技術崗位的:
- 日常工作的狀態。
- 所需要具備的素質。
- 職業發展路徑。
我們不去看那些招聘啟事上令人眼花繚亂的 title,而是從抽象層面,以工作內容、職責為準,來分類工業界直接的 AI 技術人員。
他們大致可以分為三個不同角色:
- 做算法。
- 做工程。
- 做數據。
做算法
應用科研成果,解決實際問題
說到做算法,大家首先想到的可能是發明新的算法或者對算法進行改進。這是在學術機構或者幾家定價大企業研究院中擔任科研任務的科學家們的任務。
在工業界做算法的算法工程師(也有公司叫科學家),最基本的日常工作其實是:銜接學術成果與實際業務,在工程實踐中利用***科研成果來達到產品或服務在業務層面的提升。
或者,說得更通俗點,他們實際每天在做的事情是:讀論文&實現之——確認***論文中的闡述是否真實可重現,進一步確認是否可應用于本企業的產品,進而將其應用到實踐中提升產品質量。
強學術背景要求
既然日常工作首先是讀別人論文。那么作為算法工程師必不可少應該具備快速、大量閱讀英語論文的能力。
如果要做算法,平均而言,大致要保持每周讀一篇***論文的頻率。
光能讀不行,還必須讀懂論文,要讀懂論文,就需要:
- 科研能力:或云學術研究方法,能夠通過參考資料、搜索及以往的知識積累學習掌握論文內容的能力。
- 系統數學知識:足夠深入的微積分、線性代數、概率統計的知識。***的論文,沒有被時光檢驗過。
閱讀時,需要關注公式的推導過程。否則,萬一出現數學推導有錯,導致了過于喜人的結果,卻無法在實踐中重現,豈不空耗時力?
也許這就是為什么,到目前為止,筆者所聽聞和見過的算法工程師都是名校相關專業博士的原因。
經過幾年強化學術研究訓練,這些博士們,就算英語綜合水平不過是 CET-4,也能讀得進去一篇篇硬骨頭似的英語論文!
對業務負責的創新型人才
很多時候,單論具體的手頭工作,做算法的算法工程師和下面要說到的做工程的機器學習工程師相差并不大,他們兩者都會花費很多時間去訓練模型。
但是,做工程的可以把關注點放在模型本身,只要交付符合評價指標要求的模型就可以了,而做算法的人必須對業務提升負責!
如果交付的模型雖然整體質量提升了,卻不能提高用戶體驗,或者在某幾個用戶非常關心的 corner case 上總是出錯。
機器學習工程師可以通過加人工干預,做幾個 workaround 把這幾個 dsat 繞過去,但算法工程師則有責任從算法角度解決問題,而不是隨便打人工補丁。
在實踐過程中,算法工程師,即使自己不發明新的算法,不提出新的算法優化方法,也得去嘗試***算法的使用或者把已有算法用出新花樣來。
毋庸置疑,這是一個有著必然創新性的角色。因此,這個角色必然不適合絕大多數人!
做工程
“調參工程師”
這一角色比較有代表性的崗位是:機器學習工程師,常常被戲稱為調參工程師。
他們使用別人開發的框架和工具,運行已有算法,訓練業務數據,獲得工作模型。
工作期間他們可能需要一些處理數據、選取特征或者調節參數的手段,不過一般都有據可循,并不需要自己去發明一個 XXXX。
TIP:很多 title 寫的是“人工智能/機器學習/深度學習算法工程師”的招聘崗位,其實招的是做工程的人。不要執著于辭藻,看清楚具體職責和工作內容。
程序員的分支
說到底,機器學習工程師是廣義的軟件工程師(程序員)的一個分支。
說起來,每一個程序員都有一個領域。不過,不同領域在不同時期熱度不同,發展趨勢不同。AI 產品開發,是廣義軟件開發的一個領域,如今正好在熱點上。
開發人工智能產品的程序員,也還是程序員。不過是需要懂一定程度的領域內理論知識而已,就和以前開發 PCI 協議棧要懂 PCI 協議,寫網卡 driver 要懂 TCP / IP 的道理是一樣的。
編碼能力是基礎
既然是程序員,首先就不能丟掉程序員的基本素質:編碼能力和基礎算法能力(不是前面說的那種算法,而是鏈、樹、圖的構建、刪除、遍歷、查找、排序等數據結構里講的那種算法),這是最起碼的兩個要求。
當然,既然在 AI 領域進行開發,一定程度的機器學習/深度學習知識還是有必要掌握的。
此外,做工程也得讀論文,不過和做算法不同,做工程讀論文的一般目的不是嘗試***方法,而是用已知有效的方法來解決實際問題。
因此,做工程的,讀的經常是“舊”論文,或者相對學術含量低一些(不那么硬)的論文。
在閱讀時,主要是為了直接找到某個問題的處理方法,故而可以跳讀。對于其中的數學公式,能夠讀懂頭尾也就可以了。論文閱讀頻率和學術深度的要求,都比做算法低得多。
做數據
此處說得做數據并非數據的清洗和處理——大家可以看到做工程的崗位,有一部分工作內容就是 ETL 和處理數據,此處說的做數據是指數據標注。
數據人工標注的必要性
簡單說,數據標注就是:給各種各樣的數據(文本、圖像、視頻、音頻等)打上標簽,使原數據(raw data)變成標注數據(labeled data)——標注數據是各種有監督學習的必要條件。
雖然機器學習中有無監督學習,但在實踐領域被證明有直接作用的,基本上還都是有監督模型。
近年來,深度學習在很多應用上取得了巨大的成功,而深度學習的成功,無論是圖像、語音、NLP、自動翻譯還是 AlphaGo,恰恰依賴于海量的標注數據。
無論是做 ML 還是 DL 的工程師(算法&工程),后者尤甚,都共同確認一個事實:現階段而言,數據遠比算法重要。
固然,目前有多種技術用以在標注的過程中輔助人工,以減小工作量及降低人工標注比例,但至今沒有能在應用領域完全自動化標注的技術出現。
換言之,在看得見的未來之內,人工標注數據仍然是 AI 落地的必要和主流。
人工智能的“勤行”
好消息:數據標注工作幾乎沒有門檻。一般任何專業的大學畢業生,甚至更低學歷都能夠勝任,上手不需要機器學習之類的專業知識。
壞消息:這樣一份工作是純粹的“臟活累活”,一點都不 cool,起薪也很低。所以,雖然這是一件誰都能干的工作,但是恐怕,沒幾個人想干。
就單個任務而言,數據標注是一項很簡單的工作,它的難點在于:
數據一致性
指所有數據的標注原則都是一樣的。如果一份 raw data 由多個人同時標注,就算是反復宣講標注原則,每個人也都有自己的理解和側重,很難保證一致。甚至即使是將所有數據交給一個人,也可能在不同時間段理解不同。
很多公司出于對數據標注工作的不重視(正好與對算法的過分重視相映成趣),采取一種暴力解決方案試圖消除不一致:讓多個人(比如 3 個)同時標注同一份數據,一旦出現不一致,就采用簡單多數法,取最多人一致認定的那種結果。
這種方案對于粗標數據還可以起到一定作用,但如果是精標,則往往連多數人一致的情況都難以出現。如果三個人所標結果完全不一樣,那么這條數據也就失去了標注價值。
在現實中,經常會出現同一份數據因為質量過低,被要求重復標注的情況出現,費時費力。
與業務的集合
業務需求時常變動,技術解決方案變更更多,而每一次變更都可能引起數據標注策略的變化,進而要求對數據重新標注。
目前,由于人工智能的落地點還比較有限,主要集中在大公司里,它們都有各自的標注團隊,業務要求也相對穩定等原因,此種挑戰尚不明顯。
一旦未來人工智能在各個領域全面鋪開,很可能需要的是針對具體企業、具體業務,不斷變更的標注需求。
如何應對快速變更的業務需求,同步更新標注結果,將是一個在 AI 真正服務于大眾時全面爆發的問題,偏偏現階段還未引起足夠重視。
選一條適合自己的入行之路
認清形勢,腳踏實地
尋求入行的人雖多,能真的認清市場當前的需求,了解不同層次的人才定位,并結合自己實際尋找一條可行之路的人太少。
上面我們介紹了 AI 領域內的幾個工種,打個不太恰當的比喻:
- 做算法是屠龍,仗劍江湖,天外飛仙。
- 做工程是狩獵,躍馬奔騰,縱酒狂歌。
- 做數據是養豬,每天拌豬食清豬糞,一臉土一身泥。
人人都想“做算法”,做個獨行天涯的劍客多酷啊,更何況還有那么高的薪水!
卻不想想:大公司里研究院里有那么多讀了十幾二十年論文始終站在 AI 潮頭的資深研究人員。
想要與他們為伍做算法,要么有足夠分量的學術成果,要么解決過大用戶量產品的實際業務問題——你占哪一條呢?
僅僅是學過課程,做過練習或實習性質的小項目,是不足以去做算法的。
現實當中能屠龍的人又有幾個?留給人去屠的龍又有幾條?養豬雖然沒那么高大上,有豬肉吃是實實在在的。
好高騖遠只會虛擲光陰,腳踏實地才能實現理想。
“算法力”的自我測試
對于一心想做算法的同學,我建議大家先自我測試一下自己的算法力。
在此先推薦一個網站,所有有志于算法的同學必須要知道:https://arxiv.org ——這里有多個學科(包括 computer science)的大量論文,里面大部分都是尚未正式出版的***成果。
目前真正在做算法的人,都在大量閱讀這個網站上的文章。
測試“算法力”有個很簡單的驗證方法:從上述網站里找一篇論文(比如這篇:Dynamic Routing Between Capsules),從頭到尾讀一遍。
現在不懂沒關系,至少先試試在不懂的情況下能不能把它從頭到尾一字不漏的讀完,有不認識的字查字典。
如果這都做不到,還是當機立斷和“算法”分手吧。既然注定無緣,何必一味糾纏?
先當程序員再選領域
在 AI 成為潮流的今天,只要能找到一個在 AI 方面相對比較前沿的企業,進去從做一名普通程序員開始吧。
即使本來開發的產品不屬于 AI 范疇,未來通過在舊產品上應用新的 AI 技術或者在公司內部 transfer 到做 AI 產品的 team,都可能獲得入行的機會。甚至具體知識的掌握,你都可以在入職后慢慢積累。
對于大多數 AI 工程人員,這可能才是一條自然的入行之路。
但這一切的前提是:此人首先得是一個合格的程序員!而不是本末倒置,雖然花功夫學了幾個模型、算法,卻連最基本的編程面試題都做不對。
市場對數據標注的潛在需求
高質量的標注數據對高質量模型的影響非常直接。
一群年薪百萬起步的算法工程師耗費經年的成果,對于模型質量直接的影響甚至比不上一個靠譜標注團隊一兩個月的精心標注。對模型的影響尚且如此,更何況是商業價值。
此時此刻,AI 在風口浪尖,大公司、拿了巨額風投的獨角獸 startup,一個個拿出千金市馬骨的氣概,將不可思議的高薪狠狠砸向 AI 領域的***學者,順便捧起了一批年輕的博士,也引來了世人的垂涎。
這種情形能維持多久?商業企業能承受多少年不掙錢只燒錢?待潮涌過后,行業回歸理性,模型還是要用來掙錢的。
到了那個階段,大小企業不會去算成本收益嗎?他們會意識不到將資源投入數據和算法的不同產出比嗎?
企業為了創造利潤應用 AI 技術,算法工程師不是剛需,而數據標注這個人工智能領域的“勤行”,人工智能藍領,一定是剛需!
一切標注工作的難點和潛藏的風險,也就是這項工作的潛力和從事這項工作未來職業發展的可能性所在。
各工種的職業發展
籠統而言,一個技術崗位的 Career Path 總有兩條路徑:
- 領域專家。
- 管理者。
做算法的崗位,雖然也確實有不少人轉向管理,但因其客觀的技術深度和學術積累的習慣,比起其他兩種角色,更容易成為領域專家。
做工程的崗位,作為程序員的一部分,整體的職業發展和普通程序員并無太大區別。
當然也有可能成為領域專家,不過在我們現在的環境里,恐怕轉向管理對于大多數人是更優的選擇。
當然,做工程的,如果真的對技術和算法感興趣,深入下去做算法,最終成為領域專家也完全可能。
而做數據的崗位和所有門檻低的工種一樣,要面臨如何從極大量基數資質類似的人員中脫穎而出的問題。
由于 AI 領域的特殊性,還需要面對如何與越來越多的自動化標注技術共處的問題。
因此,筆者個人建議的數據標注職業提升路徑:經驗+業務+管理。大致步驟為:
- 通過實踐積累數據標注的工作經驗。
- 深入理解業務需求并將其體現到數據的標注結果中。
- 管理標注團隊達到高效的標注結果與業務變更 align。
未來也許會出現一個“數據經理”之類稱謂的職位:其職責以負責提供高質量標注數據為基礎,技術上銜接工程領域的 ETL 和數據處理,產品上對接業務,帶領團隊為公司產品或服務的 revenue 提供直接貢獻。
李燁,現就職于微軟(Microsoft),曾在易安信(EMC)和太陽微系統(Sun Microsystems)任軟件工程師。先后參與聊天機器人、大數據分析平臺等項目的開發,個人微信公眾號:yuesiyuedu。