最差的算法工程師能差到什么程度?
點擊上方“小白學(xué)視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達

編輯:Amusi(CVer)?|? 來源:知乎
https://www.zhihu.com/question/347545092
本文僅作為學(xué)術(shù)分享,如果侵權(quán),會刪文處理
你見過最差的算法工程師能差到什么程度?
作者:Guosheng Hu
https://www.zhihu.com/question/347545092/answer/934820526
真事。
這周面試了一個候選人,面CV/DL/AI的TechLead。簡歷很牛逼,做過很多CV的工業(yè)項目,涵蓋detection, OCR, face recognition, fire/smoke detection等好多項目. 給我們講了45分鐘做得項目,講得很自信。我挑了一個大項目,我說你在這個項目中的貢獻是什么?他說整個項目的所有算法部分都是他實現(xiàn)的。
OK,我開始進行深度學(xué)習(xí)的技術(shù)面。
我先問了兩個深度學(xué)習(xí)的中等難度的問題,他都說不知道。有點冷場,那我趕緊問點簡單的吧。我說,深度學(xué)習(xí)網(wǎng)絡(luò),進行分類時有哪些loss?他猶豫了一下,回答: relu.
瞬間把見過大場面的我還有同事都震住了。
作者:王喆
https://www.zhihu.com/question/347545092/answer/864222675
我們組一個年輕的印度小哥,UCSD畢業(yè)的,按說教育背景也不錯,寫model serving過程中的一步。每個request開20個線程計算。
我說你一個m*n復(fù)雜度的過程,m和n還都小于100,有必要開20個線程計算嗎?你那線程開銷絕對比并行計算收益大多了好嗎。不聽,給我說(大概意思):
并行計算比較cool,老老實實寫那個過程太boring。
行吧,不聽不聽吧,自己折騰去吧。
過兩天給我說load test的時候server的latency翻倍,我一看線程數(shù)都超過JVM上限了能不翻倍嗎。
講這個倒不是想取笑這小哥,而是跟大家討論一個問題,就是什么是比“技術(shù)上最差”更糟糕的情況。
如果你只是基礎(chǔ)差,但總體上是一個嚴謹?shù)娜?,其實到不那么麻煩,就是按部就班的學(xué)習(xí),按部就班的積攢工程經(jīng)驗,無論是哪個領(lǐng)導(dǎo)還是老同事應(yīng)該都是樂于幫助這樣的年輕人的,因為總體來說你還是在解決問題,哪怕速度慢一點,你總歸在成長,而且是讓系統(tǒng)整體混亂程度降低的。
最差的算法工程師其實是什么呢?是自己對技術(shù)的感覺很差,但對自己的感覺挺好,試圖用一些比較fancy的手段解決問題,但實質(zhì)上引入了更高的系統(tǒng)復(fù)雜度,增加了系統(tǒng)潛在風(fēng)險,這樣的人,其實對整個團隊是負能量的存在,始終需要更senior的人幫著擦屁股,這無形增加了整個團隊的工作量,這就是最差的算法工程師。
我特別喜歡的一句話是:
“不帶評論的觀察是人類智慧的最高境界”
希望剛?cè)胄械乃惴ㄍ聜兡軌蛑肋@句話的意義,其實公司不急于讓每個人都發(fā)表意見,在自己技術(shù)能力不那么足的時候,不帶評論,不帶主觀情緒的去學(xué)習(xí)一段時間,好好思考一下別人為什么要做出這樣的技術(shù)決策,好好積攢一下自己的技術(shù)感覺,這是最重要的。相信度過最初的積累階段之后,你能夠為團隊做出,為整個系統(tǒng)做出“熵減”的技術(shù)決策。
作者:胡津銘
https://www.zhihu.com/question/347545092/answer/1212688723
先歪個題,從反面回答一下,我碰到什么樣的算法工程師會認為他/她是優(yōu)秀甚至是卓越的大佬,并選擇緊緊抱住大腿不松手。之前與@熊風(fēng)學(xué)長還有很多來自不同公司的前輩們討論過這個問題,本文很多觀點也是來源于他們,這里也感謝大家的指點??偟脕碚f,以下幾個特點是我特別留意的,如果碰到了我就會認為這位很厲害:
基礎(chǔ)非常扎實。問他/她一些比較經(jīng)典的算法,能夠很清晰地說出算法的特點、適用的場景、坑點、里面的細節(jié)等等。
工程能力很強。我是一位“工程狗”,自己的工程能力很菜,但對工程能力強的同學(xué)非常崇拜 Orz 如果碰到一位算法工程師的工程能力很強,僅憑這一點,我就認為他/她基本上一定是大佬Orz
重視代碼的測試。算法崗的工作并不完全就是調(diào)參煉丹,往往也是需要去寫一些代碼的,例如寫些spark/sql代碼獲得特征,寫模型等等。既然是寫代碼,就可以而且應(yīng)該在其中加上測試。實際上,根據(jù)我的經(jīng)驗,如果碰到某個其他地方好用的模型在自己的場景下效果很差(不reasonable得差),那很可能是數(shù)據(jù)、特征的處理代碼有問題,或者模型的代碼有問題。這種問題可以用單元測試(斷言等)來提前發(fā)現(xiàn),也可以用一些sanity check來發(fā)現(xiàn)。
對場景業(yè)務(wù)的認識很深刻。軟件工程沒有銀彈,機器學(xué)習(xí)也沒有銀彈。用什么樣的特征、什么樣的預(yù)估目標、什么樣的評價指標、甚至什么樣的模型,這些東西都是要與場景業(yè)務(wù)結(jié)合的。換言之,工業(yè)屆里,業(yè)務(wù)先于技術(shù)。很多大神在這個方面做得尤其出色。
在實際場景中,注重先把整個pipeline搭建起來。個人認為,這一點在實際應(yīng)用中往往應(yīng)該是最優(yōu)先的。搭建起來之后,機器學(xué)習(xí)系統(tǒng)的上下游也都可以工作,也可以更好地判斷系統(tǒng)的瓶頸所在,把好剛用在刀刃上。這其實就與做開發(fā)的程序設(shè)計一樣,較早地抽象出比較好的接口、搭建一個系統(tǒng)原型是很重要的。
能夠持續(xù)學(xué)習(xí)新的知識,跟蹤最新的成果,對各種模型的motivation有自己的理解,有自己的insight與vision。這里舉幾個我自己學(xué)習(xí)過程中碰到的例子來說明一下這點。例如,推薦系統(tǒng)中,在Youtube 16年的推薦paper中,為何step1和step2的優(yōu)化目標是不一樣的?人臉檢測中,MTCNN為何要分為多階段?landmark檢測中,3000FPS為何要分為兩個階段?(這些是設(shè)計相關(guān)的motivation)Google的wide&deep為何在Google store的場景下效果好,而在其他的場景下效果不一定好(這是對場景的motivation理解)?文字檢測中,PixelLink為何要引入link?OCR中,CRNN為何要引入一個RNN?機器學(xué)習(xí)系統(tǒng)中,LightGBM是如何針對xgboost存在的哪些缺點進行改進的?(這些是對改進的motivation理解)我認識的一些大佬們會主動結(jié)合文章思考這些問題,有的時候會有與paper所claim的不同的理解(畢竟寫paper的story很多時候也不一定靠譜,大家都懂),甚至還會做實驗驗證自己的理解。然后拿這些問題來考我,在我思考不出來后再告訴我他們的理解與實驗結(jié)果Orz
做多數(shù)實驗之前有自己的假設(shè),根據(jù)實驗結(jié)果會根據(jù)實驗結(jié)果做進一步實驗,或修正假設(shè)、或進一步探究。
自己參與的項目,對其中與自己比較相關(guān)的內(nèi)容的細節(jié)比較清楚,自己負責(zé)的部分能夠了如指掌。
能系統(tǒng)性地分析出機器學(xué)習(xí)整個系統(tǒng)的瓶頸所在,并提出相應(yīng)的解決方案。當(dāng)系統(tǒng)效果不好的時候,知道如何去debug,找到問題所在,改進系統(tǒng)的性能。這方面是我個人尤其欠缺的點。
相應(yīng)地,這些也是我要努力提升的地方。如果我是面試官,我想我也會從這些方面去考察算法工程師的候選人。當(dāng)然了,以上幾點不一定要面面俱到,例如很多大佬不一定工程能力很強,但仍然可以做出很好的東西。換言之,上述特點的precision應(yīng)該很高,但recall不一定特別高。不過,在我看來,與以上描述相反的算法工程師,即基礎(chǔ)不牢、工程差勁、不做測試、不怎么考慮場景、在搭建起pipeline之前過早地沉迷于某一步的優(yōu)化、不學(xué)習(xí)新東西、拿所有實驗當(dāng)黑箱煉丹等等,這樣的算法工程師(其實就是我了)在我看來就比較一般。而差勁的算法工程師,在我看來,是不僅這些方面做不好,還瞧不起這些方面的人。
作者:LinT
https://www.zhihu.com/question/347545092/answer/865893798
強答一波,講講在學(xué)校或網(wǎng)上見到的現(xiàn)象(AI方面,嚴格來說,這些人放到今天的行業(yè)標準下,基本不可能成為一名算法工程師)。
(純屬吐槽,請勿對號入座)
百度百科型選手/PPT選手:常見于各類創(chuàng)新競賽、課程答辯,張口閉口一定是「人工智能」「神經(jīng)網(wǎng)絡(luò)」,上來一定要氣壓群雄,盡管對各類AI問題的進展沒有任何了解,但是在他們這里,各種算法一定是封裝好了,準確率100%,拿來就可以用(plug-and-play)的。什么文本情感分析做輿情監(jiān)控啊,人臉識別智能面試啊,不在話下,章口就來。
博客型選手:大概率嘗試過Andrew Ng的網(wǎng)課,但大概率沒看下去,手里一定有一本Python深度學(xué)習(xí),對原理不求甚解,數(shù)學(xué)公式大概都不想看,論文不想讀,輾轉(zhuǎn)各個博客網(wǎng)站希望找到一個好一點的解讀;跑了一通實例代碼,很有成就感,可能會在某個博客網(wǎng)站發(fā)布一篇博客,標題諸如《自然語言處理入門-XXX》,成功為網(wǎng)絡(luò)貢獻一篇與其他博客雷同率90%的文章,雖然文章名字像是一個系列,但是相信我,他大概率不會再發(fā)布同系列的文章了。
Github選手:常常和PPT選手合作,拿到需求,「人臉識別是吧?」,Github一搜,好多倉庫,全克隆了再說;挑挑揀揀,調(diào)試了半天,依賴裝完代碼跑通了(沒有error),任務(wù)完成,功德無量,接下來的任務(wù)交給其他隊友!
AI+型選手(教師):傳統(tǒng)方向出身,沒有學(xué)過ML/DL,在AI興起以后,把DL當(dāng)萬精油用,深度學(xué)習(xí)預(yù)測地震啊,深度學(xué)習(xí)驗證軟件啊...管它什么數(shù)據(jù)驅(qū)動不驅(qū)動,經(jīng)費拿到手就行了。這類老師對AI的認知可能和PPT選手差不多,比學(xué)生多的本領(lǐng)就是寫本子、打招呼了。帶一個PPT選手加一個Github選手,基本上可以在各類創(chuàng)新競賽/項目中拿到還不錯的成績。
名詞流選手:行走的AI術(shù)語詞典,討論問題時就喜歡堆砌名詞,但從不解釋,故弄玄虛,讓外行有一種「不明覺厲」的感覺,其實一些言論根本經(jīng)不起推敲。
潮流型選手:走在AI潮流前列,除了最新的算法,其他的都是垃圾,「不加attention?你這算法不行!」,「2019年了,還用概率圖模型?!」這類人對算法應(yīng)用場景一無所知,對新算法的狂熱程度堪比娛樂圈流量小生的瘋狂粉絲們。

