最差的算法工程師能差到什麼程度?

視學算法 發佈 2020-06-30T11:02:55+00:00

點擊上方「視學算法」,選擇加"星標"或「置頂」重磅乾貨,第一時間送達編輯:Amusi | 來源:知乎https://www.zhihu.com/question/347545092本文僅作為學術分享,如果侵權,會刪文處理你見過最差的算法工程師能差到什麼程度?

點擊上方「視學算法」,選擇加"星標"或「置頂」

重磅乾貨,第一時間送達

編輯:Amusi | 來源:知乎

https://www.zhihu.com/question/347545092

本文僅作為學術分享,如果侵權,會刪文處理

你見過最差的算法工程師能差到什麼程度?

作者:Guosheng Hu
https://www.zhihu.com/question/347545092/answer/934820526

真事。

這周面試了一個候選人,面CV/DL/AI的TechLead。簡歷很牛逼,做過很多CV的工業項目,涵蓋detection, OCR, face recognition, fire/smoke detection等好多項目. 給我們講了45分鐘做得項目,講得很自信。我挑了一個大項目,我說你在這個項目中的貢獻是什麼?他說整個項目的所有算法部分都是他實現的。

OK,我開始進行深度學習的技術面。

我先問了兩個深度學習的中等難度的問題,他都說不知道。有點冷場,那我趕緊問點簡單的吧。我說,深度學習網絡,進行分類時有哪些loss?他猶豫了一下,回答: relu.

瞬間把見過大場面的我還有同事都震住了。

作者:王喆
https://www.zhihu.com/question/347545092/answer/864222675

我們組一個年輕的印度小哥,UCSD畢業的,按說教育背景也不錯,寫model serving過程中的一步。每個request開20個線程計算。

我說你一個m*n複雜度的過程,m和n還都小於100,有必要開20個線程計算嗎?你那線程開銷絕對比並行計算收益大多了好嗎。不聽,給我說(大概意思):

並行計算比較cool,老老實實寫那個過程太boring

行吧,不聽不聽吧,自己折騰去吧。

過兩天給我說load test的時候server的latency翻倍,我一看線程數都超過JVM上限了能不翻倍嗎。

講這個倒不是想取笑這小哥,而是跟大家討論一個問題,就是什麼是比「技術上最差」更糟糕的情況。

如果你只是基礎差,但總體上是一個嚴謹的人,其實到不那麼麻煩,就是按部就班的學習,按部就班的積攢工程經驗,無論是哪個領導還是老同事應該都是樂於幫助這樣的年輕人的,因為總體來說你還是在解決問題,哪怕速度慢一點,你總歸在成長,而且是讓系統整體混亂程度降低的。

最差的算法工程師其實是什麼呢?是自己對技術的感覺很差,但對自己的感覺挺好,試圖用一些比較fancy的手段解決問題,但實質上引入了更高的系統複雜度,增加了系統潛在風險,這樣的人,其實對整個團隊是負能量的存在,始終需要更senior的人幫著擦屁股,這無形增加了整個團隊的工作量,這就是最差的算法工程師。

我特別喜歡的一句話是:

「不帶評論的觀察是人類智慧的最高境界」

希望剛入行的算法同事們能夠知道這句話的意義,其實公司不急於讓每個人都發表意見,在自己技術能力不那麼足的時候,不帶評論,不帶主觀情緒的去學習一段時間,好好思考一下別人為什麼要做出這樣的技術決策,好好積攢一下自己的技術感覺,這是最重要的。相信度過最初的積累階段之後,你能夠為團隊做出,為整個系統做出「熵減」的技術決策。

作者:胡津銘
https://www.zhihu.com/question/347545092/answer/1212688723

