保持函数依赖的模式分解可以减轻或解决什么_推荐系统玩家 之 因子分解机FM(Factorization Machines)...
前言
因子分解機 (Factorization Machines) 是CTR預估的重要模型之一。自2010年被提出后,得到了大規模的應該,也是美團和頭條做推薦和CTR預估的方法之一。要講述因子分解機FM,就避不開邏輯回歸LR(logistic Rgeression)和矩陣分解MF(Matrix Factorization)。那么本篇文章將會涉及到因子分解機的演變過程,公式推導以及求解因子分解機。
邏輯回歸和矩陣分解的原理和推導我們在之前的文章中介紹過,有需要的朋友關注我的專欄:
推薦系統初級玩家?zhuanlan.zhihu.com1.因子分解機的演變
傳統的推薦模型上圖是傳統的推薦系統模型的分類,邏輯回歸LR模型在傳統的推薦模型中占據著非常重要的位置。而因子分解機的出現,也來源于邏輯回歸和矩陣分解的演化。
首先我們知道,邏輯回歸的是對所有特征的一個線性加權組合, 然后再加入Sigmoid邏輯函數:
對比與矩陣分解,雖然邏輯回歸模型已經不單單考慮了用戶的行為特征,也可以加入年齡,性別,物品的屬性,時間,地點等等特征。但是邏輯回歸表達能力仍然差的原因是僅僅用了每個單一的特征,而沒有考慮到特征之間的關系。
那有沒有模型可以加入特征之間的聯系呢?
POLY2模型(Degree-2 Polynomial Margin)則在LR的基礎上采用了一種暴力的特征組合模式,即將所有特征兩兩相交,因此原來的LR模型就變成了:
其中
是特征組合的權重。也就是說,POLY2模型將所有的特征兩兩相交,暴力的組合了特征。這樣以來,就增加了特征的維度,考慮到了特征之間的關系。但是同時,暴力的組合帶來的是維度的增加。在機器學習中,我們普遍使用One-hot編碼,這樣的暴力組合,就使得復雜度從
上升到了 , 特征維度也上升,同時數據極度稀疏,在訓練過程中很難收斂。那么有沒有方法可以處理稀疏數據,同時保持特征之間的聯系呢?
2.因子分解機
用戶對電影打分的onehot編碼上圖是電影背景下,用戶對電影打分的onehot編碼形式。每行代表一個樣本,每列都代表一個特征。同時特征可以分為五個部分:用戶ID,電影ID,用戶對其他電影的打分(歸一化),時間信息,以及對上一次電影的打分。
首先我們直觀的看下,為什么POLY2模型在很多情況下是不適用的。
POLY2模型的表達式如上,
是常數項,是一階特征的系數,是二階特征的系數,也就是交叉特征的系數。而由于在數據中,不是每個特征組合都有相互作用,因此,可能會為0。舉個例子來說,如上圖中,我們要估計用戶A對電影ST星際迷航(Star Trek)的相互作用,來預測A都ST的打分。顯然,上圖中A列乘以ST列是等于0的。也就是說,交叉項
為0了,那么對應的 在梯度更新時,,因此也就會導致 的訓練不充分且不準確,進而影響模型的效果。因此,因子分解機的應運而生。
因子分解機的優勢是為每個特征學習了一個隱權重向量(latent vector),在特征交叉的時候,用這兩個特征隱向量內積作為交叉特征的權重。如何理解這個含義呢?
在這里我們就要提一嘴矩陣分解。矩陣分解其實是將一個稀疏矩陣R分解為兩個矩陣內積的形式,通過內積回乘,就能夠得到一個滿秩的矩陣。如果是電影的評分矩陣,也就是可以對未知的電影評分進行預測。具體可以看這篇文章:
推薦系統玩家:推薦系統玩家 之 矩陣分解(Matrix Factorization)的基本方法 及其 優缺點?zhuanlan.zhihu.com而因子分解機FM就是在POLY2模型的基礎上,融合了矩陣分解的思想。即,對二階交叉特征的系數以矩陣分解的方式調整,讓系數不再是獨立無關的,同時解決數據稀疏導致的無法訓練參數的問題:
其中,
,是一個的向量矩陣,n是特征的個數,是個待確定的參數。 表示點乘,即向量對應位置乘積的和由矩陣分解可知,對任意一個正定矩陣
,都可以找到一個矩陣,且在矩陣維度足夠大的情況下使得成立。因此,通過矩陣分解用兩個向量 和 的內積近似原先矩陣。其次,在拆解為
和之后,參數更新時是對這兩個向量分別更新的,那么在更新時,對于向量,我們不需要尋找到一組和同時不為0,我們只需要在的情況下,找到任意一個樣本即可通過來更新。我們舉個例子來理解下上面的定義:
在商品推薦的場景下,樣本有兩個特征,分別是類品和品牌。某個訓練樣本的特征組合是(足球,阿迪達斯)。在POLY2模型中,只有當“足球”和“阿迪達斯”同時出現在一個訓練樣本中時,模型才能夠學到這個組合特征對應的權重。而在因子分解機FM中,“足球”的的隱向量也可以根據(足球,耐克)進行更新?!鞍⒌线_斯”的隱向量也可以根據(籃球,阿迪達斯)更新,由此一來,就大幅度的降低了模型對稀疏性的要求。
更極端的情況,對于一個從未出現的組合(籃球,耐克),因為模型已經學習了“籃球”和“耐克”的隱向量,因此就具備了更新權重
的能力,使其泛化能力大大提高。3.降低時間復雜度
公式(3)的時間復雜度為
, 我們可以對二階交叉特征進行化簡,使時間復雜度降低到 。首先矩陣A中的上三角,紅色方框部分代表公式(6),也就是因子分解機中二階交叉項部分。由圖可以看出,他是矩陣的全部元素減去對角線元素之和得到的, 即:
其中,
是矩陣全部元素之和。 代表對角線元素之和。因為 :
因此繼續化簡:
那么,因子分解機的二階表達式就為:
其復雜度為
??紤]到特征的稀疏性,盡管 可能很大,但很多 都是零。因此其實際復雜度應該是 ,其中 表示樣本不為零的特征維度數量的平均值。4.因子分解機FM求解
我們對公式(8)求偏導,可以計算因子分解模型對參數的梯度:
- 當參數為 時:
- 當參數為 時,只跟它相關的 有關:
當參數為
時:因此,因子分解機FM模型對參數的梯度為:
5.損失函數選取及算法流程
至此,我們就推導出了因子分解機的表達式以及參數的梯度。那么,損失函數在這里我們以以下兩個為例, 并用梯度下降法求解:
回歸問題:平方差損失函數
求偏導得:
平方損失函數的梯度為:
分類問題:對數損失函數
其中:
對數函數下的梯度為:算法流程(以對數損失函數為例)
對特征
:對
3. 重復步驟2,直到滿足終止條件。
至此,因子分解機FM的原理就梳理完了。如果想了解梯度下降的朋友可以繼續看這篇:
推薦系統玩家:推薦系統玩家 之 隨機梯度下降(Stochastic gradient descent)求解矩陣分解?zhuanlan.zhihu.com總結
以上是生活随笔為你收集整理的保持函数依赖的模式分解可以减轻或解决什么_推荐系统玩家 之 因子分解机FM(Factorization Machines)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python函数式编程中南大学_中南大学
- 下一篇: renpy 如何执行2个action_如