何去何從型選手:多半是半路出家,轉(zhuǎn)行想做AI的,但是奈何基礎(chǔ)弱,一心只想掙大錢,所以會很迷茫,于是到知乎拋下一個問題:「非cs科班可以學(xué)xxx嗎?」「本人xx,應(yīng)不應(yīng)該xxx?」。奈何這類問題沒有什么深度,基本得不到什么可以參考的回答。這類人問題不在沒有基礎(chǔ),而在沒有主見。
(別打我...)
作者:盛夏的果核
https://www.zhihu.com/question/347545092/answer/840206839
EMMMMMM,原回答不夠嚴謹,下文所說的僅為AI算法工程師。
————————以下為原回答———————————
0級算法工程師——只知道神經(jīng)網(wǎng)絡(luò)和幾個名詞,這一級的人一談到算法和人工智能,無腦牛逼(或無腦diss)就完事了。
1級算法工程師——拜讀過西瓜書/小藍書/花書,看過算法視頻教程,對算法基礎(chǔ)知識有一定的了解;掉過幾個算法包,跑過幾個模型和典型數(shù)據(jù)。這一級通常是調(diào)包俠,調(diào)參怪??陬^禪:xxx算法模型是真的強!實際上對于算法原理思想一無所知,看的書也只是囫圇吞棗。
2級算法工程師——參加過一兩個算法競賽/項目,跑過知名的幾個效果好的算法模型,并且獲得了中規(guī)中矩的成績(前10-20%)。此時認為算法不過如此,數(shù)據(jù)處理、特征構(gòu)建、模型選擇無非那么幾種套路,僅僅靠著模型融合和毫無想法的數(shù)據(jù)處理過程來上分。這一級充斥著大量的校招算法工程師,承擔(dān)著大中廠算法崗炮灰的角色。
3級算法工程師——參加一些算法競賽并獲得比較靠前的名次,對于使用的模型和方法有叫深入的理解,競賽中存在獨立和較深刻的思考?;蛘哂嘘P(guān)于算法項目相關(guān)的論文。這一級在基礎(chǔ)算法能力上來說已經(jīng)過關(guān),可以找到還不錯的工作。比較容易擔(dān)憂的是自身的工程能力。
4級算法工程師——除了比較扎實的算法基礎(chǔ)外,還有比較不錯的工程能力。不僅理論知識過關(guān),同時能將算法結(jié)合到業(yè)務(wù)場景、實際項目當(dāng)中去,并對算法本身進行一定的更改以適應(yīng)背景。這一級的人已經(jīng)能成為offer收割機了,往往能拿到心儀的offer。
(我認為四級已經(jīng)是絕大多數(shù)算法工程師的上限,對于工程師來說繼續(xù)升級需要的是對相關(guān)業(yè)務(wù)的理解、敏銳度和工程能力了,超越了“算法”本身的范疇)
…………
N級算法工程師
對于現(xiàn)有的算法進行創(chuàng)新和改進/開發(fā)算法框架造福AI領(lǐng)域等造成比較大的影響的巨佬。這一級答主根本無法想象那種高度,實屬算法領(lǐng)域的大牛級人物。
