大數據

2021年,算法工程師必備的能力是什麼?

近年來,關於算法崗位“越來越卷”的聲音持續熱烈。

我們經常收到一些同學提問:算法崗位聽說人才過剩要頂會才能入場了,不少人都在轉開發。不管是新的應屆生,還是兩三年的職場人,都在被勸退。到底現在的算法工程師需要具備哪些能力,才能滿足要求?

今天我們邀請了 3 名淘系技術的算法工程師,給大家分享一些他們算法入場的經驗,以及在淘系工作中真實需要的能力和素質,希望能夠為你提供一份參考。

01

淘系技術部 | 商業機器智能部北原

“一名優秀的算法工程師,需要具備數據分析能力和代碼工程能力,從而能夠在實際應用中發揮對應模型的上限。“

作為算法工程師,首要任務還是定義問題和解決問題,所以不僅會考察建模和模型優化能力。而數據分析能力,和代碼工程能力都是非常重要的部分。在面向業務應用的算法工作中,約為60%的時間研究數據和特徵的問題,剩下40%的時間會花在模型優化層面上。

而在公司中解決算法問題,與論文中提升數據指標的最大的差異點在於:在公司沒有準備好的數據/方法,有時甚至優化方向和問題本身都需要自己去定義。而數據的數量和質量,會最終決定模型的上限。

下面我就舉幾個工作中所做的項目,公司中的算法工程師需要哪些能力:從一項創新業務中算法工程師在觀察目標制定,模型搭建和數據分析全鏈路中的作用:

項目背景

在一個面向線上的消費場景中,為對應商品製作展示圖/創意廣告的創新業務中。當時我們已經具備為一個商品,製作多張備選創意展示圖/商品圖的的能力。問題在於每個商品,在線上展示商品圖展示數量是有限的。項目初期不同的業務方和設計師,對於最終選擇哪張圖的標準存在明顯的不一致。

定義問題和優化方向定義問題和優化方向

如果單純跟著商家的美感判斷,人工挑選好/壞做二分類。先不論能否收斂的問題,不同商家/不同的運營會給出不同的結論,另外市場是否買單也會存在挑戰,因此我們放棄這類優化方向。

最終考慮到該業務的目標:是為了給商家減輕負擔並提升商家的收益。因此我們將生成圖片的好壞投票權交給消費者,使用消費者線上點擊率作為評價指標。最終將該問題定義為:創意內容的點擊率預估/引導製作問題。確定目標後我們就生成商品圖的各個步驟分階段進行優化。

最大的成長是刷新了對「完成工作」的認知。以往我比較滿足於自己「工匠」的角色,認為只要能在規定的時間內,最大限度的保障架構設計和代碼的質量,滿足用戶的需要,並提出一些專業可行的建議,就可以算作是出色的完成了階段性的工作。

模型搭建和數據分析

除了常規的商品特徵和用戶行為特徵之外,我們就創意內容生成中的各種可能的元素(包括圖片背景/拍攝視角等),實驗可能影響最終點擊率的變量,建模關聯點擊率的數據,指導商品和創意內容的選擇和分發。

另一方面,在線上數據反饋的過程中,也有出現數據分析中的辛普森悖論:在分組比較中都佔優勢的一方,在整體評價中有時反而是劣勢的一方。對比實驗在每個小類目下的指標都超過Baseline,但是整體統計時數據卻低於Baseline。造成這一點的主要原因在於,不同類別的數據量在實驗組和對照組中的佔比不一致。容易導致整體數據被數據量更大一些的小分組帶偏。我們需要把握數據的整體和局部,另外優化好頭部流量數據會對項目整體帶來很大的正向反饋。

完成以上一系列優化後,生成商品圖的點擊率提了20%,流量擴大了4倍。

圖像分類邊界問題

另一個組內的圖像分類項目中,業務方給出了約有40個類目,每個類目下樣本數據量也足夠(不存在長尾問題)。任務看上去並不困難對吧,拿到數據後就開始訓練。優化一段時間後部分類目下準確率始終無法超過80%,模型層面的優化也只能帶來有限的1-2%的提升。

數據分析後發現問題的原因在於,類目邊界定義不夠清晰:一張圖片a1被放置在A類目下,同時另一張很相似的圖片a2卻被放置在B類目下。類目邊界的不清晰最終導致網絡在這幾種類目下也無法很好的收斂。

最終我們和業務方進行了進一步的交流,明確需求之後,並進行數據集的清洗。最終分類模型準確率和業務應用到業務方的認可。

推薦業務影響模型表達的case

在feeds流排序推薦模型訓練中,算法工程師要做的很重要的一步就是校驗數據的有效性,我就業務過程中踩到過的,數據源層面可能會影響最終點擊率的坑:

  • 正/負樣本錯判:

