做什麼算是入行AI?附2018網際網路校招高薪清單
本文中,我們將從直觀的角度,管窺承擔不同角色工作所需要具備的素質,日常工作的狀態,和職業發展路徑。
AI原本是一個專業領域,沒什麼特別的。作為碼農一枚,筆者的工作內容正好在這個領域。近來這一年左右時間裡,連續發生了多件事情,使得筆者不得不擡起原本一直低著敲程式碼的頭,看看這個為AI狂歡的世界。
【Case 1】 居然在一個月裡碰到兩位在相對傳統行業創業的親友,來打聽將AI技術應用到他們所在行業上的問題,例如:是聊天機器人是否可以代替人工客服。兩位親友居然都動了僱傭一位演算法工程師的念頭。其中一位真的已經開始物色了。頗費周折找到一位某非 985 院校專業對口的博士,友人有點動心想要聘用,奈何人家開口就要100萬年薪。創業企業雖然已經拿了兩輪
【Case 2】 筆者所在公司今年的校園招聘,本人照例作為 interviewer 參加,面試了幾個來自不同985院校的學生(明年畢業)。順便又和幾位今年剛入職的應屆生聊了聊。
結果發現,所有 interviewee(至少是我碰到的),全都是人工智慧或機器學習方向的學生,所有交流過的新同事,在學校裡做的也全部都是機器學習 or 深度學習演算法。
而且,每一個人對於入職後工作的期望都是做演算法。
人工智慧,已經跌入到兩三年前大資料風口上,全民皆“資料科學家”的套路里了。
到底做什麼,算是入行AI?
這個話題其實在筆者之前的幾個chat裡面已經反覆提到過了,在此再說一遍:工業界直接應用AI技術的人員,大致可以分為三個不同角色:演算法、工程,和資料。
現在各種媒體上,包括 GitChat 中有大量的文章教大家怎麼入行AI,怎麼成為具體某個領域的工程師,告訴大家要在某領域內發展需要掌握的技術棧是什麼,等等……
我們不說怎麼能夠成為XXX,我們先來看看成為XXX之後要做什麼事情,而做這些事情,需要什麼樣的能力,在擁有了這些能力、做上了這件事情之後,又能向什麼方向發展。
換言之,本文中,我們將從直觀的角度,管窺承擔不同角色工作所需要具備的素質,日常工作的狀態,和職業發展路徑。
01 做演算法
▌1.1 日常工作
所有人都想做演算法,那麼,說到底,在工業界做演算法倒是幹什麼?
真正的演算法工程師(也有公司叫科學家),最基本的日常工作其實是:讀論文&實現之——確認最新論文中的闡述是否真實可重現,進一步確認是否可應用於本企業的產品,進而將其應用到實踐中提升產品質量。
▌1.2 必備能力
既然日常工作首先是讀別人論文。那麼,必不可少,作為演算法工程師得具備快速、大量閱讀英語論文的能力。
有一個網站,所有有志於演算法的同學必須要知道:https://arxiv.org ——這裡有多個學科(包括computer science)大量的最新論文。
現在許多科學家、學者、研究人員和博士生在論文剛剛完成,尚未在正式期刊會議上發表時就先將論文釋出在此處,為的是在儘量短的時間延誤下對外傳播自己的成果。
傳統的正規渠道,從論文完成到正式發表之間存在短則三四個月,長則一年半載的延遲。這對一些傳統學科,還勉強可以接受。
但電腦科學,尤其是人工智慧、機器學習、深度學習這幾個當今世界最熱門的主題,大家都在爭分奪秒地搶佔制高點,幾個月的耽擱根本不能容忍。因此,對於AI的學術性文獻而言,arxiv.org 實際上已經成為了當前的集大成之地。
如果要做演算法,平均而言,大致要保持每週讀一篇最新論文的頻率。也許這就是為什麼,到目前為止,筆者所聽聞和見過的演算法工程師都是名校相關專業博士的原因。
經過幾年強化學術研究訓練,這些博士們,就算英語綜合水平不過 CET-4,也能讀得進去一篇篇硬骨頭似的英語論文!
▌1.3 自測“演算法力”
但當然不能說碩士、學士或者其他專業的有志之士就做不成演算法了。人都不是生而知之,不會可以學嘛。
但是到底能不能學會,其實也並不需要三年五載的時間,花費幾萬十幾萬金錢在各種培訓或者付費閱讀上才能夠知道。
有個很簡單的驗證方法:現在就去https://arxiv.org找一篇論文,比如這篇:[Dynamic Routing Between Capsules](https://arxiv.org/pdf/1710.09829.pdf)),從頭到尾讀一遍。
現在不懂沒關係,至少先試試在不懂的情況下能不能把它從頭到尾一字不漏的讀完,有不認識的字查字典。
如果這都做不到,還是當機立斷和“演算法”分手吧。既然註定無緣,何必一味糾纏?
▌1.4 學術實踐能力
如果,碰巧你喜歡讀論文,或者就算不喜歡也有足夠強大的意志力、專注力壓迫自己去強行閱讀論文。那麼恭喜你,你已經跨上了通往演算法山門的第一級臺階。
下面一級是:讀懂論文。
既然要讀論文,讀最新論文,而且閱讀的目的是指導實踐,那麼自然要讀懂。拿起一篇論文就達到*懂*的程度,至少需要下面這三種能力:回溯學習能力;數學能力; 理論聯絡實際,將學術論述與產品、業務結合的能力。
▌1.5 創新型人才
演算法工程師,即使自己不發明新的演算法,不提出新的演算法優化方法,也得去嘗試最新演算法的使用或者把已有演算法用出新花樣來。
毋庸置疑,這是一個有著必然創新性的角色。因此,這個角色必然不適合絕大多數人!
02 做工程
▌2.1 日常工作
相對於演算法的創新和尖端,做工程要平實得多。這一角色比較有代表性的一種崗位就是:機器學習工程師(或戲稱調參工程師)——他們使用別人開發的框架和工具,執行已有演算法,訓練業務資料,獲得工作模型。
其間可能需要一些處理資料、選取特徵或者調節引數的手段,不過一般都有據可循,並不需要自己去發明一個XXXX。
做工程也得讀論文,不過和做演算法不同,做工程讀論文的一般目的不是嘗試最新方法,而是用已知有效的方法來解決實際問題。
這就導致了,做工程的,讀的經常是“舊”論文,或者相對學術含量低一些(不那麼硬)的論文。而且在閱讀時,主要是為了直接找到某個問題的處理方法,因此,可以跳讀。
對於其中的數學公式,能夠讀懂頭尾也就可以了。論文閱讀頻率和學術深度的要求,都比做演算法低得多。
TIP:很多title寫的是“人工智慧/機器學習/深度學習演算法工程師”的招聘崗位,其實招的是做工程的人。不要執著於辭藻,看清楚具體職責和工作內容。
▌2.2 軟體工程師的分支
說到底,機器學習工程師,是廣義的軟體工程師(或雲程式設計師)的一個分支。AI產品開發,是廣義軟體開發的一個領域。
說起來,每一個程式設計師都有一個領域。不過,不同領域在不同時期熱度不同,發展趨勢不同。若干年前,做*底層*的程式設計師在程式界睥睨群雄。寫協議棧的、開發驅動的、實現各種系統介面的程式設計師,站在鄙視鏈的最頂端。
如今,風水輪流轉,昨日黃花已謝,輪到AI封神了。但說到底,開發人工智慧產品的程式設計師,也還是程式設計師。不過是需要懂一定程度的領域內理論知識而已,和以前開發 PCI 協議棧要懂 PCI 協議,寫網絡卡 driver 要懂 TCP/IP 的道理是一樣的。
▌2.3 程式設計師的基本素質
既然是程式設計師,首先就不能丟掉 程式設計師的基本素質:編碼能力,和基礎演算法能力(不是前面說的那種演算法,而是鏈、樹、圖的構建、刪除、遍歷、查詢、排序等資料結構裡講的那種演算法),是最起碼要求。其實,在AI成為潮流的今天,只要能找到一個在AI方面相對比較前沿的企業,進去做一名普通程式設計師。
那麼即使本來開發的產品不屬於AI範疇,未來通過在舊產品上應用新的AI技術,或者在公司內部 transfer 到做 AI 產品的 team,都可能獲得入行的機會。甚至具體知識的掌握,都可以在入職後慢慢積累——對於大多數AI工程人員,這可能才是一條自然的入行之路。
但這一切的前提是:此人首先得是一個合格的程式設計師!而不是本末倒置,雖然花功夫學了幾個模型、演算法,卻連最基本的程式設計面試題都做不對。
▌2.4 做工程,「機器學習」學到多深夠用
當然,既然是有領域的程式設計師,在專業上達到一定深度也是必要的。雖然做工程一般要使用現成技術框架,但並不是說,直接把演算法當黑盒用就可以做一名合格的“調參”工程師了。
把演算法當黑盒用的問題在於:黑盒能夠解決問題的時候,使用方便,而一旦不能解決問題,或者對質量有所要求,就會感覺無所適從。
作為程式設計師、工程人員,想用機器學習演算法解決實際問題,就得對演算法有一定程度的掌握,此外對於資料處理和模型驗證,也需具備相應知識。
三、做資料
此處說得做資料並非資料的清洗和處理——大家可以看到做工程的崗位,有一部分工作內容就是 ETL 和處理資料。此處說的做資料是指資料標註。
▌3.1 標註資料的重要性
雖然機器學習中有無監督學習,但在實踐領域被證明有直接作用的,基本上還都是有監督模型。
近年來,深度學習在很多應用上取得了巨大的成功,而深度學習的成功,無論是影象、語音、NLP、自動翻譯還是AlphaGo,恰恰依賴於海量的標註資料。
無論是做ML還是DL的工程師(演算法&工程),後者有甚,都共同確認一個事實:現階段而言,資料遠比演算法重要。
▌3.2 資料人工標註的必要性
很多人誤以為 AlphaGo Zero 100:0大勝 AlphaGo 是無監督學習的勝利。
其實,之所以有這樣的結果,恰恰是因為 Zero 利用圍棋嚴格完備而明晰的規則,自己製造出了巨大量的標註資料——這些標註資料的數量遠超其前輩 AlphaGo 的輸入,而且可以隨時造出更多。
圍棋是一個人為定義的在19x19點陣範圍內,按完備無二義性規則執行的遊戲,因此計算機程式才能依據規則自動產生標註資料。
真實人類世界的事情,基本沒有完全按矩而行無意外的情況。因此,對人類真正有用的模型,還是需要人工標註的訓練資料。
固然,目前有多種技術用以在標註的過程中輔助人工,以減小工作量及降低人工標註比例。但至今沒有能在應用領域完全自動化標註的技術出現。換言之,在看得見的未來之內,人工標註資料仍然是AI落地的必要和主流。
▌3.3 人工智慧的“勤行”
3.3.1 什麼叫做標註
舉個很簡單的例子說明一下什麼是資料標註:
在開發聊天機器人的時候,我們需要訓練意圖判定和實體識別模型,因此也就需要標註使用者問題的意圖和出現的實體。
這是使用者問題原始資料:“00183號商品快遞到伊犁郵費多少?”
這樣一句話,很顯然問它的使用者是想知道某一種商品發往某地的郵費。郵費是商品的一個屬性,我們把所有查詢商品屬性的意圖都定義為“商品查詢”。
因此,這樣一句話的意圖是“商品查詢”。其中有包含了幾個實體,分別是商品Id,目的地和商品屬性。
這句話被標註出來以後,就是下面這個樣子:
[00183]<-{商品Id}號商品快遞到[伊犁]<-{目的地}[郵費]<-{商品屬性}多少?||商品查詢
具體格式不必糾結。核心一點:標註就是將原始資料內全部或者部分內容,按照業務需求打上定義好的標籤。
3.3.2 資料標註的日常工作
簡單說:資料標註的日常工作就是給各種各樣的資料(文字、影象、視訊、音訊等)打上標籤。
【好訊息】:資料標註工作幾乎沒有門檻。一般任何專業的大學畢業生,甚至更低學歷,都能夠勝任。上手不需要機器學習之類的專業知識。
【壞訊息】:這樣一份工作,是純粹的“髒活累活”,一點都不cool,起薪也很低。
打個不太恰當的比喻:
做演算法是屠龍,仗劍江湖,天外飛仙;
做工程是狩獵,躍馬奔騰,縱酒狂歌;
做資料是養豬,每天拌豬食清豬糞,一臉土一身泥。所以,雖然這是一件誰都能幹的工作,但是恐怕,沒幾個人想幹。
3.3.3 資料標註的難點
就單個任務而言,資料標註是一項很簡單的工作。它的難點在於資料的整體一致性,以及與業務的集合。
【1】資料一致性是指:所有資料的標註原則都是一樣的。
當資料很多的時候,一致性是相當難以保證的,尤其是在有精標需求的情況下。
如果一份 raw data 由多個人同時標註,就算是反覆宣講標註原則,每個人也都有自己的理解和側重,很難保證一致,很可能一句話在某個人看來是“查詢商品”,而在另一個人看來就是“要求售後”。(即使是將所有資料交給一個人,也可能在不同時間段理解不同。)
出於對資料標註工作的不重視(正好與對演算法的過分重視相映成趣),很多公司外包了資料標註工作。
對於資料標註的不一致性,則採取一種暴力解決方案:讓多個人(比如3個)同時標註同一份資料,一旦出現不一致,就採用簡單多數法,取最多人一致認定的那種結果(比如:3個人中兩個都選“查詢商品“,則選定”查詢商品“為最終 label)。
這種方案對於粗標資料還可以起到一定作用,但如果是精標,則往往連多數人一致的情況都難以出現。
如果三個人所標結果完全不一樣,那麼這條資料也就失去了標註價值。在現實中,經常會出現同一份資料因為質量過低,被要求重複標註的情況出現,費時費力。
【2】與業務的集合是資料標註面對的另一個挑戰。
這一點在目前還不是很明顯。因為:目前人工智慧的落地點還比較有限,真正的商業化領域也就是語音和影象處理的少數應用;
owner 都是大公司,有自己的標註團隊,或者僱傭有長期合作關係的第三方標註公司,標註人員都相對有經驗;
業務要求也相對穩定,所需資料標註又相對通用化,普通人都不難理解資料含義和標註原則。一旦未來人工智慧的落地點在各個領域全面鋪開,很可能需要的是針對具體企業、具體業務,不斷變更的標註需求。
標註這件事情看似容易,但是一旦標註原則有所改變,就要整個重新來過。以前的標註不但不是積累,反而是累贅。
如何應對快速變更的業務需求,同步更新標註結果,將是一個在AI真正服務於大眾時全面爆發的問題。偏偏現階段還未引起足夠重視。
3.3.4 資料標註的潛力
就目前而言,資料對模型的影響遠勝於演算法。一群年薪百萬起步的演算法工程師耗費經年的成果,對於模型質量直接的影響甚至比不上一個靠譜標註團隊一兩個月的精心標註。對模型的影響尚且如此,更何況是商業價值。
此時此刻,AI 在風口浪尖,大公司、拿了鉅額風投的獨角獸 startup,一個個拿出千金市馬骨的氣概,將不可思議的高薪狠狠砸向 AI 領域的頂尖學者,順便捧起了一批年輕的博士,也引來了世人的垂涎。
這種情形能維持多久?商業企業能承受多少年不掙錢只燒錢?待潮湧過後,行業迴歸理性,模型還是要用來掙錢的。
到了那個階段,大小企業不會去算成本收益嗎?他們會意識不到將資源投入資料和演算法的不同產出比嗎?
企業為了創造利潤應用AI技術,演算法工程師不是剛需,而資料標註這個人工智慧領域的“勤行”,人工智慧藍領,一定是剛需!一切標註工作的難點和潛藏的風險,也就是這項工作的潛力和從事這項工作未來職業發展的可能性所在。
四、認清形勢,腳踏實地
近來一段時間,能明顯感到,想入行AI的人越來越多,而且增幅越來越大。
為什麼這麼多人想入行AI呢?真的是對電腦科學研究或者擴充套件人類智慧抱著無限的熱忱嗎?說白了,大多數人是為了高薪。
人們為了獲得更高的回報而做出選擇、努力工作,原本是非常正當的事情。關鍵在於,找對路徑。
尋求入行的人雖多,能真的認清市場當前的需求,瞭解不同層次人才定位,並結合自己實際尋找一條可行之路的人太少。
人人都想“做演算法”,卻不想想:大公司裡的研究院養著一群高階科學家,有得是讀了十幾二十年論文始終站在AI潮頭的資深研究人員。
想要與他們為伍做演算法,須有可以與之並列的成就:要麼有足夠分量的學術成果,要麼解決過大使用者量產品的實際業務問題——你佔哪一條呢?僅僅是學過課程,做過練習或實習性質的小專案,是不足以去做演算法的。
誰在自己的想象世界裡不是屠龍的劍客?但現實當中能屠龍的人又有幾個?留給人去屠的龍又有幾條?養豬雖然沒那麼高大上,有豬肉吃是實實在在的。好高騖遠只會虛擲光陰,腳踏實地才能實現理想——這也是筆者寫作此文的初衷。
五、入門 AI,先吃透「機器學習」
首先,我們來看一下當前機器學習領域招聘市場的行情。
上面表格中所有帶有“演算法”、“人工智慧”、“資料探勘”、“視覺”字樣的職位,都需要懂機器學習。
在產品和服務中應用機器學習模型,已經逐步成為了網際網路行業的通行方法。甚至很多傳統軟體企業,也開始嘗試應用機器學習。
說得更直接一點,人工智慧正處在炙手可熱的風口浪尖上,作為程式設計師不會機器學習都不好意思去找工作了。很多技術開發者迫切希望快速進入人工智慧領域,從事工程或者演算法等相關工作。
▌從「模型」入手
針對機器學習初學者,我們可以從機器學習、深度學習最基本的原理及學習意義入手,以模型為驅動,吃透幾大最經典的機器學習模型——學習其原理、數學推導、訓練過程和優化方法。
以【機器學習極簡入門】為例的設定:
1. 有監督學習:
詳細講解有監督學習中經典的線性迴歸、樸素貝葉斯、邏輯迴歸、決策樹、支援向量機、支援向量迴歸、隱馬爾科夫和條件隨機場模型。
2. 無監督學習
重在詳細講解無監督學習中的聚類、高斯混合及主成分分析等模型。
3. 從機器學習到深度學習。
講解深度學習基本原理、深度學習與機器學習的關聯與銜接、以及深度學習目前的應用領域,為「深度學習」的進階奠定基礎。
配合精心設計的極小資料量的「極簡版」例項,方便讀者從直觀上了解模型的執行原理,利用例項大家還可將自己變身為「人肉計算機」,通過口算/筆算每一步的推導,模擬演算法全過程,進而徹底理解每個模型的運作方式。
(1)AI 技術崗位求職知識儲備
如果大家真的有意投身到人工智慧領域做技術性工作,那麼經過技術筆試、面試是必要條件。在面試中被要求從頭解釋某一個機器學習模型的執行原理、推導過程和優化方法,是目前非常常見的一種測試方法。
機器學習模型雖然很多,但是經典、常用的很有限。如果能把這個課程中講解的經典模型都學會,用來挑戰面試題相信是足夠了。
(2)觸類旁通各大模型與演算法
各種機器學習模型的具體形式和推導過程雖然有很大差別,但卻在更基礎的層面有許多共性。
掌握共性之後,再去學新的模型、演算法,就會高效得多。雖然本課的第二部分集中描述了部分一般性共同點,但真要理解箇中含義,卻還要以若干具體模型為載體,經由學習其從問題發源,到解決方案,再到解決方案的數學抽象,以及後續數學模型求解的全過程,來了解體味。這也就是本課以模型為驅動的出發點。
(3)極簡版例項體驗實際應用
運用到實踐中去,是我們學習一切知識的目的。機器學習本身更是一種實操性很強的技術,學習它,原本就是為了應用。反之,應用也能夠促進知識的深化理解和吸收。
本課雖然以原理為核心,但也同樣介紹了:劃分資料集;從源資料中提取特徵;模型訓練過程;模型的測試和評估等方法和工具。
(4)配套資料+程式碼快速實操上手
本課程中各個例項的 Python 程式碼及相應資料,大家可以下載、執行、改寫、參考。
除了上述幾點,我希望本課的讀者在知識和技巧的掌握之外,能夠將學習到的基本規律運用到日常生活中,更加理性地看待世界。