阿里妹導讀:本文來自螞蟻金服人工智能部認知計算組的基礎算法團隊,文章提出一整套創新算法與架構,經過對TensorFlow底層的彈性改造,解決了在線學習的彈性特徵伸縮和穩定性問題,並以GroupLasso和特徵在線頻次過濾等自研算法優化了模型稀疏性,在支付寶核心推薦業務得到了uvctr的顯著提高,並較大地提高了鏈路效率。算法
在線學習(Online learning)因爲能捕捉用戶的動態行爲,實現模型快速自適應,進而成爲提高推薦系統性能的重要工具。然而它對鏈路和模型的穩定性,訓練系統的性能都提出了很高的要求。但在基於原生TensorFlow,設計Online推薦算法時,咱們發現三個核心問題:數組
一些資訊推薦場景,須要大量長尾詞彙做爲特徵,需使用featuremap對低頻特徵頻次截斷並連續性編碼,但耗時且方法aggressive。安全
使用流式數據後,沒法預知特徵規模,而是隨訓練逐漸增加。所以需預留特徵空間訓練幾天後重啓,不然會越界。網絡
模型稀疏性不佳,體積達到數十GB,致使上傳和線上加載耗時長且不穩定。架構
更重要的是,在線學習如火如荼,當流式特徵和數據都被打通後,能按需增刪特徵,實現參數彈性伸縮的新一代訓練平臺成爲大勢所趨。爲了解決這些問題,從2017年末至今,螞蟻金服人工智能部的同窗,充分考慮螞蟻的業務場景和鏈路,對TensorFlow進行了彈性改造, 解決了以上三大痛點,簡化並加速離線和在線學習任務。其核心能力以下:ide
彈性特徵伸縮體系,支持百億參數訓練。函數
group_lasso優化器和頻次過濾,提升模型稀疏性,明顯提高線上效果。工具
模型體積壓縮90%,完善的特徵管理和模型穩定性監控。性能
在與業務線團隊的共同努力下,目前已在支付寶首頁的多個推薦場景全流量上線。其中某推薦位的個性化online learning桶最近一週相比線上多模型融合最優桶提高4.23% , 相比隨機對照提高達34.67% 。 某個性化資訊推薦業務最近一週,相比DNN基準uv-ctr提高+0.77%,pv-ctr提高+4.78%,模型體積壓縮90%,鏈路效率提高50%。學習
背景:在原生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,其內存結構以下:
在聲明該變量時,只需增長一句,其餘訓練代碼皆不需改動:
每一個特徵都經過hash函數映射到一個2的64次方大小的空間內。當須要計算該特徵時,PS會按需惰性建立並返回之。但其上層行爲與原生TF一致。因爲去掉了featuremap轉ID的過程,咱們內部形象地將其稱爲「去ID化」。在此之上咱們實現了Group Lasso FTRL,頻次過濾和模型壓縮等一系列算法。
備註:彈性特徵帶來一個顯著的優點:只要用足夠強的L1稀疏性約束,在單機上就能調試任意大規模的特徵訓練,帶來不少方便。咱們的hashmap實現是KV化的,key是特徵,value是vector的首地址。
離線訓練優化
通過這樣的改造後,在離線批量學習上,帶來了如下變化:
在線訓練優化
online learning上,能帶來以下變化:
除了性能有明顯的提高以外,其最大的優點是不需提早申請空間,訓練能夠無縫穩定運行。
彈性架構,主要目的就是特徵優選,讓模型自適應地選擇最優特徵,進而實現稀疏化,下降過擬合。本節介紹特徵優選的兩個核心技術:
使用流式頻次過濾, 對特徵進入進行斷定。
使用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斷定特徵中的部分參數無效時,也不能安全地將該特徵刪除。如圖:
所以,在L1和L2正則的基礎上,人們引入L21正則(group lasso)和L2正則(exclusive sparsity),分別表示以下:
L21早在2011年已經引入,它最初目的是解決一組高度關聯特徵(如男女)應同時被保留或刪除的問題,咱們創新地擴展到embedding的表示上,以解決相似的問題。
在L21中,因爲內層L2正則將一個特徵的全部參數施加相同的約束,能將整組參數清除或保留,由此決定embedding層中的某些特徵對應的embedding向量是否徹底刪除,提高模型泛化性。所以稱爲group lasso。
而L12則正好相反,它迫使每組參數中的非0參數數量一致但值又儘量不一樣,但使輸出神經元互相競爭輸入神經元,進而使特徵對目標更具區分性。
對於DNN分類網絡,底層表示要求有足夠的泛化性和特徵抽象能力,上層接近softmax層,須要更好的區分性。所以咱們一般在最底層的embedding層使用group lasso。即以下的優化目標:
直接將L21正則項懲罰加入loss,模型最終也能收斂,但並不能保證稀疏性。所以Group lasso優化器參考了FTRL,將梯度迭代分紅兩個半步,前半步按梯度降低,後半步微調實現稀疏性。經過調節L1正則項(即公式中的λ),能有效地控制模型稀疏性。
Group lasso是彈性計算改造後,模型性能提高和壓縮的關鍵。值得指出:
在咱們實現的優化器中,Variable,以及accum和linear兩個slot也是KV存儲。
L12和L21正則相結合的方法也已經有論文討論[8],但咱們還未在業務上嘗試出效果。
因爲篇幅限制,本節不打算詳細介紹Group lasso的原理和推導
2.2 流式頻次過濾
討論完特徵動態刪除的方法後,咱們再分析特徵的准入策略。
2.2.1 頻次過濾的必要性
在Google討論FTRL的文章1中提到, 在高維數據中大部分特徵都是很是稀疏的,在億級別的樣本中只出現幾回。那麼一個有趣的問題是,FTRL或Group FTRL優化器可否能刪除(lasso)極低頻特徵?
在RDA的優化公式中,知足如下條件的特徵會被置0:
若在t步以前,該特徵只出現過幾回,未出現的step的梯度爲0,隨着步數增大,知足上述條件變得愈來愈容易。由此RDA是能夠直觀處理極稀疏特徵的。 但對於FTRL,要知足:
其中,
不只和歷史梯度有關,還與歷史學習率和權重w有關。 所以FTRL雖然也能處理極稀疏特徵,但並無RDA那麼aggressive(此處還待詳細地分析其下界,Group FTRL與此相似)。
因爲FTRL在設計和推導時並未明確考慮極低頻特徵,雖然經過增大λ,確實能去除大量極低頻特徵,但因爲約束太強,致使部分有效特徵也被lasso,在離線實驗中被證實嚴重影響性能。其次,對這些巨量極低頻特徵,保存歷史信息的工程代價是很高昂的(增長几倍的參數空間和存儲需求),以下圖:
所以咱們提出,可否在實時數據流上模擬離線頻次過濾,爲特徵提供准入門檻,在不下降模型性能的基礎上,儘可能去除極低頻特徵,進一步實現稀疏化?
2.2.2 頻次過濾的幾種實現
注意: 因爲默認的embedding_lookup_sparse對特徵執行了unique操做(特徵歸一化以簡化計算),所以在PS端是不可能獲取真實特徵和label頻次的。須要Python端對placeholder統計後,上傳給server端指定的Variable,優化器經過slot得到該Variable後做出聯合決策。
最naive的思路是模擬離線頻次過濾,對特徵進行計數,只有達到必定閾值後再進入訓練,但這樣破壞了數據完整性:如總頻次6,而閾值過濾爲5,則該特徵出現的前5次都被忽略了。爲此咱們提出了兩種優化方案:
基於泊松分佈的特徵頻次估計
在離線shuffle後的特徵知足均勻分佈,但對在線數據流,特徵進入訓練系統可看作泊松過程,符合泊松分佈:
其中n爲當前出現的次數,t爲當前的步數,λ爲單位時間發生率,是泊松分佈的主要參數,T爲訓練總步數。
爲特徵最低門限(即最少在T時間內出現的次數)。
所以咱們能經過前t步的特徵出現的次數n,將t時刻當作單位時間,則
。 根據泊松分佈,咱們能夠算出剩餘
時間內事件發生大於等於
次的機率
每次該特徵出現時,均可按該機率
作伯努利採樣,特徵在t步進入系統的機率用下式計算:
經過真實線上數據仿真,它能接近離線頻次過濾的效果,其λ是隨每次特徵進入時動態計算的。它的缺陷是:
當t越小時,事件發生在t內的次數的variance越大,因此會以必定機率誤加或丟棄特徵。
將來總的訓練步數T在在線學習中是未知的。
頻次過濾與優化器相分離,致使不能得到優化器的統計信息。
動態調L1正則方案
在經典的FTRL實現中,L1正則對每一個特徵都是一致的。這致使了2.2.1 中提到的問題:過大的L1雖然過濾了極低頻特徵,但也影響的了模型的性能。參考各種優化器(如Adam)對learning_rate的改進,咱們提出:經過[圖片上傳失敗...(image-10f16c-1545974538974)]
特徵頻次影響L1正則係數,使得不一樣頻次的特徵有不一樣的lasso效果。
特徵頻次和基於MLE的參數估計的置信度相關,出現次數越低置信度越低。若是在純頻率統計基礎上加入一個先驗分佈(正則項),當頻率統計置信度越低的時候,越傾向於先驗分佈,相應的正則係數要更大。咱們通過多個實驗,給出瞭如下的經驗公式:
其中c是懲罰倍數,
爲特徵最低門限,這二者皆爲超參,
是當前特徵出現的頻次。
咱們在線上環境,使用了動態調節L1正則的方案 。在uvctr不降甚至有些微提高的基礎上,模型特徵數比不使用頻次過濾減小75%,進而從實驗證實了頻次過濾對稀疏化的正向性。它的缺點也很明顯:特徵頻次和正則係數之間的映射關係缺乏嚴謹證實。
頻次過濾做爲特徵管理的一部分,目前還少有相關論文研究,亟待咱們繼續探索。
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報表)。
線上與訓練指標之間的對應關係以下表:
經過http接口,每隔一段時間發送監控數據,出現異常會及時產生釘釘和郵件報警。下圖是對9月20日到27號的監控,從第二張圖表來看,模型能較好的適應當前數據流的打分分佈。
User-AUC:傳統的AUC並不能徹底描述uvctr,由於模型極可能學到了不一樣用戶間的偏序關係,而非單個用戶在不一樣offer下的點擊偏序關係。爲此,咱們使用了User-AUC,它儘量地模擬了線上uvctr的計算過程,在真實實驗中,監控系統的uvctr小時報表,與實時模型輸出的User-AUC高度一致。
目前算法已經在支付寶首頁的多個推薦位上線。推薦系統根據用戶的歷史點擊,融合用戶畫像和興趣,結合實時特徵,預估用戶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排序,採樣雖改變數據分佈但不改變偏序關係,所以並未在訓練上作補償。
彈性特徵已經成爲螞蟻實時強化深度學習的核心要素。它只是第一步,在解決特徵空間按需建立問題後,它會帶來一個充滿想象力的底層架構,衆多技術都能在此基礎上深挖: 在工程上,可繼續從分鐘級向秒級優化,進一步提高鏈路實時性並實現模型增量更新; 在算法上,咱們正在探索如樣本重要性採樣,自動特徵學習,在線線性規劃與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.
本文來自雲棲社區合做夥伴「阿里技術」,如需轉載請聯繫原做者。