演算法研究員和演算法工程師的工作有什麼區別呢?在公司的研究院,他們之間是怎麼配合的?


謝邀。

我們組剛好有科學家和工程師, 所以可以比較具體的給大家對比一下日常工作的區別。

首先,從工作內容上來看, 工程師的工作偏重於業務直接相關,一般而言, 工程師是own某一個業務場景的,工作內容最主要的就是這個業務場景下的特徵工程, 模型選擇和調試兩大塊。而科學家的工作則更傾向於在固定的模型上實驗新idea。

舉個例子, 假設我有一個user model是使用RNN來做user的history behavior特徵, 工程師可能會做的事情是, 設計RNN的結構(幾層, 加不加全連接層, 加不加attention, 加不加residual module等等), cook data, 然後調試參數。最典型的就是可以理解成, 所有的這些技術, 都是成熟的, 至少是公開發表過論文的。 我要做的就是進行各種實驗選擇最適合當前業務場景的

科學家一般是在工程師的基礎上,針對一個比較複雜而具體的問題, 進行更深入也更獨立的研究。比如基於上一個模型, 科學家可能會發現, 我們的RNN cell(比如GRU)不是很適合併行計算, 那我能不能設計一個特殊的RNN cell, 使之更適合大數據並行框架。 或者, 我們發現, 現有的RNN cell, 如LSTM或者GRU的記憶能力都不是很持久, 如果我們連續嫁接上百個甚至上千個RNN cell, 那麼就需要一個更持久的記憶單元。

可以看出, 工業界的科學家, 所研究的課題既要貼近業務, 但同時, 又具有高度的業務獨立性(即所研究的問題, 是個純演算法問題,本身與業務無關), 比如上一個問題值得被研究的原因是在RNN已經被user behavior model應用了, 如果我對RNN cell進行了優化, 這項成果可以直接的被應用在業務中。但同時, RNN cell的設計優化這件事, 與業務是無關的。

此外, 除了工作內容上的區別以外, 工作流程也有區別。

基本上來說, 科學家的工作始於一個具體的問題, 也需要進行cook data, 各種離線實驗。 但基本上就終於離線實驗這一步, 接下來,科學家會帶著自己的成果和實驗數據, 和所有可能場景的code owner的工程師合作, 由他們去嘗試這個model在他所own的這個業務場景下double check有沒有效果, 如果確實有的話, 再進行深度的調試, 比如結合場景優化模型結構, 做特徵, 調參數等等, 直到把科學家的成果轉化成一個online ready的業務模型, 在進行各種業務流量測試, 最終上線。當然, 有的科學家會own一個自己的小團隊(畢竟科學家都比較資深), 會把這整個流程自己包圓。

當然, 這是比較理想的情況, 現實情況是, 為了KPI, 科學家也會做一些比較fancy的特徵模型什麼的。 這樣的模型和業務也是相關的,也沒有那麼有創新性, 但比較容易出成果。 畢竟如果長期不出成果, 誰都會心慌慌啊。

再次, 從cover的業務範圍來看。科學家對口的業務範圍, 往往要廣於工程師, 也就是說, 一個科學家工作的範圍, 可能是幾個工程師團隊的範圍。 一些跨team的創新性項目, 雖然也可以由工程師推動, 但往往由科學家推動。

最後, 從技術級別上來看。 工程師和科學家上限基本一致, 都能做到很高的技術level, 比如MS的distinguished engineer(MS純技術的最高級)或者阿里的P10。但下限則不同, 科學家基本上是從Associate這一級開始, 對標Software Engineer II吧, 或者阿里的P6開始。而演算法工程師則跟普通工程師一樣, 從SE或者阿里的P4/P5開始。

此外, 我覺得有兩個誤區要澄清,

一是, 科學家和工程師的工作並沒有嚴格的劃分,也就是說, 上述提到的這些創新性的工作, 工程師如果由好的idea也完全可以去嘗試。 只是說, 這是在你做完本職工作有餘力的情況下。

