螞蟻金服核心技術:百億特徵實時推薦演算法揭祕

阿里技術_發表於2018-12-28

640?wx_fmt=png

阿里妹導讀:本文來自螞蟻金服人工智慧部認知計算組的基礎演算法團隊,文章提出一整套創新演算法與架構,通過對TensorFlow底層的彈性改造,解決了線上學習的彈性特徵伸縮和穩定性問題,並以GroupLasso和特徵線上頻次過濾等自研演算法優化了模型稀疏性,在支付寶核心推薦業務獲得了uvctr的顯著提升,並較大地提升了鏈路效率。


0.綜述


線上學習(Online learning)由於能捕捉使用者的動態行為,實現模型快速自適應,進而成為提升推薦系統效能的重要工具。然而它對鏈路和模型的穩定性,訓練系統的效能都提出了很高的要求。但在基於原生TensorFlow,設計Online推薦演算法時,我們發現三個核心問題:


  • 一些資訊推薦場景,需要大量長尾詞彙作為特徵,需使用featuremap對低頻特徵頻次截斷並連續性編碼,但耗時且方法aggressive。

  • 使用流式資料後,無法預知特徵規模,而是隨訓練逐漸增長。因此需預留特徵空間訓練幾天後重啟,否則會越界。

  • 模型稀疏性不佳,體積達到數十GB,導致上傳和線上載入耗時長且不穩定。


更重要的是,線上學習如火如荼,當流式特徵和資料都被打通後,能按需增刪特徵,實現引數彈性伸縮的新一代訓練平臺成為大勢所趨。為了解決這些問題,從2017年底至今,螞蟻金服人工智慧部的同學,充分考慮螞蟻的業務場景和鏈路,對TensorFlow進行了彈性改造, 解決了以上三大痛點,簡化並加速離線和線上學習任務。其核心能力如下:


  • 彈性特徵伸縮體系,支援百億引數訓練。

  • group_lasso優化器和頻次過濾,提高模型稀疏性,明顯提升線上效果。

  • 模型體積壓縮90%,完善的特徵管理和模型穩定性監控。


在與業務線團隊的共同努力下,目前已在支付寶首頁的多個推薦場景全流量上線。其中某推薦位的個性化online learning桶最近一週相比線上多模型融合最優桶提升4.23% , 相比隨機對照提升達34.67% 。 某個性化資訊推薦業務最近一週,相比DNN基準uv-ctr提升+0.77%,pv-ctr提升+4.78%,模型體積壓縮90%,鏈路效率提升50%。


1. 彈性改造及優勢


背景:在原生TensorFlow中,我們通過Variable來宣告變數,若變數超過了單機承載的能力,可使用partitioned_variables來將引數分配到不同機器上。 但必須指定shape,宣告後即不可改變,通過陣列索引查詢。


由於推薦系統中大量使用稀疏特徵,實踐中一般採取embedding_lookup_sparse一類的方法在一個巨大的Dense Variable中查詢向量並求和,來代替矩陣乘法。開源Tensorflow限定了Variable使用前必須宣告維度大小,這帶來了兩個問題:


1)需要預先計算特徵到維度範圍內的int值的對映表,這一步操作通常在ODPS上完成。因為需要掃描所有出現的特徵並編號,計算非常緩慢;


2)在online learning場景下,為了容納新出現的特徵,需要預留一部分維度空間,並線上上不斷修改對映表,超過預留空間則需要重新啟動線上任務。


為了突破固定維度限制,實現特徵的動態增加和刪除,最樸素的優化想法是在TensorFlow底層實現模擬字典行為的Variable,並在此基礎上重新實現Tensorflow上層API。由此我們進行了優化,在server新增了基於HashMap的HashVariable,其記憶體結構如下:


640?wx_fmt=png


在宣告該變數時,只需增加一句,其他訓練程式碼皆不需改動:


640?wx_fmt=png


每個特徵都通過hash函式對映到一個2的64次方大小的空間內。當需要計算該特徵時,PS會按需惰性建立並返回之。但其上層行為與原生TF一致。由於去掉了featuremap轉ID的過程,我們內部形象地將其稱為“去ID化”。在此之上我們實現了Group Lasso FTRL,頻次過濾和模型壓縮等一系列演算法。


備註:彈性特徵帶來一個顯著的優勢:只要用足夠強的L1稀疏性約束,在單機上就能除錯任意大規模的特徵訓練,帶來很多方便。我們的hashmap實現是KV化的,key是特徵,value是vector的首地址。


離線訓練優化


經過這樣的改造後,在離線批量學習上,帶來了以下變化:


640?wx_fmt=png


線上訓練優化


online learning上,能帶來如下變化:


640?wx_fmt=png 

除了效能有明顯的提升之外,其最大的優勢是不需提前申請空間,訓練可以無縫穩定執行。


2. 特徵動態增刪技術


彈性架構,主要目的就是特徵優選,讓模型自適應地選擇最優特徵,進而實現稀疏化,降低過擬合。本節介紹特徵優選的兩個核心技術:


  • 使用流式頻次過濾, 對特徵進入進行判定。

  • 使用Group Lasso優化器,對特徵進行篩選和刪除。


2.1 Group  Lasso 優化器


稀疏化是演算法追求的重要模型特性,從簡單的L1正則化和Truncated Gradient[9], 再到討論累積梯度平均值的RDA(Regularized Dual Averaging)[10], 再到目前常見的 FTRL[2] 。 然而它們都是針對廣義線性模型優化問題提出的稀疏性優化演算法,沒有針對sparse DNN中的特徵embedding層做特殊處理。把embedding引數向量當做普通引數進行稀疏化,並不能達到線上性模型中能達到的特徵選擇效果,進而無法有效地進行模型壓縮。


例如:當包含新特徵的樣本進入時,一個特徵對應的一組引數(如embedding size為7,則引數數量為7)被啟用,FTRL判定特徵中的部分引數無效時,也不能安全地將該特徵刪除。如圖:


640?wx_fmt=png


因此,在L1和L2正則的基礎上,人們引入L21正則(group lasso)和L2正則(exclusive sparsity),分別表示如下:


640?wx_fmt=png


L21早在2011年已經引入,它最初目的是解決一組高度關聯特徵(如男\女)應同時被保留或刪除的問題,我們創新地擴充套件到embedding的表示上,以解決類似的問題。


在L21中,由於內層L2正則將一個特徵的所有引數施加相同的約束,能將整組引數清除或保留,由此決定embedding層中的某些特徵對應的embedding向量是否完全刪除,提升模型泛化性。因此稱為group lasso。


而L12則正好相反,它迫使每組引數中的非0引數數量一致但值又儘可能不同,但使輸出神經元互相競爭輸入神經元,進而使特徵對目標更具區分性。


對於DNN分類網路,底層表示要求有足夠的泛化性和特徵抽象能力,上層接近softmax層,需要更好的區分性。因此我們通常在最底層的embedding層使用group lasso。即如下的優化目標:

640?wx_fmt=png

直接將L21正則項懲罰加入loss,模型最終也能收斂,但並不能保證稀疏性。因此Group lasso優化器參考了FTRL,將梯度迭代分成兩個半步,前半步按梯度下降,後半步微調實現稀疏性。通過調節L1正則項(即公式中的λ),能有效地控制模型稀疏性。


Group lasso是彈性計算改造後,模型效能提升和壓縮的關鍵。值得指出:


  1. 在我們實現的優化器中,Variable,以及accum和linear兩個slot也是KV儲存。

  2. L12和L21正則相結合的方法也已經有論文討論[8],但我們還未在業務上嘗試出效果。

  3. 由於篇幅限制,本節不打算詳細介紹Group lasso的原理和推導


2.2 流式頻次過濾


討論完特徵動態刪除的方法後,我們再分析特徵的准入策略。


2.2.1 頻次過濾的必要性


在Google討論FTRL的文章1中提到, 在高維資料中大部分特徵都是非常稀疏的,在億級別的樣本中只出現幾次。那麼一個有趣的問題是,FTRL或Group FTRL優化器能否能刪除(lasso)極低頻特徵?


在RDA的優化公式中,滿足以下條件的特徵會被置0:


640?wx_fmt=png


