獨孤九劍:算法模型訓練的一般流程

這篇文章主要分享一下模型訓練的一般流程,目的是讓大家明白做一個算法模型過程中會涉及的流程和數據特徵在算法模型中的重要性。

作爲一名算法工程師訓練模型可謂是家常便飯,不管是做推薦中的召回模型、排序模型還是其他領域的分類模型等,都應該有一個規範化的流程,這樣在做模型的過程中也會更加清晰,當然也不一定完全遵循這個流程,只是說基本過程應該是一致的。

1、總訣式——定義問題

What,How,Why。首先要弄清楚自己要幹什麼,然後調研相關的技術確定怎麼解決問題,最後反思自己爲什麼要用這個方案解決這個問題,有沒有更好的思路方法。

以電商推薦系統中的點擊率預估爲例。首先明確我們的目標是優化線上的商品點擊率,其次可以通過點擊率預估算法來離線訓練模型,線上進行預估,將點擊率較高的商品推薦給用戶,這樣做的原因是點擊率預估是目前業界比較成熟的解決方案,且能夠取得不錯的效果,如果在實踐中遇到問題,也便於解決問題。當然也會有一些其他的方案,比如通過深度學習來做CTR,但是使用深度學習成本較大,所以從成熟的基於機器學習的CTR來做,並逐漸過渡到深度學習。

2、破劍式——選定模型

在明確問題之後,要選定用什麼算法來解決,在相同的數據特徵的前提下,不同的算法帶來的效果是不一樣的,而且應用的成本也是不一樣的。因此選定適合自己業務的算法纔是最重要的,而不是選擇最高大上的。

同樣以電商推薦爲例,比如進行了綜合考慮,選定了CTR預估中常用的樹模型算法-XGBoost。

3、破刀式——構造數據

確定算法模型之後,則是結合業務特性明確模型所需要的訓練數據。脫離業務的特徵數據是沒有靈魂的,比如電商業務中的商品和信息流產品中的新聞背景是不一樣的,很多細節性的數據和特徵需要去考慮和構造,因此要構造適合自己業務的數據,才能最大化的發揮算法模型的作用。

比如CTR預估場景中我們要構造的訓練數據爲 <features, label>,那麼如何去確定label呢?不同的kpi指標對應的label是不一樣的,比如追求點擊率的我們的label可能是0,1;但如果追求的是GMV(商品成交額),制定的label可能是商品下單率。同樣制定features的過程中也要結合用戶在業務內的數據表現。

4、破鞭式——模型訓練

模型是基於基礎數據進行更好的維度的問題抽象和解決,CTR模型旨在構建features和label之間的隱含關係,通過參數調整,特徵優化以追求更好的效果表達。在構建好數據之後就是算法模型進行的舞臺了,目前大數據環境下最普遍的則是基於Spark分佈式平臺進行模型訓練和調優。

5、破索式——模型評估

訓練模型往往需要擬合的是一個目標函數,以追求最小的誤差,最大的效果。CTR場景下常見的模型評估指標有:準確率、精確率、F值、AUC、NDCG等。同樣是選擇適合自己業務和算法模型的評估指標,通過評估指標來調整模型的參數以達到離線最優的效果,但具體的最終效果還是需要進行模型上線,進行ABTest驗證模型的優劣。

在ABTest過程中,新上的模型往往由於其不確定性,會給予較小的流量進行效果的測試,如果效果優於base組模型,則會分配更多的流量,以追求線上整體效果的最優。

更多關於模型效果的評估可以關注後續章節內容。

6、破槍式——模型優化

模型優化的過程則是對模型和數據進行迭代升級的過程,但是這裏需要明確的是影響模型的線上效果的因素有很多,從基礎數據到構造的特徵,從算法選擇到實驗策略的影響,從給出的排序結果到前端的位置展示,都可能產生影響。在應用算法模型的整個過程中,發生的每個動作或者做的每個修改都會影響模型的效果表達,因此算法工程師一定要注意的是切勿只重視算法和特徵,在出現問題的時候往往要從多方面進行問題的定位和解釋。

爲了避免其他非數據算法方面的影響,要充分利用ABTest實驗,即保證其他因素的一致性,通過實驗效果的優劣驗證實驗改進點的有效性。

7、破箭式——模型部署

把模型搞定之後需要考慮的是怎麼部署模型,當然不同作用的模型、不同類型的模型部署方式也是不同的。

比如用戶離線計算的用戶偏好模型,則不需要進行線上部署,訓練好模型之後,保存一下,直接對數據集進行偏好預測,當然也可以不保存,直接進行預測。

對於線上使用的排序模型,機器學習和深度學習的主流部署方式也是不同的,比如排序的樹模型,通常情況下會保存成obj文件,然後寫入到固定的地方,線上使用時直接加載到內存進行線上實時的特徵拼接和計算即可,對於DL類模型,當然也可以保存成固定格式的文件供線上使用,但更通用的做法是藉助於框架本身封裝的服務,比如基於Tensorflow的DL模型,可以藉助tf-serving進行部署,線上使用時,直接調相應的API接口,傳入需要的參數進行計算排序。

8、破掌式——效果跟蹤

模型部署上線之後並不是終點,一個更重要的步驟則是對上線之後的效果進行追蹤。

通常情況下,新上模型一般會進行白名單測試(一般是內部人員),測試是否能正常返回數據,返回的數據是否正常、是否可信服,確定沒問題之後會進行小流量的測試(一般在5%左右),觀察一天的效果,如果效果正向,則會擴大流量(一般擴到50%左右),經過一段時間的效果觀察(主要是和base組模型進行效果對比)如果效果正向,則會考慮全擴或者擴充接近100%。

不要小看擴流流程,如果新上模型直接擴充到全量或者大部分流程,是會引起很嚴重的問題的,比如效果不好,性能不好等,所以要謹慎對待。

9、破氣式——數據保存

數據保存是指將線上使用的特徵數據通過一定的方式進行保存,目的是方便後續模型的訓練和優化,形成一個完整的數據閉環。

保存數據時需要注意的是每條數據的唯一性,即保證最後關聯特徵數據和label的時候保證是對應的,否則會引起樣本誤差,引起模型的訓練效果。


【技術服務】,詳情點擊查看: https://mp.weixin.qq.com/s/PtX9ukKRBmazAWARprGIAg

掃一掃 關注微信公衆號!號主 專注於搜索和推薦系統,嘗試使用算法去更好的服務於用戶,包括但不侷限於機器學習,深度學習,強化學習,自然語言理解,知識圖譜,還不定時分享技術,資料,思考等文章!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章