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