ctr預估之DeepMVM
相比於PNN/FNN/DCN等網路來講,DeepFM從效果和理論上來講都更為穩定。那是否還有提升空間呢?答案是有的,而且可以在複雜度不顯著增加的情況下,增強結果。
還是兩條路:1. 設計新的layer,完成顯式的特徵交叉;2. 藉助LR/FM等線性模型,幫助DNN學習更好的特徵表示。
第一條路我暫時沒想到好的思路,那麼就沿著第二條路進一步思考。
(題目中DeepMVM名字我瞎取的)
問題分析
FM可以說把二階交叉學的比較充分了(FFM不考慮,複雜度過高),再往上就是更高階的交叉了,與FM一樣,我們依然可以通過化簡,將高階FM複雜度變為線性。但每增加一階參數就會增加一倍,另外對稀疏數據來講,高階蘊含的信息比低階要小很多,相同參數量的情況下,更難訓練(下篇文章計劃寫下高階FM的實現)。
我也試著對DeepFM引入了三階信息,結果沒有太大變化。那麼有沒有辦法能夠直接拿到所有階的交叉信息,同時參數量又不會顯著增加呢?
至少對於目前的問題是可以的,廣告數據通常包括多個fields,每個field只有一位是1,也就說是全是one hot信息,不包括bag of words類信息(連續特徵不考慮),這點很重要。
想一想對於 ,我們如何一次性得到其任意階的交叉項信息呢。很簡單:
這樣從一階到最高 f 階交叉就都有了,而且還不會出現自交叉。
下面說一下完整的理論。
張量分解(Multi-view machine)
具體可以參考論文:Multi-view machine,我主要介紹下基本原理和實現。
假設數據中包含 個field,每個field對應的特徵維度分別為 ,那麼對於全交叉模型,可表示為:
其中,
模型包含的參數個數為: ,要爆炸的節奏。既然FM通過低秩分解降低了參數量,這裡我們拿到的是m維的張量,同樣可以通過對應的張量分解來降低參數量。
對於這樣的權值張量,由於大部分都是0,實際上我們可以對它進行分解來降低參數量(Tucker分解,聯想矩陣的低秩分解)
其中,
分解後的模型參數個數: ,(嗯,參數量比FM還要少)。
同樣,通過化簡,複雜度變成線性,代碼實現起來比FM還簡潔一些。
Tensorflow實現
這裡比較重要的是W和bias的初始化,另外這個bias項實際上幫助MultiView machine獲取了field信息,這也是FM所不具備的。
def mvm_part(self, sparse_id, sparse_value): with tf.variable_scope("mvm"): W = tf.get_variable("core_embedding",(self.feature_size, self.factor_size), initializer=tf.random_normal_initializer(0.5, 0.01)) bias = tf.get_variable("padding_bias", (self.field_size, self.factor_size), initializer=tf.random_normal_initializer(0.5, 0.01)) self.embeddings = tf.nn.embedding_lookup(W, sparse_id) # None * F * K self.embeddings = tf.multiply(self.embeddings, sparse_value) all_order = tf.add(self.embeddings, bias) mvm_func = all_order[:,0,:] # None * 1 * K for i in range(1, self.field_size): mvm_func = tf.multiply(mvm_func, all_order[:,i,:]) # None * K mvm_func = tf.reshape(mvm_func, shape=[-1, self.factor_size]) return mvm_func
MVM我喜歡把它比做思想家,而FM更類似於實幹家。MVM就像我們的高T一樣,各方面都有所涉獵,大局觀比較強,FM呢,剛出道,就想專心把二階交叉做到極致。兩者配合的話,效果就很贊了。
所以我們可以用Deep + FM + MVM,複雜度並沒有咋提升,離線測試,在criteo數據集上相比於DeepFM,auc提升了0.3%,logloss下降了-0.02,這個結果其實相當不錯,DeepFM這個基線已經很高,MVM所提供的高階信息+field信息,進一步提升了模型的表現。
---------------
代碼地址:charleshm/deep-ctr
推薦閱讀:
※廣告點擊率預估之FM模型的學習和TF代碼實現
※FM模型在LTR類問題中的應用
TAG:深度學習DeepLearning | 機器學習 | 點擊率 |