若在t步之前,該特徵只出現過幾次,未出現的step的梯度為0,隨著步數增大,滿足上述條件變得越來越容易。由此RDA是可以直觀處理極稀疏特徵的。 但對於FTRL,要滿足:


640?wx_fmt=png


其中,640?wx_fmt=png 不僅和歷史梯度有關,還與歷史學習率和權重w有關。 因此FTRL雖然也能處理極稀疏特徵,但並沒有RDA那麼aggressive(此處還待詳細地分析其下界,Group FTRL與此類似)。


由於FTRL在設計和推導時並未明確考慮極低頻特徵,雖然通過增大λ,確實能去除大量極低頻特徵,但由於約束太強,導致部分有效特徵也被lasso,在離線實驗中被證明嚴重影響效能。其次,對這些巨量極低頻特徵,儲存歷史資訊的工程代價是很高昂的(增加幾倍的引數空間和儲存需求),如下圖:


640?wx_fmt=png


因此我們提出,能否在實時資料流上模擬離線頻次過濾,為特徵提供准入門檻,在不降低模型效能的基礎上,儘量去除極低頻特徵,進一步實現稀疏化?


2.2.2 頻次過濾的幾種實現


注意: 由於預設的embedding_lookup_sparse對特徵執行了unique操作(特徵歸一化以簡化計算),因此在PS端是不可能獲取真實特徵和label頻次的。需要Python端對placeholder統計後,上傳給server端指定的Variable,優化器通過slot獲得該Variable後作出聯合決策。


最naive的思路是模擬離線頻次過濾,對特徵進行計數,只有達到一定閾值後再進入訓練,但這樣破壞了資料完整性:如總頻次6,而閾值過濾為5,則該特徵出現的前5次都被忽略了。為此我們提出了兩種優化方案:


  • 基於泊松分佈的特徵頻次估計


在離線shuffle後的特徵滿足均勻分佈,但對線上資料流,特徵進入訓練系統可看做泊松過程,符合泊松分佈:


640?wx_fmt=png


其中n為當前出現的次數,t為當前的步數,λ為單位時間發生率,是泊松分佈的主要引數,T為訓練總步數。640?wx_fmt=png為特徵最低門限(即最少在T時間內出現的次數)。

因此我們能通過前t步的特徵出現的次數n,將t時刻當做單位時間,則640?wx_fmt=png。 根據泊松分佈,我們可以算出剩餘640?wx_fmt=png時間內事件發生大於等於640?wx_fmt=png次的概率640?wx_fmt=png。 每次該特徵出現時,都可按該概率640?wx_fmt=png做伯努利取樣,特徵在t步進入系統的概率用下式計算:


640?wx_fmt=png


通過真實線上資料模擬,它能接近離線頻次過濾的效果,其λ是隨每次特徵進入時動態計算的。它的缺陷是:


  1. 當t越小時,事件發生在t內的次數的variance越大,所以會以一定概率誤加或丟棄特徵。

  2. 未來總的訓練步數T在線上學習中是未知的。

  3. 頻次過濾與優化器相分離,導致不能獲得優化器的統計資訊。


  • 動態調L1正則方案


在經典的FTRL實現中,L1正則對每個特徵都是一致的。這導致了2.2.1 中提到的問題:過大的L1雖然過濾了極低頻特徵,但也影響的了模型的效能。參考各類優化器(如Adam)對learning_rate的改進,我們提出:通過640?wx_fmt=png特徵頻次影響L1正則係數,使得不同頻次的特徵有不同的lasso效果。


特徵頻次和基於MLE的引數估計的置信度相關,出現次數越低置信度越低。如果在純頻率統計基礎上加入一個先驗分佈(正則項),當頻率統計置信度越低的時候,越傾向於先驗分佈,相應的正則係數要更大。我們經過多個實驗,給出了以下的經驗公式:


640?wx_fmt=png


其中c是懲罰倍數,640?wx_fmt=png為特徵最低門限,這兩者皆為超參,640?wx_fmt=png是當前特徵出現的頻次。


我們線上上環境,使用了動態調節L1正則的方案 。在uvctr不降甚至有些微提升的基礎上,模型特徵數比不使用頻次過濾減少75%,進而從實驗證明了頻次過濾對稀疏化的正向性。它的缺點也很明顯:特徵頻次和正則係數之間的對映關係缺少嚴謹證明。


頻次過濾作為特徵管理的一部分,目前還少有相關論文研究,亟待我們繼續探索。


3. 模型壓縮和穩定性


3.1 模型壓縮


在工程上,由於做了優化,如特徵被優化器lasso後,只將其置0,並不會真正刪除;在足夠多步數後才刪除。同時引入記憶體池,避免特徵的反覆建立和刪除帶來的不必要的效能損失。 這就導致在訓練結束後,模型依然存在大量0向量。匯出時要進一步做模型壓縮。


由於引入了HashPull和HashPush等非TF原生運算元,需要將其裁剪後轉換為原生TF的op。 我們將這些步驟統稱圖裁剪(GraphCut), 它使得線上inference引擎,不需要做任何改動即可相容彈性改造。由於有效特徵大大減少,打分速度相比原引擎提升50%以上。


我們將圖裁剪看做TF-graph的靜態優化問題,分為3個步驟:


  • 第一遍遍歷Graph,搜尋可優化子結構和不相容的op。

  • 第二遍遍歷,記錄節點上下游和後設資料,裁剪關鍵op,並將Variable的非0值轉存至Tensorflow原生的MutableDenseHashTable。本步驟將模型體積壓縮90%。

  • 拼接新建節點,重建依賴關係,最後遞迴回溯上游節點,去除與inference無關的子圖結構


我們實現了完整簡潔的圖裁剪工具,在模型熱匯出時呼叫, 將模型從原先的8GB左右壓縮到幾百兆大小,同時保證模型打分一致。


3.2 模型穩定性和監控


online learning的穩定性非常重要。我們將線上真實效果,與實時模型生成的效果,進行了嚴密的監控,一旦樣本偏差過多,就會觸發報警。


由於需捕捉時變的資料變化,因而不能用固定的離線資料集評估模型結果。我們使用阿里流式日誌系統sls最新流入的資料作為評估樣本,以滑動視窗先打分後再訓練,既維持了不間斷的訓練,不浪費資料,同時儘可能高頻地得到最新模型效果。


我們對如下核心指標做了監控:


  • 樣本監控: 正負比例,線上打分值和online-auc(即線上模型打分得到的auc),產出速率,消費速率。

  • 訓練級監控: AUC, User-AUC(參考備註),loss, 模型打分均值(與樣本的正負比例對齊),異常資訊。

  • 特徵級管理: 總特徵規模,有效/0/刪除特徵規模,新增/插入/刪除的速率。

  • 整體模型和排程:模型匯出的時間,大小,打分分佈是否正常,是否正常排程。

  • 業務指標:uvctr,pvctr(小時級更新,T+1報表)。


線上與訓練指標之間的對應關係如下表:


640?wx_fmt=png


通過http介面,每隔一段時間傳送監控資料,出現異常會及時產生釘釘和郵件報警。下圖是對9月20日到27號的監控,從第二張圖表來看,模型能較好的適應當前資料流的打分分佈。


640?wx_fmt=png


User-AUC:傳統的AUC並不能完全描述uvctr,因為模型很可能學到了不同使用者間的偏序關係,而非單個使用者在不同offer下的點選偏序關係。為此,我們使用了User-AUC,它儘可能地模擬了線上uvctr的計算過程,在真實實驗中,監控系統的uvctr小時報表,與實時模型輸出的User-AUC高度一致。


4. 工程實現和效果


目前演算法已經在支付寶首頁的多個推薦位上線。推薦系統根據使用者的歷史點選,融合使用者畫像和興趣,結合實時特徵,預估使用者CTR,進而提升系統整體點選率。


我們以推薦位業務為例說明,其採用了經典的wide&deep的網路結構,其sparse部分包含百級別的group(見下段備註1)。 一天流入約百億樣本,label的join視窗為固定時長。由於負樣本佔大多數,上游鏈路對正負樣本做了1:8的降取樣(見下文備註2)


訓練任務採用螞蟻統一訓練平臺構建,並使用工作流進行定時排程,離線和線上任務的其他引數全部一致。Batchsize為512,每200步(即20萬樣本)評估結果,定時將模型通過圖裁剪匯出到線上系統。當任務失敗時,排程系統會自動拉起,從checkpoint恢復。


該推薦業務的online learning桶最近一週相比線上多模型融合最優桶提升4.23% , 相比隨機對照提升達34.67% 。 另一資訊推薦業務其最近一週,相比DNN基準uv-ctr提升+0.77%,pv-ctr提升+4.78%。實驗效果相比有較大的提升。


備註1: group embedding是將相似emb特徵分組,各自lookup求和後再concat,使得特徵交叉在更高層進行。其設計是考慮到不同group的特徵差異很大(如user和item),不應直接對位求和。

備註2: inference打分僅做pointwise排序,取樣雖改變資料分佈但不改變偏序關係,因此並未在訓練上做補償。


5. 未來工作


彈性特徵已經成為螞蟻實時強化深度學習的核心要素。它只是第一步,在解決特徵空間按需建立問題後,它會帶來一個充滿想象力的底層架構,眾多技術都能在此基礎上深挖: 在工程上,可繼續從分鐘級向秒級優化,進一步提升鏈路實時性並實現模型增量更新; 在演算法上,我們正在探索如樣本重要性取樣,自動特徵學習,線上線性規劃與DNN的結合,實現優化器聯合決策等技術。


由於線上學習是個複雜的系統工程,我們在開發和調優時遇到了大量的困難,涉及樣本回流,訓練平臺,模型打分,線上評估等一系列問題,尤其是穩定性,但基本都一一克服。為了保證線上結果穩定可信,我們在觀察和優化兩三個月後才釋出這篇文章,希望和業界同仁一起交流探討。


本文作者為螞蟻金服人工智慧部認知計算組的基礎演算法團隊,團隊涉及影像、NLP、推薦演算法和知識圖譜等領域,擁有定損寶和理賠寶等核心業務。


參考文獻:

[1] McMahan, Brendan. "Follow-the-regularized-leader and mirror descent: Equivalence theorems and l1 regularization." Proceedings of the Fourteenth International Conference on Artificial Intelligence and Statistics. 2011.

[2] McMahan, H. Brendan, et al. "Ad click prediction: a view from the trenches." Proceedings of the 19th ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2013.

[3]Yuan, Ming, and Yi Lin. "Model selection and estimation in regression with grouped variables." Journal of the Royal Statistical Society: Series B (Statistical Methodology) 68.1 (2006): 49-67.

[4] Andrew, Galen, and Jianfeng Gao. "Scalable training of L 1-regularized log-linear models." Proceedings of the 24th international conference on Machine learning. ACM, 2007.

[5]Scardapane, Simone, et al. "Group sparse regularization for deep neural networks." Neurocomputing 241 (2017): 81-89.

[6] Yang, Haiqin, et al. "Online learning for group lasso." Proceedings of the 27th International Conference on Machine Learning (ICML-10). 2010.

[7]Zhou, Yang, Rong Jin, and Steven Chu–Hong Hoi. "Exclusive lasso for multi-task feature selection." Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics. 2010.

[8] Yoon, Jaehong, and Sung Ju Hwang. "Combined group and exclusive sparsity for deep neural networks." International Conference on Machine Learning. 2017.

[9] Langford, L. Li, and T. Zhang. Sparse online learning via truncated gradient.JMLR, 10, 2009.

[10]L. Xiao. Dual averaging method for regularized stochastic learning and online optimization. In NIPS, 2009.


640?wx_fmt=gif

你可能還喜歡

點選下方圖片即可閱讀


640?wx_fmt=jpeg

首次公開!《阿里計算機視覺技術精選》揭祕前沿落地案例


640?wx_fmt=jpeg

周博通 | 阿里開源首個 DL 框架、4000臺伺服器真實資料集;明年1月開源Blink


640?wx_fmt=jpeg

萬字長文揭祕:阿里如何實現海量資料實時分析?


640?wx_fmt=jpeg

關注「阿里技術」

把握前沿技術脈搏

相關文章