推薦算法工程師需要掌握哪些核心技能點?


有幸在去年4月份,被分配到鵝廠推薦組,接觸了國內頂尖的算法團隊,截止現在自己做推薦也有半年時間了,如果說以前自己的成長速度是線性成長,那么在這半年時間,自己的成長可以說是指數級成長。

 

鑒於目前工作上越來越駕輕就熟,逐漸從小白狀態脫離出來,回答一下這個問題,算是給自己這半年算法工作的一個記錄。

先給大家奉上,一名合格的推薦算法工程師所需要掌握的各項知識點和技能圖:

圖片

如題主所說,推薦系統涉及到的知識點“大而雜”,是一項復雜的工程,那么一條完整的推薦系統學習進階路徑,需要包含哪些方面呢,我認為至少需要包含以下6大方面:

1、數學基礎:微積分、線性代數和概率論

2、機器學習:需要掌握一些基礎的術語和概念,以及常見的模型。

3、深度學習:TensorFlow和PyTorch這兩大框架至少掌握一個,然后深度學習基礎知識,比如訓練算法、激活函數、正則化等內容也是必須掌握的。

4、數據挖掘與分析:熟練掌握相關工具包,包括numpy、pandas、matplotlib、Scikit-Learn等等。

5、大數據:掌握Hadoop、Spark兩大生態,不過這部分不用學的太深,建議大數據這塊可以先掌握到會用的層次,當做工具即可。

6、推薦系統理論和實戰:主要包括推薦系統五大環節——召回、粗排、精排、重排和冷啟動,其中每一個環節都涉及大量的知識點,此外除了掌握理論外,還需要進行必要的項目實戰。

 

其中,機器學習、深度學習、推薦算法理論和實戰這三塊是核心知識,也是面試中的重中之重。而像數學、數據挖掘和分析、大數據這些算是基礎知識,面試中考察相對比較少,后續等你參加工作后,再反過頭來學習也是完全可以的。

以上6大模塊,每一個模塊都涉及大量的知識點需要學習,我本人推薦大家通過看一些經典的書籍來啃透推薦系統,因為,看書是效率最高的學習方式。

 

至於每個模塊所涉及到的一些經典必讀書籍,我已經幫大家總結好了,點擊下方鏈接,就能領取。

 

我這里分享的書單,包含數學、機器學習,深度學習、數據分析、大數據和推薦算法等硬核內容,對我當年自學推薦系統有很大幫助,這些資料都是經過我本人驗證過的,個人認為非常適合新手學習的學習資料,在這里免費分享給大家。

