”搜推廣“領(lǐng)域算法工程師的段位
作者簡介
作者:算法阿科【清華大學(xué) 控制科學(xué)與工程碩士】
原文:https://zhuanlan.zhihu.com/p/421213010
轉(zhuǎn)載者:楊夕
推薦系統(tǒng) 百面百搭地址:
https://github.com/km1994/RES-Interview-Notes
NLP 百面百搭地址:
https://github.com/km1994/NLP-Interview-Notes
個(gè)人筆記:
https://github.com/km1994/nlp_paper_study

上個(gè)月中旬,寫下這段話
四流工程師整流程
三流工程師調(diào)參數(shù)
二流工程師整特征
一流工程師玩樣本
超一流工程師修優(yōu)化目標(biāo)
轉(zhuǎn)眼間已經(jīng)一個(gè)月了,當(dāng)時(shí)寫下這些主要觀察,工作中有很多工程師奇怪的現(xiàn)象,所以想解釋解釋各個(gè)段位工程師的生存狀態(tài)
很多人不解,私信我,為什么這樣說呢?
今天來給大家詳細(xì)解釋:
先舉幾個(gè)現(xiàn)象,看看是不是很多工程師的日常:
1. 讀了一篇 ** 會(huì)議論文, google/阿里/fb 又發(fā)布了一個(gè)算法,效果挺好的,我們的場(chǎng)景是和文章中介紹也有點(diǎn)像,試一下吧,也許有效果呢?
2. 業(yè)務(wù)效果不理想,趕緊得找一些好特征加上,這幾個(gè)加上有沒有效果呢?也許有吧,試試唄,不試怎么知道?
3. 效果不太好,感覺是數(shù)據(jù)量不夠,那就再加一些數(shù)據(jù)吧,肯定會(huì)好點(diǎn)。
4. 調(diào)參數(shù),多少合適呢?先給一組參數(shù)吧,然后一點(diǎn)一點(diǎn)調(diào),看一下多少合適。
這是不是作為算法工程師工作中經(jīng)常遇到的現(xiàn)象。
然而,高段位的算法專家只要看看這些工程師是如何想的,就知道能達(dá)到的程度了。
四流工程師整流程:
做一個(gè)良好的 pipeline 絕對(duì)是算法工程師很重要的一種能力,但是如果只會(huì)整算法 pipeline 那就不夠了,入門級(jí)的工程師還是會(huì)以pipeline 作為自己的貢獻(xiàn),特別是從純工程領(lǐng)域來做算法的人。當(dāng)然,其實(shí)整pipeline也有高下之分,這是一種架構(gòu)能力:
~pipeline 全跑下來需要多少時(shí)間知道么?
~如果流程中出現(xiàn)錯(cuò)誤,要以最快的速度定位,需要做什么工作?需要額外保留什么數(shù)據(jù)?
~調(diào)度pipeline過程中的 時(shí)間是否可控,上下游依賴任務(wù)是否會(huì)出錯(cuò)?
當(dāng)然,作為算法工程師,只會(huì)弄好一個(gè) pipeline ,那基本還處于入門級(jí),還沒經(jīng)歷過生產(chǎn)環(huán)境的大規(guī)模實(shí)戰(zhàn),面對(duì)業(yè)務(wù)指標(biāo)的強(qiáng)大壓力。
三流工程師調(diào)參數(shù):
這個(gè)級(jí)別的工程師,開始知道調(diào)參的重要,這里主要是指超參數(shù)。超參數(shù)是對(duì)模型的先驗(yàn)的刻畫,那么問題來了,如果陷入先驗(yàn)調(diào)先驗(yàn),是畫地為牢的做法。先驗(yàn)和實(shí)際情況的關(guān)聯(lián)需要有深刻的理解,知道什么情況下,需要用什么樣的先驗(yàn)去嘗試,畢竟嘗試是非?;ㄙM(fèi)時(shí)間和計(jì)算資源的。只會(huì)調(diào)參數(shù)的工程師,不停的調(diào)啊調(diào),不去追蹤問題的本質(zhì),能是一個(gè)高水平的專家么?
二流工程師整特征:
這個(gè)級(jí)別的工程師,為數(shù)是最多的,他們知道,特征的重要性,耗費(fèi)大量的時(shí)間去尋找好特征,這當(dāng)然沒錯(cuò)。不過要注意,找特征,這是一個(gè)開放式的活動(dòng)。意味著,沒有明確標(biāo)準(zhǔn),沒有個(gè)頭,可以沒完沒了的找下去,各種試試,很多時(shí)間和計(jì)算資源就在嘗試中滑過去了。真正的高手,需要對(duì)問題有個(gè)全面的評(píng)估,在尋找優(yōu)質(zhì)特征之前,他需要評(píng)估,他現(xiàn)在最需要的是什么特征。同時(shí)還需要低成本的獲得。而不能想到什么嘗試什么。特征的重要度也是他需要評(píng)估的,特征是否要做什么變化?模型對(duì)于這類特征的承載能力又是如何的??赡苣愕奶卣骱芏嗪芎茫P偷目臻g沒辦法容納。那也是白搭。這些都是很復(fù)雜精細(xì)的問題。需要有個(gè)高觀點(diǎn)、全局性的考慮。所以,從工程師對(duì)待特征的 態(tài)度上,就能看出來,他是哪個(gè)段位的。
一流工程師玩樣本:
一流工程師,對(duì)于pipeline、參數(shù)、特征、都是駕輕就熟,他們的視野會(huì)在更高的維度上。他們會(huì)靈活的看待樣本,如何將不同的樣本進(jìn)行配比,以使得模型的泛化能力很強(qiáng),是他們的基本功。不同的樣本不同的對(duì)待,甚至?xí)巡煌臉颖驹诓煌碾A段多次使用,交叉使用,例如很多 staking方法,樣本的處理非常有技巧,得到的模型可以在樣本量不多的情況下,獲得良好的泛化效果。做機(jī)器學(xué)習(xí)的都知道,獲取樣本數(shù)據(jù),這是個(gè)非常耗費(fèi)時(shí)間和錢的過程,以最低的成本獲得最大的收益,這已經(jīng)不是個(gè)科學(xué)過程,而是個(gè)藝術(shù)過程了。
超一流選手修優(yōu)化目標(biāo):
超一流選手,會(huì)站在更高的角度,尋找合適的優(yōu)化目標(biāo)。一個(gè)優(yōu)秀的目標(biāo),可以讓整個(gè)問題成為一個(gè)可解的閉環(huán)問題。一個(gè)目標(biāo)的確定是很不容易的。需要業(yè)務(wù)方、技術(shù)方、領(lǐng)導(dǎo)層面共同的理解、認(rèn)可。還需要變成可拆解、可執(zhí)行的生產(chǎn)問題。到了子問題層面,目標(biāo)函數(shù)的制訂,損失函數(shù)的確定都是很有技巧的,否則所有的優(yōu)化,就偏離了目標(biāo),縱你千般努力,結(jié)果可能總是背道而馳。我們俗語說的 “選擇大于努力”,也是在提醒我們,有正確的目標(biāo)和走正確的方向,比蒙頭干可能更加重要一些。
好了,先解釋到這里,結(jié)合具體的問題,會(huì)有更多的文章來做解釋。我們會(huì)看到 不同段位的工程師,對(duì)于問題的把握是如何的,他們能否在有限的資源下,面對(duì)復(fù)雜問題,作為最具捷徑的解決辦法。
寫代碼盲目去測(cè)試,去解決問題,這不算真本事。要在不寫代碼的情況下, 通過觀察就可以知道哪條是正確的道路,才是一個(gè)算法專家真正的功力。
《孫子兵法》云:“上兵伐謀 其次伐交 其次伐兵 其下攻城”。拼命嘗試就是在不斷攻城。
不戰(zhàn)而屈人之兵,善之善者也。