先歪個題,從反面回答一下,我碰到什麼樣的算法工程師會認為他/她是優秀甚至是卓越的大佬,並選擇緊緊抱住大腿不鬆手。之前與@熊風學長還有很多來自不同公司的前輩們討論過這個問題,本文很多觀點也是來源於他們,這裡也感謝大家的指點。總得來說,以下幾個特點是我特別留意的,如果碰到了我就會認為這位很厲害:

  1. 基礎非常紮實。問他/她一些比較經典的算法,能夠很清晰地說出算法的特點、適用的場景、坑點、裡面的細節等等。
  2. 工程能力很強。我是一位「工程狗」,自己的工程能力很菜,但對工程能力強的同學非常崇拜 Orz 如果碰到一位算法工程師的工程能力很強,僅憑這一點,我就認為他/她基本上一定是大佬Orz
  3. 重視代碼的測試。算法崗的工作並不完全就是調參煉丹,往往也是需要去寫一些代碼的,例如寫些spark/sql代碼獲得特徵,寫模型等等。既然是寫代碼,就可以而且應該在其中加上測試。實際上,根據我的經驗,如果碰到某個其他地方好用的模型在自己的場景下效果很差(不reasonable得差),那很可能是數據、特徵的處理代碼有問題,或者模型的代碼有問題。這種問題可以用單元測試(斷言等)來提前發現,也可以用一些sanity check來發現。
  4. 對場景業務的認識很深刻。軟體工程沒有銀彈,機器學習也沒有銀彈。用什麼樣的特徵、什麼樣的預估目標、什麼樣的評價指標、甚至什麼樣的模型,這些東西都是要與場景業務結合的。換言之,工業屆里,業務先於技術。很多大神在這個方面做得尤其出色。
  5. 在實際場景中,注重先把整個pipeline搭建起來。個人認為,這一點在實際應用中往往應該是最優先的。搭建起來之後,機器學習系統的上下游也都可以工作,也可以更好地判斷系統的瓶頸所在,把好剛用在刀刃上。這其實就與做開發的程序設計一樣,較早地抽象出比較好的接口、搭建一個系統原型是很重要的。
  6. 能夠持續學習新的知識,跟蹤最新的成果,對各種模型的motivation有自己的理解,有自己的insight與vision。這裡舉幾個我自己學習過程中碰到的例子來說明一下這點。例如,推薦系統中,在Youtube 16年的推薦paper中,為何step1和step2的優化目標是不一樣的?人臉檢測中,MTCNN為何要分為多階段?landmark檢測中,3000FPS為何要分為兩個階段?(這些是設計相關的motivation)Google的wide&deep為何在Google store的場景下效果好,而在其他的場景下效果不一定好(這是對場景的motivation理解)?文字檢測中,PixelLink為何要引入link?OCR中,CRNN為何要引入一個RNN?機器學習系統中,LightGBM是如何針對xgboost存在的哪些缺點進行改進的?(這些是對改進的motivation理解)我認識的一些大佬們會主動結合文章思考這些問題,有的時候會有與paper所claim的不同的理解(畢竟寫paper的story很多時候也不一定靠譜,大家都懂),甚至還會做實驗驗證自己的理解。然後拿這些問題來考我,在我思考不出來後再告訴我他們的理解與實驗結果Orz
  7. 做多數實驗之前有自己的假設,根據實驗結果會根據實驗結果做進一步實驗,或修正假設、或進一步探究。
  8. 自己參與的項目,對其中與自己比較相關的內容的細節比較清楚,自己負責的部分能夠了如指掌。
  9. 能系統性地分析出機器學習整個系統的瓶頸所在,並提出相應的解決方案。當系統效果不好的時候,知道如何去debug,找到問題所在,改進系統的性能。這方面是我個人尤其欠缺的點。

相應地,這些也是我要努力提升的地方。如果我是面試官,我想我也會從這些方面去考察算法工程師的候選人。當然了,以上幾點不一定要面面俱到,例如很多大佬不一定工程能力很強,但仍然可以做出很好的東西。換言之,上述特點的precision應該很高,但recall不一定特別高。不過,在我看來,與以上描述相反的算法工程師,即基礎不牢、工程差勁、不做測試、不怎麼考慮場景、在搭建起pipeline之前過早地沉迷於某一步的優化、不學習新東西、拿所有實驗當黑箱煉丹等等,這樣的算法工程師(其實就是我了)在我看來就比較一般。而差勁的算法工程師,在我看來,是不僅這些方面做不好,還瞧不起這些方面的人。

作者:LinT
https://www.zhihu.com/question/347545092/answer/865893798

強答一波,講講在學校或網上見到的現象(AI方面,嚴格來說,這些人放到今天的行業標準下,基本不可能成為一名算法工程師)。

(純屬吐槽,請勿對號入座)

百度百科型選手/PPT選手:常見於各類創新競賽、課程答辯,張口閉口一定是「人工智慧」「神經網絡」,上來一定要氣壓群雄,儘管對各類AI問題的進展沒有任何了解,但是在他們這裡,各種算法一定是封裝好了,準確率100%,拿來就可以用(plug-and-play)的。什麼文本情感分析做輿情監控啊,人臉識別智能面試啊,不在話下,章口就來。