(后續我還會持續不斷更新推薦系統的優質干貨資料,大家方便的話可以點個贊鼓勵下~

PS:網上關於推薦系統的資料特別多,包括很多已經出版的書籍,質量也參差不齊,大家學習時候一定要注意辨別,以免浪費寶貴學習時間和精力投入。

接下來詳細講一下每個模塊所涉及到的內容。

 

一、數學

主要是微積分、線性代數、概率論這三門課。

1、微積分

通常情況下,機器學習需要得到一個函數(模型,或者說假設)來預測未來的數據。既然是函數,那自然就離不開微積分了。微積分為我們研究函數的性質提供了理論依據,同時它也是學習概率論、最優化方法等后續課程的基礎,是整個高等數學的基石。

重點掌握函數的求導法則(特別是鏈式法則),以及泰勒公式。這對后續的梯度下降法,牛頓法,擬牛頓法等優化算法的推導至關重要!

 

2、線性代數

機器學習算法的輸入、輸出、中間結果通常為向量、矩陣、張量。這些都屬於線性代數里的知識。

重點掌握向量、矩陣含義及其數學運算公式。

 

3、概率論

對於機器學習來說,概率論是一種重要的工具。如果將機器學習算法的輸入、輸出看作隨機變量/向量,則可以用概率論的觀點對問題進行建模。使用概率論的一個好處是可以對不確定性進行建模,這對於某些問題是非常有必要的。另外,它還可以挖掘變量之間的概率依賴關系,實現因果推理。

重點掌握常見概率分布、概率公式。

 

總結

數學好是入門機器學習的優勢,但並非關鍵。因為數學知識量太龐大了,花太多時間在其上,容易打擊學習積極性。另外做算法一般分兩種:理論模型和實際應用,前者的行業title是算法研究員,主要發paper、提出新的模型或者優化方法,所以對於數學能力要求很高。后者的行業title是算法工程師,致力於把模型應用於數據上,攫取商業價值,對於數學能力要求並不高。往往大部分人都屬於后者,我個人也是后者。熟悉不同算法的應用場景、掌握模型落地工程技術,才是我們更應該投入精力的地方。

推薦資料:

  1. 《DeepLearning》,又名「花書」,被譽為深度學習領域聖經。它前面有必備數學知識的介紹,講得挺不錯的。

  2. B站搜索微積分、線性代數、概率論關鍵詞,會有很多教學視頻,隨便選取時長較短的看看即可。

 

二、機器學習

人工智能、機器學習、深度學習關系如下:

圖片

我們一般說機器學習都是指除了深度學習以外的機器學習,也稱為傳統機器學習。雖然近幾年深度學習越來越火,但是很多領域還是在使用機器學習,並且學好機器學習,對於AI算法基礎和知識廣度都有很大提高。這里可以先給大家羅列一些必備的基礎知識:

 

首先要知道一些基礎的術語和概念,比如有監督與無監督,訓練集,驗證集與測試集,經驗誤差與泛化誤差,方差與偏差,過擬合與欠擬合等,再比如比較重要的一些模型性能度量方法(混淆矩陣,精確率,召回率,auc,roc等), 再比如經典的評估方法(留出,交叉驗證,自助等)

 

其次是經典的模型。機器學習模型非常多,全部掌握不現實,我給大家羅列幾個經典,也是面試中常考的模型:邏輯回歸、SVM、樹模型、集成學習、朴素貝葉斯、K-Means聚類、PCA。(EM、最大熵、概率圖這些考的少,能了解是加分項)。

 

在學習過程中,各個模型是相互聯系的,不要孤立去分析單個模型。比如:邏輯回歸,我認為是最基礎、也最重要的模型:

圖片

  1. 邏輯回歸=線性回歸+sigmoid激活函數,從而將回歸問題轉換為分類問題

  2. 邏輯回歸+矩陣分解,構成了推薦算法中常用的FM模型

  3. 邏輯回歸+softmax,從而將二分類問題轉化為多分類問題

  4. 邏輯回歸還可以看做單層神經網絡,相當於最簡單的深度學習模型

通過邏輯回歸由點及面,就能演化出如此多模型。

 

再比如樹模型。我們把以決策樹為基礎的一系列模型統稱為樹模型,也是AI比賽中最常用的模型。

  1. 決策樹經歷了三次改進,ID3、C4.5、CART,主要區別在於一個根據信息增益划分特征、一個根據信息增益率、一個根據基尼指數。

  2. 隨機森林=決策樹+Bagging集成學習

  3. GBDT=決策樹+AdaBoost集成學習

  4. XGB是陳天奇2014年提出,相當於GBDT的工程改進版,在實用性和准確度上有很大提升。比如:使用泰勒二階展開近似損失函數,支持處理缺失值、在特性粒度上並行計算等等特性。

  5. LGB是微軟2016年提出,對XGB進行了改進,使用單邊梯度采樣算法減少不必要的樣本;在尋找最優分割點時采用直方圖算法使計算代價更小;支持類別特征...

  6. CGB是Yandex2017年提出,對類別特征進行了更完美的支持。

所以學習模型,要由點及面,層層遞進。這樣不僅方便理解,也有利於歸納總結,同時還能鍛煉搭建知識體系的能力。

 

推薦資料

  1. 如果是一個機器學習小白,那么推薦兩個入門視頻, 吳恩達或者李宏毅的ML視頻(B站上都有),先快速過一遍,了解機器學習是什么。

  2. 如果有了一定的機器學習基礎,就需要去進階。建議是看書與高質量文章。推薦兩本書:周志華的《機器學習》、李航的《統計學習方法》這兩本書,可以好好先研究一本,注意這里是研究,一本通了,另一本也就差不多。如果發現看一遍很難看懂,這是正常現象,隨着后面實踐經歷慢慢變多,再看一遍,會有很多新的感悟。

注意:學習過程中一定要跟着實戰,否則知識很難真正理解。

 

三、深度學習

前面也提到了,深度學習本屬於機器學習,但是鑒於其發展迅速、應用越來越廣泛,所以單獨拿出來說。深度學習每年新模型、新技術層出不窮,一味追求新技術不可取,要先打好基礎。比如:對於一個簡單的全連接神經網絡,包含訓練算法(正向傳播、反向傳播),激活函數(sigmoid、ReLU、Maxout、softmax等),正則化(L1和L2、Dropout、提前早停等),優化算法(隨機梯度下降、Momentum、Adagrad、Adam等)

掌握了基礎后,再根據自身領域學習相關的模型。大部分人找工作屬於這三個領域:

  1. 計算機視覺(CV):卷積神經網絡(CNN)及其改進。

  2. 自然語言處理(NLP):循環神經網絡(RNN)及其改進,Transformer、Bert等。

  3. 推薦算法:Embeding、Wide & Deep及其改進。

 

推薦資料:

  1. 李沐《動手學深度學習》https://zh-v2.d2l.ai/

  2. 邱錫鵬《神經網絡與深度學習》https://nndl.github.io/

  3. 吳恩達《深度學習》https://www.bilibili.com/video/BV1FT4y1E74V

  4. 《DeepLearning》,又名「花書」,被譽為深度學習領域聖經。

  5. TensorFlow、pytorch官網是最好的參考資料。如果英語不好,那么可以看看下面的資料:

    1. Pytorch學習筆記:https://blog.csdn.net/wuzhongqiang/category_10024538.html

    2. 《30天吃掉那只TensorFlow2》:https://github.com/lyhue1991/eat_tensorflow2_in_30_days

    3. 《20天吃掉那只Pytorch》:https://github.com/lyhue1991/eat_pytorch_in_20_days

    4. PyTorch深度學習快速入門教程:https://www.bilibili.com/video/BV1hE411t7RN

 

四、數據挖掘與分析

熟練使用相關工具包:numpy、pandas、matplotlib(seabron是matplotlib的簡化版)、Scikit-Learn。完成數據的可視化、分析以及特征工程。工具包的學習建議邊用邊學,可以先看一些中文教程整體了解一下工具包的使用。在具體使用的時候,如果忘記了可以去對應工具包的官網查看詳細的文檔。

除了熟悉數據分析工具以外,其實更需要的是數據分析的方法,我覺得最好的學習方式就是看開源競賽的方案,因為在開源方案中,作者會寫很多他們分析問題的思路,以及對可視化結果給出的他們認為的正確觀點。

推薦資料:(加我:xtyifan1019,領取以下參考資料)

英文教程首推官網,中文教程推薦Datawhale的開源項目

  1. numpy中文教程:https://github.com/datawhalechina/powerful-numpy

  2. pandas中文教程(這份文檔可能比官方文檔還適合學習):https://github.com/datawhalechina/joyful-pandas

  3. matplotlib中文教程:https://github.com/datawhalechina/fantastic-matplotlib

  4. 《Hands-on-Machine-Learning-with-Scikit-Learn》用sklearn工具實現各種機器學習模型

 

五、大數據

在實際工業場景中,我們面臨的都是海量數據,也就是所謂的大數據。再用上面提到的MySQL數據庫、numpy、pandas等工具是不行的。這個時候就需要專業的大數據處理工具:Hadoop、Spark生態。有的同學想從這些生態的基本原理學起, 如果有時間,知其所以然是好的,但往往我們需要兼顧算法和大數據,時間並不是很充足,所以建議大數據這塊可以先掌握到會用的層次,當做工具即可。

常用的:首先是Hive查詢,也就是用HQL進行一些表數據的基礎查詢,這個和SQL有些類似,另外一個,就是sparkSQL以及spark的DataFrame, 這些相關操作常用來做數據分析和處理,處理完畢之后,寫回到Hive表里面。其次,遇到復雜的處理邏輯,就需要寫原生spark腳本去跑數據了。

推薦資料:

這一塊實操性特別強,所以建議先看視頻,跟着視頻一步步來:

  1. 尚硅谷大數據Hadoop 3.x:https://www.bilibili.com/video/BV1Qp4y1n7EN

  2. 尚硅谷大數據Spark教程從入門到精通:https://www.bilibili.com/video/BV11A411L7CK

  3. 推薦系統算法基礎+綜合項目實戰:https://www.bilibili.com/video/BV1qK4y1479r

 

六、推薦算法理論和實戰

終於到了核心部分。再次強調一下,上面的知識不要求全掌握,既不需要,也不現實。如果為了快速入門,掌握機器學習、深度學習基礎后就可以直接進入這一節了。

在實際的工業推薦系統中,一般會有四個環節:

圖片

我梳理了這四個環節中用到的主流技術,整理成了如下導圖:

圖片

上圖就是整個推薦算法的核心內容。這里先放出這個導圖,一是讓大家對推薦算法有個整體框架,二是告訴大家后續文章的內容:打算通過解讀論文的形式,結合自身在工作中接觸的工業場景,把里面的模型和知識點一一為大家解讀。

這個系列我取名:"熱追"推薦算法。主要包括以下四個部分:

 

1、召回

召回的目的是根據用戶部分特征,從海量物品庫快速找到小部分用戶感興趣的物品交給精排,重點是強調快。主要有兩大類召回方式,一類是策略規則,一類是監督模型+embedding。

其中策略規則,往往和業務場景是強相關,不同的場景會有不同的召回方式,這部分知識"特異性"比較強,一篇文章講不清楚。

這里可以簡單講講比較普適的方法,也就是監督模型+embedding。該領域比較主流的方法, 比如FM系列(FM,FFM等), 用戶行為序列,基於圖和知識圖譜系列,經典雙塔系列等。這些方法看似很多很復雜,其實本質上還是給用戶和物品打embedding而已,只不過考慮的角度方式不同。

這一塊的內容,幾乎每個模型都對應着經典paper,大家如果要學習推薦系統,這些經典paper是必須要去閱讀學習的,並且在閱讀過程中,對於一些重要模型,要會進行代碼復現,並應用到一些真實的實踐任務中。

 

2、粗排

有時候召回環節返回的物品數量太多,精排速度跟不上,所以需要在召回和精排之間加一個粗排環節,通過少量用戶和物品特征,簡單模型,來對召回的結果進行個粗略的排序,在保證一定精准的前提下,進一步減少往后傳送的物品數量,這就是粗排的作用。

粗排用到的很多技術與召回重合,粗排不是必需的環節。如果你的候選數量非常少,那連召回都不需要了;如果你的精排能吃的下召回的輸出,那可以考慮實驗對比是不是需要粗排。但是假如不加粗排,總感覺欠缺點什么。有時候甚至會出現粗排輸出候選變少,整個系統反而漲點的情況。像這樣的情況出現,就說明整個鏈路設計存在不合理的地方。

 

3、精排

精排階段使用你能想到的任何特征,可以上你能承受速度極限的復雜模型,盡可能精准地對物品進行個性化排序,強調准確性。這一塊關鍵技術主要分為三大塊:

  1. CTR預估:LR、FM家族、自動特征交叉的DNN家族。

  2. 多任務學習(Multi-Task Learning,也稱為多目標學習)。多任務是很常見的,比如視頻推薦中,用戶喜歡、收藏、評論。而不同的任務可能會互相沖突,互相影響,造成模型學習起來十分困難。所以這一塊是重難點,也是很多大公司的研究重點,更是未來的一大發展趨勢。但好在這里每個模型或者技術有對應paper,所以和召回一樣,這里依然可以利用解讀paper的方式,把這些模型和技術娓娓道來。

  3. 排序打分公式融合。

 

4、重排

考慮到上面的三塊是核心,這塊沒有詳細的展開整理,並且這塊和業務場景策略強相關,很依賴工作經驗,目前了解的也不是很多。后續先解讀幾篇重排模型的經典論文,等學習了相關技術,再來不斷完善這塊。

 

5、冷啟動

冷啟動問題是指對於新用戶和新商品,他們沒有歷史交互數據,無法分析歷史喜好,這個時候我們應該如何做推薦。冷啟動技術會穿插到召回或者重排中,有時也會和上面推薦系統做成並行的兩路,專門應對冷啟動場景。

推薦資料:

  1. 首先當然是后續自己寫的文章啦哈哈哈。主要是因為搞算法的人學習模型都是參考論文,這也是為什么我后面分享這一塊內容都是以解讀論文的形式。

  2. 一定要推薦一本書籍的話,我選王喆的《深度學習推薦系統》。這本書高屋建瓴的介紹了推薦系統整體架構,發展歷史以及未來趨勢,還有各種推薦模型的演化之路,很適合前期用來當做科普。但是具體的模型並沒有深入講解,還是得自己去看論文解讀。

  3. 再就是一些我認為很優秀的開源項目:

    1. 好友整理的 https://github.com/zhongqiangwu960812/AI-RecommenderSystem

    2. 另一個好友潛心整理,star已過千 https://github.com/ZiyaoGeng/Recommender-System-with-TF2.0

 

6、推薦系統實戰項目

理論一定要與實踐結合,否則就是空中樓閣。在這里給大家推薦datawhale打造的一個新聞推薦項目:https://github.com/datawhalechina/fun-rec

項目規划圖如下:

圖片

階段一

物料池的構建:

  1. Mysql基礎及python調用(簡介、安裝、簡單的命令行基礎、python如何調用mysql數據(增刪改查,排序))

  2. MongoDB基礎及python調用

  3. Redis基礎及python調用

  4. Scrapy基礎及新聞爬取

  5. 新聞畫像構建(存入MongoDB)

前端展示:

  1. Vue簡介及基本使用(對於我們做推薦算法的,了解一些前后端交互之類的就夠了)

  2. 前后端如何交互

  3. 用戶注冊界面

  4. 新聞展示(內容、時間、點贊次數,收藏次數)

  5. 可以保留用戶的行為(user_id, news_id, action(點贊、收藏、閱讀),time)

 

階段二

有了前端及物料池后,就需要設計簡單的冷啟動規則來收集用戶的行為數據以及用戶的基本屬性特征。這一部分數據可能需要參加開源學習的同學來一起幫忙完善這個數據集,這樣數據才是有意義的。

  1. 收集數據

    1. 在服務器上部署數據收集的系統(新聞數據+用戶行為數據)

    2. 冷啟動策略

  2. 冷啟動

    1. 用戶側

    2. 物品側

    3. 系統側

 

階段三

這個階段就是推薦算法大展身手的地方啦。我們可以把上一節學到的推薦算法,在這里盡情嘗試,吹拉彈唱任你挑選。

  1. 離線評估指標

  2. 多路召回

    1. 特征工程

    2. 規則類

    3. 模型類

  3. 召回評估

  4. 排序

    1. DeepFM

    2. 排序評估

  5. 規則+重排

 

階段四

最后就是一些運營類知識,保證系統的高可用性

  1. 推薦服務,前后端交互(flask)

  2. 任務調度

  3. 系統部署

  4. 規范類修改

 

以上便是全文了。不知不覺碼字這么多,整理不易呀,雖然嘴上說不在乎點贊到底有多少,但其實內心還是希望點贊高一點的,因為好看啊!人總不能拒絕內心真實的想法吧。所以臉皮厚一點跟大家說:求大家來個贊,鼓勵一下,也擴散給更多的對推薦算法感興趣的同學,幫助到更多的人!!~

最后歡迎大家關注我的微信公眾號:對白的算法屋duibainotes),跟蹤NLP、推薦系統和對比學習等機器學習領域前沿,日常還會分享我的創業心得和人生感悟。想進一步交流的同學也可以通過公眾號加我的微信,和我一同探討技術問題,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM