近年來,關于算法崗位“越來越卷”的聲音持續熱烈。
我們經常收到一些同學提問:算法崗位聽說人才過剩要頂會才能入場了,不少人都在轉開發。不管是新的應屆生,還是兩三年的職場人,都在被勸退。到底現在的算法工程師需要具備哪些能力,才能滿足要求?
今天我們邀請了 3 名淘系技術的算法工程師,給大家分享一些他們算法入場的經驗,以及在淘系工作中真實需要的能力和素質,希望能夠為你提供一份參考。
01
淘系技術部 | 商業機器智能部北原
“一名優秀的算法工程師,需要具備資料分析能力和代碼工程能力,進而能夠在實際應用中發揮對應模型的上限。“
作為算法工程師,首要任務還是定義問題和解決問題,是以不僅會考察模組化和模型優化能力。而資料分析能力,和代碼工程能力都是非常重要的部分。在面向業務應用的算法工作中,約為60%的時間研究資料和特征的問題,剩下40%的時間會花在模型優化層面上。
而在公司中解決算法問題,與論文中提升資料名額的最大的差異點在于:在公司沒有準備好的資料/方法,有時甚至優化方向和問題本身都需要自己去定義。而資料的數量和品質,會最終決定模型的上限。
下面我就舉幾個工作中所做的項目,公司中的算法工程師需要哪些能力:從一項創新業務中算法工程師在觀察目标制定,模型搭建和資料分析全鍊路中的作用:
項目背景
在一個面向線上的消費場景中,為對應商品制作展示圖/創意廣告的創新業務中。當時我們已經具備為一個商品,制作多張備選創意展示圖/商品圖的的能力。問題在于每個商品,線上上展示商品圖展示數量是有限的。項目初期不同的業務方和設計師,對于最終選擇哪張圖的标準存在明顯的不一緻。
定義問題和優化方向定義問題和優化方向
如果單純跟着商家的美感判斷,人工挑選好/壞做二分類。先不論能否收斂的問題,不同商家/不同的營運會給出不同的結論,另外市場是否買單也會存在挑戰,是以我們放棄這類優化方向。
最終考慮到該業務的目标:是為了給商家減輕負擔并提升商家的收益。是以我們将生成圖檔的好壞投票權交給消費者,使用消費者線上點選率作為評價名額。最終将該問題定義為:創意内容的點選率預估/引導制作問題。确定目标後我們就生成商品圖的各個步驟分階段進行優化。
最大的成長是重新整理了對「完成工作」的認知。以往我比較滿足于自己「工匠」的角色,認為隻要能在規定的時間内,最大限度的保障架構設計和代碼的品質,滿足使用者的需要,并提出一些專業可行的建議,就可以算作是出色的完成了階段性的工作。
模型搭建和資料分析
除了正常的商品特征和使用者行為特征之外,我們就創意内容生成中的各種可能的元素(包括圖檔背景/拍攝視角等),實驗可能影響最終點選率的變量,模組化關聯點選率的資料,指導商品和創意内容的選擇和分發。
另一方面,線上上資料回報的過程中,也有出現資料分析中的辛普森悖論:在分組比較中都占優勢的一方,在整體評價中有時反而是劣勢的一方。對比實驗在每個小類目下的名額都超過Baseline,但是整體統計時資料卻低于Baseline。造成這一點的主要原因在于,不同類别的資料量在實驗組和對照組中的占比不一緻。容易導緻整體資料被資料量更大一些的小分組帶偏。我們需要把握資料的整體和局部,另外優化好頭部流量資料會對項目整體帶來很大的正向回報。
完成以上一系列優化後,生成商品圖的點選率提了20%,流量擴大了4倍。
圖像分類邊界問題
另一個組内的圖像分類項目中,業務方給出了約有40個類目,每個類目下樣本資料量也足夠(不存在長尾問題)。任務看上去并不困難對吧,拿到資料後就開始訓練。優化一段時間後部分類目下準确率始終無法超過80%,模型層面的優化也隻能帶來有限的1-2%的提升。
資料分析後發現問題的原因在于,類目邊界定義不夠清晰:一張圖檔a1被放置在A類目下,同時另一張很相似的圖檔a2卻被放置在B類目下。類目邊界的不清晰最終導緻網絡在這幾種類目下也無法很好的收斂。
最終我們和業務方進行了進一步的交流,明确需求之後,并進行資料集的清洗。最終分類模型準确率和業務應用到業務方的認可。
推薦業務影響模型表達的case
在feeds流排序推薦模型訓練中,算法工程師要做的很重要的一步就是校驗資料的有效性,我就業務過程中踩到過的,資料源層面可能會影響最終點選率的坑:
- 正/負樣本錯判:
多内容展示無盡流場景下使用者下滑的時候,有些情況會導緻在展示時,有些内容/商品隻在底部露了一個頭,沒有完全進入使用者視角内。這時候使用者切換了界面,如果不做任何處理的話,這個樣本就成為了“曝光未點選”的負樣本,會對訓練過程産生一些偏置。
- 不一緻問題:
如果訓練的模型表和特征表沒有部署在同一個節點下,或者因為其他的原因更新出現了時間上的差異,那麼這段時間的推薦結果資料就出現不一緻導緻的異常。
整體來說,算法工程師模組化和模型優化能力确實很重要,某種意義上來說頂會論文發表證明有優秀的模型能力和英文表達能力。但是在工作中,一名優秀的算法工程師,也需要具備資料分析能力,和代碼工程能力,進而能夠在實際應用中發揮對應模型的上限。
02
淘系技術部 | 算法技術 琦舞
“除了必備的工程能力,一個合格的算法工程師必須要有業務owner和産品的視角“
我從事推薦算法行業五年左右,當年僥幸入行。現就職于阿裡巴巴首頁猜你喜歡推薦算法團隊,身邊有一群特别優秀的同僚,他們每個人的業務和技術都十分出彩。自職業生涯伊始,我身邊不乏有一群優秀的夥伴。
他們大緻可以分為兩種,一種熱愛技術,熱愛代碼,熱愛鑽研,熱愛算法,擅于将現實業務問題抽象成算法模型,對代碼和算法情有獨鐘;另外一種情商高,擅長管理,對下的疏通和對上的彙報都極其出色,很快就做到了管理層,這種需要有一定的機遇和智慧,我身邊多數人屬于第一種。
聊聊工程能力的重要性
拿舞蹈來舉例,如果我們把算法訓練出的模型比作一支成品舞,那麼工程能力就是舞蹈基本功。如果完全沒有練習過基本功,或者基本功差,手腳不協調,通過努力,你也可以學會這支成品舞,但卻離藝術和美感度相差甚遠。如果基本功非常紮實,那麼你學任何一支新舞,皆是水到渠成自然而然之事。如果你工程能力很強,基本功紮實,在工作過程中需要解決一些實際問題時,便可以很快上手解決,理論和實踐之間,就差一雙手。
聊聊工作中必備的工程能力。(一個算法工程師不會寫代碼,正如一個裁縫不會裁剪。)
一名合格的算法工程師必須要具備的工程能力:
- debug。快速定位問題的能力十分寶貴。這點是最重要的。
- python、java、c++等,這三種程式設計語言很重要,使用的頻次從高到低。模型離線訓練時需要用到python(無論是tensorflow還是pytorch架構),線上serving或者實作定制化的算法政策時,一般用java實作,線上Query predict服務一般用c++實作。
- 推薦多看一些優秀的語言類書籍,對自己程式設計習慣的養成很有幫助,多看書多思考多寫代碼多實踐,代碼肯定會越來越6的。後面我會寫一個專題,與大家分享對我有幫助的一些算法/語言類技術書籍。
- hive sql。這是工作中使用頻次很高的語言,我們都是sql boy/sql girl。
- shell、Awk等。快速處理資料以及調用一些python、java腳本時,經常會用到。
- scala:在我工作的前幾年用spark比較多,訓練非深度模型很友善,與hive sql的互動也十分友善。
- 對分布式架構的了解。這個非常重要。比如tensorflow架構中的ps/worker/chief是怎麼協同工作的,參數更新在哪裡,模型訓練在哪裡?
除了必備的工程能力,一個合格的算法工程師,并不僅僅是算法工程師,他必須要有業務owner和産品的視角。
有些時候,算法效果提升遇到瓶頸時,不妨想想,從使用者角度出發,從産品層面出發,是否還有更好的切入點。我們也應該深入思考業務運作機制,從投放供給端,通過冷啟,到召回,到粗排,到精排,最後到排序機制,哪個鍊路都有可能出問題,哪個鍊路都有優化點,是以說,一個全棧全鍊路的算法工程師是稀缺的人才。供給/召回/精排/機制的關聯優化,才有可能使線上效果取得質的飛躍。
一個優秀的算法工程師,既可以玩轉模型,又對産品有獨到的見解和思考。比如資訊流推薦場景的優化,當你作為一個真實的使用者去體驗推薦視訊流時,就會很容易發現一些産品或者系統層面的問題,然後再回歸到算法,用技術手段或與産品合作去解決這些問題。隻有這樣,公司的産品才有可能越做越好,算法優化的天花闆才會越來越高。
03
淘系技術部 | 算法技術初類
“對一名有技術追求的算法工程師而言,一定要保持一顆好學的心。“
大學4年,計算機專業,主要是入門計算機領域、接觸了C++和python等程式設計語言;碩士3年,計算機專業,主要是入門機器學習和深度學習算法(圖像識别方向);現為淘系技術部的一名算法工程師(應用算法),入職時間約為600+天,主要涉及的算法是銷量預估和人群選品。我們是一支離業務非常近的算法團隊,核心定位是“業務認知top1,沉澱差異化的技術壁壘”。也就是說,我們的算法政策在很大一定程度上決定了業務結果。
從一名緊密貼近業務的算法工程師來回答該問題,觀點如下:
業務認知&問題定位
首先要清楚你所要解決的問題是什麼,是否需要複雜的算法求解。問題的定義來源于你對業務的認知和了解。我們經常陷入一種誤區,覺得自己是一名算法工程師,遇到任務問題都想要用複雜的算法去求解。正所謂一頓操作猛如虎,得來的效果卻很一般。是以,做事之前一定要在了解業務的基礎上,把問題定位清楚,用合适的方法求解。
資料挖掘&分析
深度學習的應用能夠突飛猛進的一個重要原因就是大資料的支撐。目前擷取資料的成本很低,而資料清理和挖掘的成本很高,但非常重要。資料是模型的輸入,是模型能夠拟合的上限。在入模之前,你需要花一定的精力用于資料工作,這是必要也是值得的。是以,掌握資料能力也是一名算法工程師的必經之路。
算法政策
這是每位算法工程師的硬實力,有了清晰的問題和可用的資料後,我們需要選擇合适的算法政策求解問題。就銷量預估而言,由于特征大部分都是表格型,樹模型及其變體成為首選的方案。通過樹模型,你能夠快速拿到一個不錯的baseline。但千萬不要停滞不前,你需要調研更多的先進的方案進行優化,即使此時能夠拿到的收益不多,但請堅持專研的精神(近期時序模型中,熱度很高的informer值得嘗試)。此外,“人工智能,有多少人工就有多少智能”這句話在實際應用領域展現得淋漓盡緻。政策也屬于算法的一部分,人工政策有時候能夠帶來很大的受益,也能夠找到更适合的算法優化方向。例如,我們在優化首猜的貨品池時,考慮到首猜目前的推薦算法已經非常優秀了,但消費者的成交來源主要是搜尋,我們通過人工分析選擇了做增量貨品供給的方式,拿到了不錯的業務效果。基于此,我們也找到了更合适的選品算法優化方向。
離線實驗和線上AB實驗
實驗是驗證理論的最佳手段,也是最具有說服力的。我們需要找到幾個合适的名額進行優化,并且要保證離線效果跟線上效果沒有太大的gap。例如,銷量預估領域主要用到的名額有WMAPE,結合選品業務的名額有topk商品的召回率。離線實驗得到優化後,還需要到線上進行嚴格的AB Test。此時,我們就拿到了一個完整的實驗及其結論。通過不斷地疊代優化,沉澱各種優質的算法政策。
領域前沿論文
對一名有技術追求的算法工程師而言,一定要保持一顆好學的心。作為打勞工,我們可能很難像在校期間投入大量的時間和精力去研究和複現前沿的論文。但一定要謹記,養成跟進前沿技術的習慣,每周至少花一定的時間去看論文,了解科研學者們在做些啥。高品質的論文,能夠帶來很充足的資訊量。
其他
- 好記性不如爛筆頭
及時梳理和總結很重要。組織架構可能會發生調整,導緻你的方向發生改變。是以,我們要養成階段性的總結和沉澱。
- 勤學好問
身邊有很多優秀的小夥伴,跟大家融洽地相處,更多的交流和讨論,這或許會加快我們成長的速度。
- 參與技術分享
聽别人講,講給别人聽。我們團隊有融洽的技術分享氛圍,互相分享近期專研的技術。你可以從别人身上學到很多寶貴的經驗和知識,也檢驗自己是否真正了解某項技術。
結語
如上,不止是算法崗位,我們也經常聽到“程式員崗位越來越卷”的聲音。任何人覺得自己“被内卷”了,有且隻有一個原因,那就是能力跟不上欲望。
解決方法很簡單,要麼提升能力,要麼降低欲望。
希望你保持積極和好奇的心态,專注于提升自己的模組化能力、資料分析能力、代碼工程能力以及産品視角,永遠做不會被“卷”到的那一波。一起加油~