算法工程師也會遇到35歲這道坎么?
文章作者:辛俊波 騰訊 高級研究員
出品平臺:DataFunTalk
想要跨過這道坎,要做的就是努力提升自己的相對不可替代性,從初級漸漸往高級的方向走,個人覺得大體可以分3個階段:
初級算法工程師
算法入行的必經(jīng)之路,所謂的 SQL Boy、調(diào)參俠、數(shù)據(jù)搬運工、煉丹師,都發(fā)生在這個階段。
這個階段的算法工程師,很多時候都是在和數(shù)據(jù)打交道。數(shù)據(jù)漏報、數(shù)據(jù)重復(fù)上報、埋點有誤、多方數(shù)據(jù)統(tǒng)計口徑無法對齊、反作弊口徑定義和對齊、異常數(shù)據(jù)檢測和排查、數(shù)據(jù)缺失處理、樣本清洗、特征統(tǒng)計加工、線上指標(biāo)下降問題排查、bad case 歸因分析、數(shù)據(jù)標(biāo)注...聽起來是不是一點都不 fancy?對于一個負(fù)責(zé)業(yè)務(wù)落地的一線算法工程師來說,這些數(shù)據(jù)工作可能占了日常工作的很大一部分時間。
可就是這些一開始被你看不起的各種所謂 dirty job,這些你在實驗室和學(xué)校接觸不到的工業(yè)數(shù)據(jù)實踐,這些在 paper、書本和網(wǎng)絡(luò)永遠(yuǎn)不會教你的工作,正是你所累積的技術(shù)經(jīng)驗和寶貴的財富,它是驅(qū)動你往下一層級改造的主動力。作為一個算法工程師,如果從沒有在底層有過基礎(chǔ)的開發(fā)和數(shù)據(jù)分析的從業(yè)經(jīng)驗,將來站在更高層的時候很難作出對團隊方向有利的決策。數(shù)據(jù)決定了模型的上界,特征和算法只是在逼近這個上界。
不了解你的業(yè)務(wù)數(shù)據(jù)特點,很難成為一個好的算法工程師。在業(yè)務(wù)實踐中培養(yǎng)鍛煉數(shù)據(jù) sense,是一個初級算法工程師的必修課之一。
這個階段的算法工程師,一般面臨的業(yè)務(wù)問題也比較明確,比如提升召回效果、提升線上 ctr / cvr / gmv / 時長、提升搜索相關(guān)性、降低 bad case 率等等。這些明確的業(yè)務(wù)問題背后,在業(yè)界包括團隊內(nèi)一般都有比較明確的技術(shù)方向,相對應(yīng)的就是一些比較明確的算法問題,比如信息流的 ctr 預(yù)估、用戶興趣建模、廣告出價預(yù)估、相關(guān)性模型、物品召回、圖文標(biāo)簽生成等。
這些不同的算法方向根據(jù)團隊形態(tài)不同,往往會分的更加明細(xì),比如召回方向的可能會有專門的團隊,落到每個人頭上就是負(fù)責(zé)其中一種召回策略:用戶標(biāo)簽召回、行為序列召回、主題召回、雙塔模型召回等。做排序模型的有專門的團隊,可能是每個場景有專門的人負(fù)責(zé),例如首頁/頻道頁/分類頁/熱門頁/子頻道頁等;也可能是每個方向的模型是專門的人負(fù)責(zé),比如 ctr 模型、gmv 模型、時長模型等。機制策略也可能有專門的團隊,每個人負(fù)責(zé)不同的策略方向。
具體業(yè)務(wù)和技術(shù)形態(tài)怎么分工,不需要初級算法工程師操心,那是更高層的算法工程師需要規(guī)劃和操心的事。這個階段的算法工程師的主要目標(biāo),是要使得自己具備能夠高效執(zhí)行具體任務(wù)落地的能力,這其中對動手能力的要求是最高的。
業(yè)界XX會議又又發(fā)表了一篇影響力很大的paper,實驗效果宣稱 ( chui niu ) 業(yè)界最牛;隔壁XX公司的XX團隊又又又發(fā)表 ( PR ) 了最新的算法,聲稱效果提升巨大 ( 可能是 baseline 很低 );著名程序員大型交友網(wǎng)站某 hub 又開源了最新的模型代碼,號稱在多項任務(wù)中吊打當(dāng)前各種主流模型。于是老大一句話,你去調(diào)研下人家怎么做的,回來落地實現(xiàn)下啊。
接下來就是發(fā)揮初級算法工程師能力的時候了??凑撐?、復(fù)現(xiàn)模型、跑實驗、調(diào)參數(shù)、魔改網(wǎng)絡(luò)、效果不好接著調(diào)。這個過程其實也是拉開初級算法工程師們能力的時候,有些人只是做到會用工具,調(diào)調(diào) api,調(diào)調(diào)參數(shù)改改網(wǎng)絡(luò),或者直接 git clone 下載源碼編碼后改改直接跑,至于能否有效果完全看天,真真是在"煉丹"。最終沒效果還要補充一句,論文作者們真的是在吹牛啊,這個算法在我們這里完全沒有效果啊。然后換個模型重新煉丹來過。
有些人在這個過程中不斷累積經(jīng)驗,盡可能去找這些方法的共性。以 ctr 模型為例,embedding 參數(shù)對自己業(yè)務(wù)數(shù)據(jù)效果是否敏感、網(wǎng)絡(luò)層數(shù)的深度對效果的影響、不同正則化方法是否 work、bn/ln/dropout 等方法是否有效、當(dāng)前的特征體系對于高階特征交叉是否已經(jīng)刻畫足夠、attention 到底收益有多大等等。這些如果能從更本質(zhì)和通用共性的角度去分析總結(jié),大概率在同樣的數(shù)據(jù)分布上可以作為以后的先驗判斷,經(jīng)驗是可遷移的,不至于在每一次有新的模型出來就去盲目的做嘗試。
判斷這個階段的工程師的標(biāo)準(zhǔn),就是對于一個明確的算法目標(biāo),是否具備足夠強的執(zhí)行能力將其落地。初級的落地能力只是快速實現(xiàn),更加高級和 solid 的落地能力,是能夠 know how 的落地,有無效果都能做出比較 solid 的分析,并且能夠為以后的迭代優(yōu)化提供經(jīng)驗。
中級算法工程師
——關(guān)鍵詞:算法選型和改造能力——
經(jīng)過了第一階段之后,對于明確的算法問題已經(jīng)具備了足夠的經(jīng)驗,這個階段,需要自己根據(jù)在這個領(lǐng)域內(nèi)的技術(shù)累積,對已有的算法問題,進行適當(dāng)?shù)母脑旌蛢?yōu)化。
以用戶畫像為例,如果是剛搭建的團隊,初期可能更多需要搭建的是整個模型框架,和上下游團隊協(xié)作溝通,以最小的代價迅速搭建起線上可用的基礎(chǔ) baseline。比如最簡單的基于統(tǒng)計的方法,根據(jù)用戶主動行為的物品標(biāo)簽作為用戶的統(tǒng)計畫像標(biāo)簽,如24小時的統(tǒng)計標(biāo)簽作為短期興趣,30天的統(tǒng)計標(biāo)簽并做時間衰減作為長期興趣。這個階段的算法工程師,如果不顧團隊的現(xiàn)狀,一上來就想做能夠體現(xiàn)技術(shù)深度的各種模型,對團隊的進展其實是負(fù)向的。確保算法能夠快速落地并取得收益才是主要目的。
而團隊發(fā)展到了一定階段,有了一定的基礎(chǔ)屬性畫像和統(tǒng)計畫像之后,可以根據(jù)團隊的人力做些深度的發(fā)展,從基礎(chǔ)的統(tǒng)計,可以做無監(jiān)督的隱語義理解 ( lda, w2c 等 )、有監(jiān)督的雙塔建模、加入特征的用戶興趣建模,到用戶序列建模,甚至各種圖方法知識圖譜的手段。而具體選擇哪些方法進行嘗試需要中級算法工程師根據(jù)此前在初級階段累積的經(jīng)驗做預(yù)判,例如假如還沒有用戶 embedding 的表示,將用戶的行為序列作為 sentence 嘗試在很多公司的業(yè)務(wù)都有過收益的 word2vec 可以作為 baseline;引入更多特征的雙塔模型得到用戶的行為 embedding 大概率能進一步提升效果。而如果用戶有些社交屬性關(guān)聯(lián),可以考慮圖方法做進一步的挖掘等等。
作為該方向的負(fù)責(zé)人,需要根據(jù)團隊發(fā)展階段,進行合理的技術(shù)選型,并做適當(dāng)?shù)母脑臁@缭摬辉撚眯蛄心P?,lstm、rnn、transormer、bert 等序列模型如何選擇,位置特征如何設(shè)計融入等等。關(guān)于細(xì)節(jié)的參數(shù)調(diào)優(yōu)需要具體執(zhí)行的初級算法工程師進行實驗,而大方向的技術(shù)選型以及改造方向,則需要中級算法工程師把握和指導(dǎo)。
技術(shù)深度絕對不是考察中級算法工程師的主要手段,判斷這個階段算法工程師的標(biāo)準(zhǔn),主要是是否具備在某個算法方向,獨立承擔(dān)整個算法從選型、改造、應(yīng)用到落地取得成果的能力。
高級算法工程師
——關(guān)鍵詞:業(yè)務(wù)抽象能力——
前面兩個階段的工程師做的事情,嚴(yán)格意義上來說,都是在執(zhí)行這個階段的算法工程師定下來的算法指標(biāo)。這個階段的算法工程師,需要更多的是對整個業(yè)務(wù)的理解,去抽象和定義業(yè)務(wù)問題。比如當(dāng)前階段,業(yè)務(wù)是否需要專門的團隊做用戶畫像,需要多少的人力做素材理解,rank 模型是否還有空間、需要投入多少人力持續(xù)優(yōu)化等。如果戰(zhàn)略目標(biāo)制定不明確,影響的將是整個團隊的努力。
對于更上層的管理層來說,算法團隊的存在意義,絕對不是說一定需要有 ctr 預(yù)估團隊,需要有用戶畫像團隊和視頻理解團隊,需要有人做 nlp、有人做特征等等。整個算法團隊存在的意義,就是能夠最終從算法的層面,解決實際的業(yè)務(wù)問題。在某個階段需要做的是提升用戶點擊率,可能需要有 ctr 模型方向團隊和有用戶畫像方向團隊等;在某個階段引入更多的多媒體素材可能需要有團隊做視頻理解和圖像理解;某個階段需要做用戶增長和留存,可能需要有團隊做專門的數(shù)據(jù)分析影響用戶留存的因素,有團隊做留存模型有團隊做增長模型等等。
這也就決定了不同時期,對于算法團隊的目標(biāo)是不同的,需要的人員配備也不同,而這些,都需要高級算法工程師去站在整個業(yè)務(wù)層面去理解和拆解,然后將目標(biāo)層層傳遞到整個團隊去。判斷這個階段算法工程師的標(biāo)準(zhǔn),主要是對于所負(fù)責(zé)的業(yè)務(wù),能否制定合理的算法可達目標(biāo),并帶領(lǐng)團隊完成實現(xiàn)。
個人覺得,如果35歲了還處在第一階段,也就是只能執(zhí)行明確的算法模型,和剛畢業(yè)的年輕人比可以說完全沒有競爭力,個人職業(yè)生涯的進一步發(fā)展會很受限。
如果已經(jīng)進入第二階段,不可取代性還是很強的,畢竟這個階段的合理算法技術(shù)選型和推動落地能力,是很多剛畢業(yè)和工作不久的年輕算法工程師難以做到的。
如果已經(jīng)到了第三階段至少已經(jīng)是業(yè)務(wù)方向的算法負(fù)責(zé)人了,都這種 title 了,考慮的是怎么往公司的中上層走了,根本不會擔(dān)心年齡這種坎。
35歲對于我個人而言還有幾年的時間,也只有幾年的時間。無論是算法工程師還是其他崗位,深耕該崗位目前而言可能還是最優(yōu)的選擇,也可以說是沒得選的選擇。持續(xù)不斷的去提升自己在技術(shù)、技能、經(jīng)驗、資源上的累積,努力去提升自己的相對不可替代性。
至于年齡,不過是個數(shù)字而已。就算是個坎,它也遠(yuǎn)不是終點。
特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:
長按訂閱更多精彩▼
如有收獲,點個在看,誠摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!