人在江湖飄,誰能不挨刀。一個公司除了鎮山的虎、遠見的鷹、善戰的狼,總會有幾個攪屎棍。
在互聯網行業,算法工程師在開發崗位中要求高(他們通常被定位為給所在團隊構建某領域的深度學習系統,完成給系統的數據采集、數據標引、模型訓練、神經網絡優化等工作,進行評估、優化、加速和部署等,需要有很高的數學水平和邏輯思維能力。)、薪資高(一線城市可以給到25-40K,新一線城市大概12-20K),但一些“素質差”的算法工程師總能莫名其妙混進來。
一個算法工程師能有多差?網友們紛紛獻出公司的“大神”們。
網友納米醬表示:
"我聽過一個江湖潛規則,每一個大公司團隊都會招一個特別不著調,水平也不行,智商也比較低的算法工程師,用來背低績效。
當組里成員感到職業發展太難的時候,就會下意識看看那個人,這樣,心里就會有莫大的安慰。
我當時下意識地看看周圍的同事,發現他們都不符合這些描述。"
網友王喆說:
我們組一個年輕的印度小哥,UCSD畢業的,按說教育背景也不錯,寫model serving過程中的一步。每個request開20個線程計算。
我說你一個m*n復雜度的過程,m和n還都小于100,有必要開20個線程計算嗎?你那線程開銷絕對比并行計算收益大多了好嗎。不聽,給我說(大概意思):并行計算比較cool,老老實實寫那個過程太boring。
行吧,不聽不聽吧,自己折騰去吧。
過兩天給我說load test的時候server的latency翻倍,我一看線程數都超過JVM上限了能不翻倍嗎。
講這個倒不是想取笑這小哥,而是跟大家討論一個問題,就是什么是比“技術上最差”更糟糕的情況。
如果你只是基礎差,但總體上是一個嚴謹的人,其實到不那么麻煩,就是按部就班的學習,按部就班的積攢工程經驗,無論是哪個領導還是老同事應該都是樂于幫助這樣的年輕人的,因為總體來說你還是在解決問題,哪怕速度慢一點,你總歸在成長,而且是讓系統整體混亂程度降低的。
最差的算法工程師其實是什么呢?是自己對技術的感覺很差,但對自己的感覺挺好,試圖用一些比較fancy的手段解決問題,但實質上引入了更高的系統復雜度,增加了系統潛在風險,這樣的人,其實對整個團隊是負能量的存在,始終需要更senior的人幫著擦屁股,這無形增加了整個團隊的工作量,這就是最差的算法工程師。
網友夕小瑤說:
首先我個人覺得,算法工程師的目標既不是精通各種框架,會調各種包,也不是會發paper就是成功,而是有能力解決實實在在被提出的算法問題。
這里的問題可能來源于業務,也可能來源于長遠的戰略部署,甚至可能來源于一次大領導的拍腦袋。不管怎么說,個人覺得能獨立分析,拆解,建模和解決算法問題的算法工程師就是勝任的,否則再怎么花里胡哨都是差勁的。
先說一下本文4個樣本的背景,甲乙丙丁都是一線大廠的正式員工(包括知名外企),工齡從剛入職到3年不等,不過都不是自己團隊的,只是各種原因而接觸到的NLP算法工程師。
出現一個奇怪現象后,我讓他把訓練loss畫出來,結果他不知道怎么畫。然后他不會用xx,我告訴他那就把日志中的loss點提取出來,用*來畫。結果他問我*從哪里下載,有沒有學習教程。
注:*是一個非常常用的python庫
然后又一次,發給他一個非常簡單的代碼,他想改一下其中一個預處理邏輯,我告訴他在哪里改,他直接說看不懂,求幫他改。我問別人,那他拿著工資每天干什么呢,答曰,可能會寫寫paper?
結果最后那篇paper也不是他寫的。
乙比甲好一些,乙想解決一個問題,于是我給他甩了一篇paper,然后他很多地方看不懂,于是這些細節我一點點給他講。講完后他要借鑒其中一個idea用代碼實現,這個idea寫起來就一二十行。他繞不清矩陣計算,讓我教他寫,我給他5分鐘寫完,他很努力的理解了,恍然大霧,拿去跑了,然后跑完覺得很棒,自己又想了一個可能的實現方案,然后問我另一個方案可行性,這兩個方案在數學上是等價的,于是講了等價后,開始問我另一個方案的每行代碼應該怎么實現。
小哥哥,你是故意來搭訕的吧?
有一天我把甲的故事分享給了另一家大廠的小伙伴,小伙伴說,還好,他們組剛入職一個新人,第一次做技術分享,給大家講了半小時的word2vec就結束了,據說,該同學非常費力的直譯了論文原文一些內容,專業名詞翻譯錯了他都不清楚,并且表示負采樣沒看懂,而且不重要,所以就不講了
問了一下丙后來怎么樣了,說被調去做java了,小伙伴反饋丙做java開發還出活挺快的。
丁的故事來源于一個很要好的小伙伴,差點讓小伙伴當場離職。丁是另一家很多人都想去的大廠的。丁的能力則是在甲乙丙之上,各種leetcode題刷的賊溜,textcnn之類的也都很熟,今年年初ta的mentor讓ta用bert跑一下業務上的一個*分類任務,結果其一跑就是X個月,調了X個月后的結論是不如textcnn好用,線下稍微好一些,線上一塌糊涂。后來我一個剛去的小伙伴接手了ta的工作后,發現數據集里,預處理腳本里,訓練腳本和評估腳本里全都有bug,從頭到尾完全就是錯的。小伙伴給ta修完bug后上升了近XX個點。
注:*取值小于5,X取值大于3,XX取值兩位數
丁至今還是在崗的,因為ta的mentor也不太懂這塊,mentor認為是bert代碼太過復雜導致的,情有可原。
網友Dr.Hu說:
這周面試了一個候選人,面CV/DL/AI的TechLead。簡歷很牛逼,做過很多CV的工業項目,涵蓋detection, OCR, face recognition, fire/smoke detection等好多項目. 給我們講了45分鐘做得項目,講得很自信。我挑了一個大項目,我說你在這個項目中的貢獻是什么?他說整個項目的所有算法部分都是他實現的。
OK,我開始進行深度學習的技術面。
我先問了兩個深度學習的中等難度的問題,他都說不知道。有點冷場,那我趕緊問點簡單的吧。我說,深度學習網絡,進行分類時有哪些loss?他猶豫了一下,回答: relu.
瞬間把見過大場面的我還有同事都
震住了。
網友桔了個仔表示:
我有一個前同事,在linkedin上寫著:精通AI,CNN,機器人,量子計算機。
在職近三個月,每天在公司白天睡覺,老板來了就敲幾行。
有一天他知道自己試用期難以通過,自己跑路了。
在他留下的電腦里,只留下一個還沒提交代碼文件。
打開一看,只有幾行:
import numpy as npimport pandas as pdimport tensorflow as tfprint 'fuck fuck fuck'
我至今一直在想這人咋忽悠通過面試的。
網友Xiaotian ZUO說:
坐標法國,某銀行投行。
前年年初,項目主管招進一個data scientist,突尼斯美女,在法國念的博士,機器學習專業,簡歷上精通Python和R,人工智能算法工程師,某專業大數據咨詢公司咨詢師。被塞在了我手下,幫我處理數據做深度學習。
一上來先找我要了兩篇論文啃。這在法國同事中不常見。頓時覺得,這個博士不光有顏,還有實力。
一個禮拜后我開始讓她動數據,布置了幾個小任務。半個小時后她過來問我,為什么一個10k的文檔讀出來size很小。
我至今都記得這兩行萌到銷魂的代碼:
file = "d:\\\\data\\\est.json"len(file)
九個月以后她辭職了,被一個法國自動駕駛公司高薪聘走。
走之前問我的最后一個問題是,K-Fold和Cross Validation有什么區別。也怪我,為啥常常混著用這兩個詞。
從此下定兩個決心:第一,從此以后所有面試的我都親自去面;第二,打死我也不相信法國的自動駕駛技術了。
與這些“大神”相反,一個好的算法工程師應該具備什么樣的特質呢?網友胡津銘總結出九條對照標準:
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,找到問題所在,改進系統的性能。這方面是我個人尤其欠缺的點。
你達標了嗎?
【來源】:知乎https://www.zhihu.com/question/347545092/answer/1033059172
【消息】: 1.《碼客人生》開啟新欄目:《讀者來信》——每月精選往期文章的趣味評論,類似程序員“樹洞”,評論選中者,可在微信公眾號后臺加運營者微信,領取獎勵。 2.《碼客人生》建立讀者交流群了,討論技術話題,分享文章看法,感興趣的人可以后臺加運營者微信入群。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.