以下是羅遠飛在先薦推薦系統學院第一期線上活動中的技術分享:
大家好!我是第四正規化的羅遠飛!
很高興能有機會和大家一起交流關於自動機器學習方面的一些工作。我在第四正規化的工作大都和自動機器學習相關,之前的精力主要集中在自動特徵工程。雖然模型改進能夠帶來穩定的收益,但是更為困難。所以如果是在做一個新的業務,可以先嚐試從做特徵入手,特徵工程往往能夠帶來更明顯的收益。
AutoCross的背景
本次報告所提及的自動機器學習,是針對表資料的自動機器學習。表資料是一個經典的資料格式,它一般包含多列,列可能對應離散特徵或者連續特徵。我們不能將用於影像、語音或者NLP中的模型直接拿過來用,需要做特定的最佳化。
本次報告提及的特徵組合,特指feature crossing,即兩個離散特徵的笛卡爾積。以“去過的餐廳”為例,我經常去麥當勞,那麼我和麥當勞可以做為一個組合特徵;再比如我去肯德基,則我和肯德基也可做為一個組合特徵。
本次報告提及的自動特徵工程,是指自動從上表資料中發現這些有效的組合特徵。比如我是一位軟體工程師,是一個特徵;在第四正規化工作,是另外一個特徵。這兩個特徵是分成兩列儲存的,我們可以把這兩列組合成一個新的特徵,這個特徵的指示性更強,更具有個性化。
為什麼需要自動特徵工程呢?
首先,特徵對建模效果有著非常重要的作用。其次,客戶的場景遠比建模專家多,如我們的先薦業務有上千家媒體,我們不能給每個業務都配備一個專家,針對每一個場景人工去建模。最後,即使只有一個業務,資料也是多變的,面臨的場景也是不停變化的,所以我們要做自動特徵工程,不能讓人力和我們的業務量呈正比。
AutoCross的相關研究
自動特徵工程主要分為兩大類,一類是顯式特徵組合,另一類是隱式特徵組合。
顯式的特徵組合
顯式的特徵組合有兩個代表性工作,分別是RMI [2]和CMI [3]。其中字母“MI”代表互資訊(Mutual Information),是一個經典的特徵選擇的方法。
MI是透過統計同一個資料中,兩列特徵的出現頻率和共現頻率計算得到。但是RMI的做法是在訓練集合統計一部分資訊,在另外一部分成為reference資料上統計另外一部分資訊,這也是“R”的來源。上圖來自於RMI的論文[2],表示隨著不同的組合特徵加進去,然後AUC逐漸地上漲。CMI是另外一個經典的工作,CMI透過分析對率損失函式,結合牛頓法,計算出每個特徵的重要性。
它們都取得了不錯的效果。但一方面,它們只考慮二階特徵組合;另外,它們均為序列演算法,每次選擇一個組合特徵後,都需把其他特徵重新訓練一遍,是O(n^2)複雜度,其中n為特徵數目。此外,MI本身不允許一個特徵下同時出現多個取值。
隱式的特徵組合
另外一類是隱式特徵組合,大家可能更熟悉一些。FM[4]和FFM[5]是列舉所有的二階特徵組合,它們組合方式是用低維空間中的內積去代表兩個特徵的組合,取得了很好的效果。隨著DL的興起,現在更流行基於DNN做隱式特徵組合。但是它的可解釋性不強,一直被大家詬病。
我們提出AutoCross[1],它具有很強的可解釋性,能夠做到高階特徵組合,同時具有較高的Inference效率。
AutoCross整體結構
從左往右看,AutoCross的輸入是資料和對應的特徵型別,然後經過AutoCross的Flow,輸出一個特徵生成器,能夠把學到的特徵處理方式應用於新資料。
Flow裡主要有三個部分,首先是預處理,然後是組合特徵生成和組合特徵選擇的迭代過程。針對資料預處理,我們提出了多粒度離散化;針對怎麼從指數級空間中有效的生成組合特徵,我們用了集束搜尋(Beam Search);針對如何有效且低代價地特徵選擇,我們提出了逐域對數機率迴歸(Field-wise LR)和連續小批次梯度下降(Successive Mini-batch GD)兩種方法。
AutoCross演算法
下面我們看一下每個過程所涉及的演算法。
首先是資料預處理,資料預處理的目的是補充缺失值,並將連續特徵離散化。我們觀察到,對於連續特徵,在離散化的時候,如果選擇的離散化粒度不一樣,其效果會差別非常大。甚至在一個資料集上觀察到AUC有10個百分點的差異。如果對每一個資料集都手動設定最優的離散化粒度,代價比較高,也不現實。
基於此我們提出了多粒度離散化方法,同時使用多種粒度去離散化同一個特徵,比如特徵“年齡”,我們按照年齡間隔為5的離散化一次,年齡間隔為10的離散化一次,年齡間隔為20的再離散化一次,同時生成多個不同的離散化特徵,讓模型自動去選擇最適合它的特徵。
集束搜尋(Beam Search)
如前文所述,假設有n個原始特徵,那麼可能的k階特徵有O(n^k)個,這是一個指數級增長的過程。如何在這個空間中有效地去搜尋、生成、組合特徵呢?如果都生成,在計算和儲存上都不太可行。
我們借鑑集束搜尋(Beam Search)的方法來解決該問題。它的工作原理是,先生成一部分二階組合特徵,然後用效果好的二階組合特徵去衍生三階組合特徵,並非生成所有的三階組合特徵,相當於一種貪心的搜尋方法。
逐域對數機率迴歸(Field-wise LR)
我們透過多粒度離散化對資料進行預處理,之後透過集束搜尋縮減搜尋空間。
但生成的特徵依然數量眾多,怎麼才能快速、低代價地從生成特徵中選出有效的特徵呢?對此,我們提出了逐域對數機率迴歸(Field-wise LR)演算法,固定已選特徵對應的模型引數,然後計算候選特徵中哪個特徵加進來,能夠最大程度的提升模型效果。這樣做能夠顯著節約計算、通訊和儲存上的開銷。
連續小批次梯度下降(Successive Mini-batch GD)
為了進一步降低特徵評估成本,我們又提出了連續小批次梯度下降(Successive Mini-batch GD)方法。在小批次梯度下降的迭代過程中,逐漸淘汰不顯著的候選特徵,並給予較重要的特徵更多批的資料,以增加其評估準確性。
AutoCross-System最佳化
下面介紹我們在系統上做的一些最佳化。
快取特徵權重
從演算法上來看,我們的系統是一個指數空間的搜尋問題,即使能夠降低其複雜度,它的運算代價依然很大。因此我們會對資料取樣,並序列化壓縮儲存。
之後,當執行逐域對數機率迴歸時,系統會把已經計算過的特徵權重快取下來。如果按照以前的方法,我們需要先從引數伺服器上獲取已經生成特徵的權重,這一步會帶來網路開銷;獲取之後要做運算,並生成該特徵及預測 ,這一步會產生計算開銷;生成特徵之後,再儲存到硬碟中,進一步會產生儲存成本。但是,我們把之前的那些特徵的權重都給快取下來,透過直接查表,就能夠降低網路、計算、儲存的開銷。
線上計算
除了快取特徵權重之外,我們還進行了線上計算。我們在做特徵生成的同時,有獨立的執行緒去序列化資料和生成特徵。
資料並行
此外,資料並行也是系統最佳化的常用方法。系統的每個程式中都有一份計算圖,並透過主節點,或者引數伺服器,保證它們之間有序地在進行各個操作。
AutoCross實驗
下圖是我們的實驗結果。
這裡的baseline有兩個。我們首先看AutoCross產生的特徵對LR的幫助。當我們把AutoCross的特徵放進LR之後,其效果變化很明顯(第1行和第2行)。同時,我們對比了AutoCross和CMI兩種方法(見第2行和第4行)。經過對比後發現, AutoCross始終優於CMI。
為驗證AutoCross產生的特徵是否會對深度模型有幫助,我們同樣把AutoCross的特徵和W&D模型結合(見第3行)。我們發現,當我們把特徵給W&D之後,W&D模型也取得了很不錯的效果,在10個資料集上效果均能和當前最好的深度學習模型相媲美。
參考文獻
[1] Yuanfei, Luo, Wang Mengshuo, Zhou Hao, Yao Quanming, Tu WeiWei, Chen Yuqiang, Yang Qiang, and Dai Wenyuan. 2019. “AutoCross: Automatic Feature Crossing for Tabular Data in Real-World Applications.” KDD.
[2] Rómer Rosales, Haibin Cheng, and Eren Manavoglu. 2012. Post-click conversion modeling and analysis for non-guaranteed delivery display advertising. WSDM.
[3] Olivier Chapelle, Eren Manavoglu, and Romer Rosales. 2015. Simple and scalable response prediction for display advertising. TIST.
[4] Rendle, Steffen. "Factorization machines." 2010. ICDM.
[5] Yuchin Juan, Yong Zhuang,Wei-Sheng Chin, and Chih-Jen Lin. 2016. Field-aware factorization machines for CTR prediction. In ACM Conference on Recommender Systems.
[6] Huifeng Guo, Ruiming Tang, Yunming Ye, Zhenguo Li, and Xiuqiang He. 2017. DeepFM: a factorization-machine based neural network for CTR prediction. IJCAI.