多內容展示無盡流場景下用戶下滑的時候,有些情況會導致在展示時,有些內容/商品只在底部露了一個頭,沒有完全進入用戶視角內。這時候用戶切換了界面,如果不做任何處理的話,這個樣本就成為了“曝光未點擊”的負樣本,會對訓練過程產生一些偏置。

  • 不一致問題:

如果訓練的模型表和特徵表沒有部署在同一個節點下,或者因為其他的原因更新出現了時間上的差異,那麼這段時間的推薦結果數據就出現不一致導致的異常。

整體來說,算法工程師建模和模型優化能力確實很重要,某種意義上來說頂會論文發表證明有優秀的模型能力和英文表達能力。但是在工作中,一名優秀的算法工程師,也需要具備數據分析能力,和代碼工程能力,從而能夠在實際應用中發揮對應模型的上限。

02

淘系技術部 | 算法技術 琦舞
“除了必備的工程能力,一個合格的算法工程師必須要有業務owner和產品的視角“

我從事推薦算法行業五年左右,當年僥倖入行。現就職於阿里巴巴首頁猜你喜歡推薦算法團隊,身邊有一群特別優秀的同事,他們每個人的業務和技術都十分出彩。自職業生涯伊始,我身邊不乏有一群優秀的夥伴。

他們大致可以分為兩種,一種熱愛技術,熱愛代碼,熱愛鑽研,熱愛算法,擅於將現實業務問題抽象成算法模型,對代碼和算法情有獨鍾;另外一種情商高,擅長管理,對下的疏通和對上的彙報都極其出色,很快就做到了管理層,這種需要有一定的機遇和智慧,我身邊多數人屬於第一種。

聊聊工程能力的重要性

拿舞蹈來舉例,如果我們把算法訓練出的模型比作一支成品舞,那麼工程能力就是舞蹈基本功。如果完全沒有練習過基本功,或者基本功差,手腳不協調,通過努力,你也可以學會這支成品舞,但卻離藝術和美感度相差甚遠。如果基本功非常紮實,那麼你學任何一支新舞,皆是水到渠成自然而然之事。如果你工程能力很強,基本功紮實,在工作過程中需要解決一些實際問題時,便可以很快上手解決,理論和實踐之間,就差一雙手。

聊聊工作中必備的工程能力。(一個算法工程師不會寫代碼,正如一個裁縫不會裁剪。)

一名合格的算法工程師必須要具備的工程能力:

  1. debug。快速定位問題的能力十分寶貴。這點是最重要的。
  2. python、java、c++等,這三種編程語言很重要,使用的頻次從高到低。模型離線訓練時需要用到python(無論是tensorflow還是pytorch框架),線上serving或者實現定製化的算法策略時,一般用java實現,線上Query predict服務一般用c++實現。
  3. 推薦多看一些優秀的語言類書籍,對自己編程習慣的養成很有幫助,多看書多思考多寫代碼多實踐,代碼肯定會越來越6的。後面我會寫一個專題,與大家分享對我有幫助的一些算法/語言類技術書籍。
  4. hive sql。這是工作中使用頻次很高的語言,我們都是sql boy/sql girl。
  5. shell、Awk等。快速處理數據以及調用一些python、java腳本時,經常會用到。
  6. scala:在我工作的前幾年用spark比較多,訓練非深度模型很方便,與hive sql的交互也十分方便。
  7. 對分佈式框架的理解。這個非常重要。比如tensorflow框架中的ps/worker/chief是怎麼協同工作的,參數更新在哪裡,模型訓練在哪裡?

除了必備的工程能力,一個合格的算法工程師,並不僅僅是算法工程師,他必須要有業務owner和產品的視角。

有些時候,算法效果提升遇到瓶頸時,不妨想想,從用戶角度出發,從產品層面出發,是否還有更好的切入點。我們也應該深入思考業務運行機制,從投放供給端,通過冷啟,到召回,到粗排,到精排,最後到排序機制,哪個鏈路都有可能出問題,哪個鏈路都有優化點,所以說,一個全棧全鏈路的算法工程師是稀缺的人才。供給/召回/精排/機制的聯動優化,才有可能使線上效果取得質的飛躍。

一個優秀的算法工程師,既可以玩轉模型,又對產品有獨到的見解和思考。比如信息流推薦場景的優化,當你作為一個真實的用戶去體驗推薦視頻流時,就會很容易發現一些產品或者系統層面的問題,然後再回歸到算法,用技術手段或與產品合作去解決這些問題。只有這樣,公司的產品才有可能越做越好,算法優化的天花板才會越來越高。

03

淘系技術部 | 算法技術初類
“對一名有技術追求的算法工程師而言,一定要保持一顆好學的心。“