博客型選手:大機率嘗試過Andrew Ng的網課,但大機率沒看下去,手裡一定有一本Python深度學習,對原理不求甚解,數學公式大概都不想看,論文不想讀,輾轉各個博客網站希望找到一個好一點的解讀;跑了一通實例代碼,很有成就感,可能會在某個博客網站發布一篇博客,標題諸如《自然語言處理入門-XXX》,成功為網絡貢獻一篇與其他博客雷同率90%的文章,雖然文章名字像是一個系列,但是相信我,他大機率不會再發布同系列的文章了。

Github選手:常常和PPT選手合作,拿到需求,「人臉識別是吧?」,Github一搜,好多倉庫,全克隆了再說;挑挑揀揀,調試了半天,依賴裝完代碼跑通了(沒有error),任務完成,功德無量,接下來的任務交給其他隊友!

AI+型選手(教師):傳統方向出身,沒有學過ML/DL,在AI興起以後,把DL當萬精油用,深度學習預測地震啊,深度學習驗證軟體啊...管它什麼數據驅動不驅動,經費拿到手就行了。這類老師對AI的認知可能和PPT選手差不多,比學生多的本領就是寫本子、打招呼了。帶一個PPT選手加一個Github選手,基本上可以在各類創新競賽/項目中拿到還不錯的成績。

名詞流選手:行走的AI術語詞典,討論問題時就喜歡堆砌名詞,但從不解釋,故弄玄虛,讓外行有一種「不明覺厲」的感覺,其實一些言論根本經不起推敲。

潮流型選手:走在AI潮流前列,除了最新的算法,其他的都是垃圾,「不加attention?你這算法不行!」,「2019年了,還用機率圖模型?!」這類人對算法應用場景一無所知,對新算法的狂熱程度堪比娛樂圈流量小生的瘋狂粉絲們。

何去何從型選手:多半是半路出家,轉行想做AI的,但是奈何基礎弱,一心只想掙大錢,所以會很迷茫,於是到知乎拋下一個問題:「非cs科班可以學xxx嗎?」「本人xx,應不應該xxx?」。奈何這類問題沒有什麼深度,基本得不到什麼可以參考的回答。這類人問題不在沒有基礎,而在沒有主見。

(別打我...)

作者:盛夏的果核
https://www.zhihu.com/question/347545092/answer/840206839

EMMMMMM,原回答不夠嚴謹,下文所說的僅為AI算法工程師。

————————以下為原回答———————————

0級算法工程師——只知道神經網絡和幾個名詞,這一級的人一談到算法和人工智慧,無腦牛逼(或無腦diss)就完事了。

1級算法工程師——拜讀過西瓜書/小藍書/花書,看過算法視頻教程,對算法基礎知識有一定的了解;掉過幾個算法包,跑過幾個模型和典型數據。這一級通常是調包俠,調參怪。口頭禪:xxx算法模型是真的強!實際上對於算法原理思想一無所知,看的書也只是囫圇吞棗。

2級算法工程師——參加過一兩個算法競賽/項目,跑過知名的幾個效果好的算法模型,並且獲得了中規中矩的成績(前10-20%)。此時認為算法不過如此,數據處理、特徵構建、模型選擇無非那麼幾種套路,僅僅靠著模型融合和毫無想法的數據處理過程來上分。這一級充斥著大量的校招算法工程師,承擔著大中廠算法崗炮灰的角色。

3級算法工程師——參加一些算法競賽並獲得比較靠前的名次,對於使用的模型和方法有叫深入的理解,競賽中存在獨立和較深刻的思考。或者有關於算法項目相關的論文。這一級在基礎算法能力上來說已經過關,可以找到還不錯的工作。比較容易擔憂的是自身的工程能力。

4級算法工程師——除了比較紮實的算法基礎外,還有比較不錯的工程能力。不僅理論知識過關,同時能將算法結合到業務場景、實際項目當中去,並對算法本身進行一定的更改以適應背景。這一級的人已經能成為offer收割機了,往往能拿到心儀的offer。

(我認為四級已經是絕大多數算法工程師的上限,對於工程師來說繼續升級需要的是對相關業務的理解、敏銳度和工程能力了,超越了「算法」本身的範疇)

…………

N級算法工程師

對於現有的算法進行創新和改進/開發算法框架造福AI領域等造成比較大的影響的巨佬。這一級答主根本無法想像那種高度,實屬算法領域的大牛級人物。

關鍵字: