文章作者:辛俊波 騰訊 高級研究員
編輯整理:Hoh
內容來源:作者授權
出品平臺:DataFunTalk
註:歡迎轉載,轉載請留言。
想要跨過這道坎,要做的就是努力提升自己的相對不可替代性,從初級漸漸往高級的方向走,個人覺得大體可以分3個階段:
初級算法工程師
算法入行的必經之路,所謂的 SQL Boy、調參俠、數據搬運工、煉丹師,都發生在這個階段。
這個階段的算法工程師,很多時候都是在和數據打交道。數據漏報、數據重複上報、埋點有誤、多方數據統計口徑無法對齊、反作弊口徑定義和對齊、異常數據檢測和排查、數據缺失處理、樣本清洗、特徵統計加工、線上指標下降問題排查、bad case 歸因分析、數據標註...聽起來是不是一點都不 fancy?對於一個負責業務落地的一線算法工程師來說,這些數據工作可能佔了日常工作的很大一部分時間。
可就是這些一開始被你看不起的各種所謂 dirty job,這些你在實驗室和學校接觸不到的工業數據實踐,這些在 paper、書本和網絡永遠不會教你的工作,正是你所累積的技術經驗和寶貴的財富,它是驅動你往下一層級改造的主動力。作為一個算法工程師,如果從沒有在底層有過基礎的開發和數據分析的從業經驗,將來站在更高層的時候很難作出對團隊方向有利的決策。數據決定了模型的上界,特徵和算法只是在逼近這個上界。
不了解你的業務數據特點,很難成為一個好的算法工程師。在業務實踐中培養鍛鍊數據 sense,是一個初級算法工程師的必修課之一。
這個階段的算法工程師,一般面臨的業務問題也比較明確,比如提升召回效果、提升線上 ctr / cvr / gmv / 時長、提升搜索相關性、降低 bad case 率等等。這些明確的業務問題背後,在業界包括團隊內一般都有比較明確的技術方向,相對應的就是一些比較明確的算法問題,比如信息流的 ctr 預估、用戶興趣建模、廣告出價預估、相關性模型、物品召回、圖文標籤生成等。
這些不同的算法方向根據團隊形態不同,往往會分的更加明細,比如召回方向的可能會有專門的團隊,落到每個人頭上就是負責其中一種召回策略:用戶標籤召回、行為序列召回、主題召回、雙塔模型召回等。做排序模型的有專門的團隊,可能是每個場景有專門的人負責,例如首頁/頻道頁/分類頁/熱門頁/子頻道頁等;也可能是每個方向的模型是專門的人負責,比如 ctr 模型、gmv 模型、時長模型等。機制策略也可能有專門的團隊,每個人負責不同的策略方向。
具體業務和技術形態怎麼分工,不需要初級算法工程師操心,那是更高層的算法工程師需要規劃和操心的事。這個階段的算法工程師的主要目標,是要使得自己具備能夠高效執行具體任務落地的能力,這其中對動手能力的要求是最高的。
業界XX會議又又發表了一篇影響力很大的paper,實驗效果宣稱 ( chui niu ) 業界最牛;隔壁XX公司的XX團隊又又又發表 ( PR ) 了最新的算法,聲稱效果提升巨大 ( 可能是 baseline 很低 );著名程式設計師大型交友網站某 hub 又開源了最新的模型代碼,號稱在多項任務中吊打當前各種主流模型。於是老大一句話,你去調研下人家怎麼做的,回來落地實現下啊。
接下來就是發揮初級算法工程師能力的時候了。看論文、復現模型、跑實驗、調參數、魔改網絡、效果不好接著調。這個過程其實也是拉開初級算法工程師們能力的時候,有些人只是做到會用工具,調調 api,調調參數改改網絡,或者直接 git clone 下載源碼編碼後改改直接跑,至於能否有效果完全看天,真真是在"煉丹"。最終沒效果還要補充一句,論文作者們真的是在吹牛啊,這個算法在我們這裡完全沒有效果啊。然後換個模型重新煉丹來過。
有些人在這個過程中不斷累積經驗,儘可能去找這些方法的共性。以 ctr 模型為例,embedding 參數對自己業務數據效果是否敏感、網絡層數的深度對效果的影響、不同正則化方法是否 work、bn/ln/dropout 等方法是否有效、當前的特徵體系對於高階特徵交叉是否已經刻畫足夠、attention 到底收益有多大等等。這些如果能從更本質和通用共性的角度去分析總結,大概率在同樣的數據分布上可以作為以後的先驗判斷,經驗是可遷移的,不至於在每一次有新的模型出來就去盲目的做嘗試。
判斷這個階段的工程師的標準,就是對於一個明確的算法目標,是否具備足夠強的執行能力將其落地。初級的落地能力只是快速實現,更加高級和 solid 的落地能力,是能夠 know how 的落地,有無效果都能做出比較 solid 的分析,並且能夠為以後的迭代優化提供經驗。
中級算法工程師——關鍵詞:算法選型和改造能力——經過了第一階段之後,對於明確的算法問題已經具備了足夠的經驗,這個階段,需要自己根據在這個領域內的技術累積,對已有的算法問題,進行適當的改造和優化。
以用戶畫像為例,如果是剛搭建的團隊,初期可能更多需要搭建的是整個模型框架,和上下遊團隊協作溝通,以最小的代價迅速搭建起線上可用的基礎 baseline。比如最簡單的基於統計的方法,根據用戶主動行為的物品標籤作為用戶的統計畫像標籤,如24小時的統計標籤作為短期興趣,30天的統計標籤並做時間衰減作為長期興趣。這個階段的算法工程師,如果不顧團隊的現狀,一上來就想做能夠體現技術深度的各種模型,對團隊的進展其實是負向的。確保算法能夠快速落地並取得收益才是主要目的。
而團隊發展到了一定階段,有了一定的基礎屬性畫像和統計畫像之後,可以根據團隊的人力做些深度的發展,從基礎的統計,可以做無監督的隱語義理解 ( lda, w2c 等 )、有監督的雙塔建模、加入特徵的用戶興趣建模,到用戶序列建模,甚至各種圖方法知識圖譜的手段。而具體選擇哪些方法進行嘗試需要中級算法工程師根據此前在初級階段累積的經驗做預判,例如假如還沒有用戶 embedding 的表示,將用戶的行為序列作為 sentence 嘗試在很多公司的業務都有過收益的 word2vec 可以作為 baseline;引入更多特徵的雙塔模型得到用戶的行為 embedding 大概率能進一步提升效果。而如果用戶有些社交屬性關聯,可以考慮圖方法做進一步的挖掘等等。
作為該方向的負責人,需要根據團隊發展階段,進行合理的技術選型,並做適當的改造。例如該不該用序列模型,lstm、rnn、transormer、bert 等序列模型如何選擇,位置特徵如何設計融入等等。關於細節的參數調優需要具體執行的初級算法工程師進行實驗,而大方向的技術選型以及改造方向,則需要中級算法工程師把握和指導。
技術深度絕對不是考察中級算法工程師的主要手段,判斷這個階段算法工程師的標準,主要是是否具備在某個算法方向,獨立承擔整個算法從選型、改造、應用到落地取得成果的能力。
高級算法工程師——關鍵詞:業務抽象能力——前面兩個階段的工程師做的事情,嚴格意義上來說,都是在執行這個階段的算法工程師定下來的算法指標。這個階段的算法工程師,需要更多的是對整個業務的理解,去抽象和定義業務問題。比如當前階段,業務是否需要專門的團隊做用戶畫像,需要多少的人力做素材理解,rank 模型是否還有空間、需要投入多少人力持續優化等。如果戰略目標制定不明確,影響的將是整個團隊的努力。
對於更上層的管理層來說,算法團隊的存在意義,絕對不是說一定需要有 ctr 預估團隊,需要有用戶畫像團隊和視頻理解團隊,需要有人做 nlp、有人做特徵等等。整個算法團隊存在的意義,就是能夠最終從算法的層面,解決實際的業務問題。在某個階段需要做的是提升用戶點擊率,可能需要有 ctr 模型方向團隊和有用戶畫像方向團隊等;在某個階段引入更多的多媒體素材可能需要有團隊做視頻理解和圖像理解;某個階段需要做用戶增長和留存,可能需要有團隊做專門的數據分析影響用戶留存的因素,有團隊做留存模型有團隊做增長模型等等。
這也就決定了不同時期,對於算法團隊的目標是不同的,需要的人員配備也不同,而這些,都需要高級算法工程師去站在整個業務層面去理解和拆解,然後將目標層層傳遞到整個團隊去。判斷這個階段算法工程師的標準,主要是對於所負責的業務,能否制定合理的算法可達目標,並帶領團隊完成實現。
個人覺得,如果35歲了還處在第一階段,也就是只能執行明確的算法模型,和剛畢業的年輕人比可以說完全沒有競爭力,個人職業生涯的進一步發展會很受限。
如果已經進入第二階段,不可取代性還是很強的,畢竟這個階段的合理算法技術選型和推動落地能力,是很多剛畢業和工作不久的年輕算法工程師難以做到的。
如果已經到了第三階段至少已經是業務方向的算法負責人了,都這種 title 了,考慮的是怎麼往公司的中上層走了,根本不會擔心年齡這種坎。
35歲對於我個人而言還有幾年的時間,也只有幾年的時間。無論是算法工程師還是其他崗位,深耕該崗位目前而言可能還是最優的選擇,也可以說是沒得選的選擇。持續不斷的去提升自己在技術、技能、經驗、資源上的累積,努力去提升自己的相對不可替代性。
至於年齡,不過是個數字而已。就算是個坎,它也遠不是終點。
今天的分享就到這裡,謝謝大家。
對於35歲這個話題,你有什麼看法呢?把文章分享到朋友圈,說說你的看法吧~~
社群推薦:
歡迎加入 DataFunTalk 算法工程師交流群,跟同行零距離交流。如想進群,請加逃課兒同學的微信 ( 微信號:DataFunTalker ),回覆:算法工程師,逃課兒會自動拉你進群。
https://www.zhihu.com/people/xinjunbo關於我們:
DataFunTalk 專注於大數據、人工智慧技術應用的分享與交流。發起於2017年,在北京、上海、深圳、杭州等城市舉辦超過100場線下沙龍、論壇及峰會,已邀請近500位專家和學者參與分享。其公眾號 DataFunTalk 累計生產原創文章400+,百萬+閱讀,5萬+精準粉絲。一個在看,一段時光!👇