本科4年,計算機專業,主要是入門計算機領域、接觸了C++和python等編程語言;碩士3年,計算機專業,主要是入門機器學習和深度學習算法(圖像識別方向);現為淘系技術部的一名算法工程師(應用算法),入職時間約為600+天,主要涉及的算法是銷量預估和人群選品。我們是一支離業務非常近的算法團隊,核心定位是“業務認知top1,沉澱差異化的技術壁壘”。也就是說,我們的算法策略在很大一定程度上決定了業務結果。

我從事推薦算法行業五年左右,當年僥倖入行。現就職於阿里巴巴首頁猜你喜歡推薦算法團隊,身邊有一群特別優秀的同事,他們每個人的業務和技術都十分出彩。自職業生涯伊始,我身邊不乏有一群優秀的夥伴。

從一名緊密貼近業務的算法工程師來回答該問題,觀點如下:

業務認知&問題定位

首先要清楚你所要解決的問題是什麼,是否需要複雜的算法求解。問題的定義來源於你對業務的認知和理解。我們經常陷入一種誤區,覺得自己是一名算法工程師,遇到任務問題都想要用複雜的算法去求解。正所謂一頓操作猛如虎,得來的效果卻很一般。因此,做事之前一定要在理解業務的基礎上,把問題定位清楚,用合適的方法求解。

數據挖掘&分析

深度學習的應用能夠突飛猛進的一個重要原因就是大數據的支撐。當前獲取數據的成本很低,而數據清理和挖掘的成本很高,但非常重要。數據是模型的輸入,是模型能夠擬合的上限。在入模之前,你需要花一定的精力用於數據工作,這是必要也是值得的。因此,掌握數據能力也是一名算法工程師的必經之路。

算法策略

這是每位算法工程師的硬實力,有了清晰的問題和可用的數據後,我們需要選擇合適的算法策略求解問題。就銷量預估而言,由於特徵大部分都是表格型,樹模型及其變體成為首選的方案。通過樹模型,你能夠快速拿到一個不錯的baseline。但千萬不要停滯不前,你需要調研更多的先進的方案進行優化,即使此時能夠拿到的收益不多,但請堅持專研的精神(近期時序模型中,熱度很高的informer值得嘗試)。此外,“人工智能,有多少人工就有多少智能”這句話在實際應用領域體現得淋漓盡致。策略也屬於算法的一部分,人工策略有時候能夠帶來很大的受益,也能夠找到更適合的算法優化方向。例如,我們在優化首猜的貨品池時,考慮到首猜目前的推薦算法已經非常優秀了,但消費者的成交來源主要是搜索,我們通過人工分析選擇了做增量貨品供給的方式,拿到了不錯的業務效果。基於此,我們也找到了更合適的選品算法優化方向。

離線實驗和線上AB實驗

實驗是驗證理論的最佳手段,也是最具有說服力的。我們需要找到幾個合適的指標進行優化,並且要保證離線效果跟線上效果沒有太大的gap。例如,銷量預估領域主要用到的指標有WMAPE,結合選品業務的指標有topk商品的召回率。離線實驗得到優化後,還需要到線上進行嚴格的AB Test。此時,我們就拿到了一個完整的實驗及其結論。通過不斷地迭代優化,沉澱各種優質的算法策略。

領域前沿論文

對一名有技術追求的算法工程師而言,一定要保持一顆好學的心。作為打工人,我們可能很難像在校期間投入大量的時間和精力去研究和復現前沿的論文。但一定要謹記,養成跟進前沿技術的習慣,每週至少花一定的時間去看論文,瞭解科研學者們在做些啥。高質量的論文,能夠帶來很充足的信息量。

其他

  • 好記性不如爛筆頭

及時梳理和總結很重要。組織架構可能會發生調整,導致你的方向發生改變。因此,我們要養成階段性的總結和沉澱。

  • 勤學好問

身邊有很多優秀的小夥伴,跟大家融洽地相處,更多的交流和討論,這或許會加快我們成長的速度。

  • 參與技術分享

聽別人講,講給別人聽。我們團隊有融洽的技術分享氛圍,互相分享近期專研的技術。你可以從別人身上學到很多寶貴的經驗和知識,也檢驗自己是否真正瞭解某項技術。

結語

如上,不止是算法崗位,我們也經常聽到“程序員崗位越來越卷”的聲音。任何人覺得自己“被內卷”了,有且只有一個原因,那就是能力跟不上慾望。

解決方法很簡單,要麼提升能力,要麼降低慾望。

希望你保持積極和好奇的心態,專注於提升自己的建模能力、數據分析能力、代碼工程能力以及產品視角,永遠做不會被“卷”到的那一波。一起加油~

Leave a Reply

Your email address will not be published. Required fields are marked *