二是, 科學家和工程師的工作往往是相互合作的。 如前所述, 科學家的實驗成果需要promote給工程師在業務場景下去嘗試, 調優和上線。 同時, 如果工程師遇到什麼很奇怪/有挑戰性的問題, 也會選擇和科學家溝通, 看看能不能由科學家來幫助解決。

最後, 想要給希望成為科學家的諸位一點建議:

1, 科學家和工程師是背景不同,分工合作。 不存在科學家工種由於工程師之說。 也沒有證據表明, 同技術級別的科學家和工程師薪資有顯著的差距。

2, 事實上, 科學家確實基本上都是數學和計算機博士。 所以如果你是碩士, 甚至是轉專業的, 最好不要這麼為難自己, 非科學家不去。

3, 以上內容僅限一線大廠。 小廠的所謂深度學習科學家 基本上就是 演算法team lead的意思。


謝邀。歡迎關注我的知乎。

利益相關:從事過這兩塊工作。

這兩個職位有共同點,也有區別。

共同點:

都是演算法相關的,大多數時候都要做數據清洗,特徵引入,特徵篩選,特徵降維這些事兒。

不同點:

(1)工作內容上:

演算法研究員focus在更通用、更抽象的問題層面,比方說,特徵稀疏情況下如何用抽樣方法解決不均衡數據集的問題。

演算法工程師focus在更業務化、更應用的問題層面,比方說,這個業務場景下,特徵有很多0值,現在哪種已有的抽樣方法最好,可以最快的應用在線上的分類模型裏。

(2)考覈上:

演算法研究員可能有論文要求,演算法工程師大概率沒有這方面要求。

相互怎麼配合?

一般互相瞧不上。工程師覺得研究員研究半天啥都研究不出來。研究員覺得工程師永遠在做重複的工作,啥技術影響力都沒有。


boosting的作者和xgboost的作者之間的區別


分不同的公司。

在阿里,研究員是指P10,再往上是scientist;在創新工場,研究員也是一種職級,比普通演算法工程師資深很多,需要有很多年工作經驗,這種情況下,研究員並不是做研究的,而是一個大組的leader。

在騰訊這邊,研究員更像是一種偏演算法和研究的職位名稱,和後臺開發工程師區分開。而研究員又分為基礎研究和應用研究通道。通常來說,做應用研究的研究員也就是題主所謂的演算法工程師,是要做業務和演算法落地的,做基礎研究的研究員可能對應題主所謂的演算法研究員。比如AI LAB偏研究多一些,他們那邊大多數是屬於題主所謂的演算法研究員。

但是也不能一概而論,要看不同的組,有的組演算法研究員也是full-time在做業務,有的組也鼓勵演算法工程師拿出一小部分KPI做research,跟個人選擇和職業規劃也有關係,也要看老大的風格和組內實際需要。

畢竟是在工業界,很少會有純研究崗像學術界那樣讓你僅憑興趣選課題,演算法研究還是旨在為業務落地服務。

我的工作內容偏演算法研究員,一半的時間和同事做業務,主要負責追蹤前沿演算法、復現並用到業務裏,不斷提高模型效果,自己有創新的點順便申請幾個專利,也算是額外的加分項,還負責language model提供給各個業務使用,另一半的時間帶實習生做research,投一下頂會,研究課題也是來源於業務,最終也要回歸到業務,需要證明真正對業務有幫助。

我的一些同事會更偏演算法工程師一些,要和PM開會,做業務對接,指揮數據獲取及標註事宜,把我這邊的模型集成起來將其工程化,與後端對接等等很多項目方面的事情。

在我看來,偏工程還是偏研究並沒有高下之分,只是個人的興趣和選擇不同而已。


演算法工程崗大佬的雞湯:他們研究院招的人其實也不怎麼樣 也就會寫點python, 演算法終究是實現業務的工具,未來是屬於你們這些對理解演算法 會寫代碼 理解業務的人

研究院大佬的雞湯:小夥子好好乾,不然你就得轉崗了


推薦閱讀:
相關文章