二阶龙格库塔公式推导_DeepFM原理推导
注:歡迎關注本人分享有關個性化推薦系統公眾號:Tiany_RecoSystem
轉發一篇關于DeepFM的公式推導的博客:
論文精讀-DeepFM - CSDN博客?blog.csdn.net以及DeepFM的實現參考鏈接:
Jachin:推薦系統中使用ctr排序的f(x)的設計-dnn篇之DeepFM模型?zhuanlan.zhihu.com以及其他DeepFM的理論實踐:
Python程序員:推薦系統遇上深度學習(三)--DeepFM模型理論和實踐
目前的CTR預估模型,實質上都是在“利用模型”進行特征工程上狠下功夫。傳統的LR,簡單易解釋,但特征之間信息的挖掘需要大量的人工特征工程來完成。由于深度學習的出現,利用神經網絡本身對于隱含特征關系的挖掘能力,成為了一個可行的方式。DNN本身主要是針對于高階的隱含特征,而像FNN(利用FM做預訓練實現embedding,再通過DNN進行訓練,有時間會寫寫對該模型的認識)這樣的模型則是考慮了高階特征,而在最后sigmoid輸出時忽略了低階特征本身。
鑒于上述理論,目前新出的很多基于深度學習的CTR模型都從wide、deep(即低階、高階)兩方面同時進行考慮,進一步提高模型的泛化能力,比如DeepFM。
很多文章只是簡單對論文進行了翻譯,本文重點則在于詳細分析模型原理,包括給出論文中略過的模型推導細節,鑒于本人小白,因此如有問題,歡迎各位大牛指出改正。之后會嘗試復現論文,當然得等我安好tensorflow再說= =。好了廢話不多說,下面開始裝逼。
首先給出論文模型圖,由于文章畫的很好,就直接貼圖了:
可以看到,整個模型大體分為兩部分:FM和DNN。簡單敘述一下模型的流程:借助FNN的思想,利用FM進行embedding,之后的wide和deep模型共享embedding之后的結果。DNN的輸入完全和FNN相同(這里不用預訓練,直接把embedding層看NN的一個隱含層),而通過一定方式組合后,模型在wide上完全模擬出了FM的效果(至于為什么,論文中沒有詳細推導,本文會稍后給出推導過程),最后將DNN和FM的結果組合后激活輸出。
embedding和FM
之所以放在一樣說,主要是模型在embedding的過程中,也是借助了FM的方式, 通過隱向量與X的內積運算,將稀疏的X向量轉化為K維度的稠密向量,即得到embedding向量數據,用于接下來DNN的輸入以及FM的輸出,首先說明下二階FM的形式:
其中向量V就是對應特征的隱向量(不太懂FM可以先學習下該算法)。而在目前很多的DNN模型中,都是借助了FM這種形式來做的embedding,具體推導如下:
由于CTR的輸入一般是稀疏的,因此在第一層隱含層之前,引入一個嵌入層來完成將輸入向量壓縮到低維稠密向量,
嵌入層(embedding layer)的結構如上圖所示。當前網絡結構有兩個有趣的特性:
1)盡管不同field的輸入長度不同,但是embedding之后向量的長度均為K
2)在FM里得到的隱變量Vik現在作為了嵌入層網絡的權重,通過FM里面的二階運算,將稀疏的X輸入向量壓縮為低緯度的稠密向量
這里的第二點如何理解呢,假設我們的k=5,首先,對于輸入的一條記錄,經過one-hot編碼后,同一個field 只有一個位置是1,那么在由輸入得到dense vector的過程中,輸入層只有一個神經元起作用,得到的dense vector其實就是輸入層到embedding層該神經元相連的五條線的權重,即vi1,vi2,vi3,vi4,vi5。這五個值組合起來就是我們在FM中所提到的Vi。在FM部分和DNN部分,這一塊是共享權重的,對同一個特征來說,得到的Vi是相同的。
同樣借助原文的圖,這里k表示隱向量的維數,Vij表示第i個特征embeding之后在隱向量的第j維。假設我已經給出了V矩陣,
其中第5-15個特征是同一個field經過one-hot編碼后的表示,這是隱向量按列排成矩陣,同時,它也可看作embedding層的參數矩陣,按照神經網絡前向傳播的方式,embedding后的該slot下的向量值應該表示為:
可以看到這個結果就是一個5維的向量,而這個普通的神經網絡傳遞時怎么和FM聯系到一起的,仔細觀察這個式子可以發現:
從結果中可以看到,實質上,每個slot在embedding后,其結果都是one-hot后有值的那一維特征所對應的隱向量,FNN也是同樣如此。看到這里,在來解釋模型中FM部分是如何借助這種方式得到的。回到模型的示意圖,可以看到在FM測,是對每兩個embedding向量做內積,那么我們來看,假設兩個slot分別是第7和第20個特征值為1:
是不是感覺特別熟悉,沒錯,這個乘積的結果就是FM中二階特征組合的其中一例,而對于所有非0組合(embedding向量組合)求和之后,就是FM中所有二階特征的部分,這就是模型中FM部分的由來。
2. 當特征X并沒有專門one-hot編碼,包含類別和數值變量時,對于輸入數據,獲取到feature_index, feature_value格式,此時先通過比如embeddinglookup的方式,獲取到隱向量W矩陣中對于的向量組w, 然后w * value,因此第2中特征場景下,相比第1種離散化后的情況,多了一步w與feature_value乘積操作(在特征離散化情況下,value為0,1兩種值,因此無需再進行w*value操作)
當然,FM中的一階特征,則直接在embedding之前對于特征進行組合即可,這個很簡單,就不解釋了。
模型當中的FM中涉及的參數同樣會參與到梯度下降中,也就是說embedding層不會只是初始化使用,實質上這里可以理解為是直接用神經網絡來做了embedding,無疑他比FM本身的embedding能力來得更強。
DNN
DNN部分就可說的不多了,依然采用了全連接的深度神經網絡的方式,只是在最后激活輸出時,會對FM和DNN的結果一起做embedding:
由于像有tensorflow這樣的神器存在,搭建一個這樣的神經網絡模型并非難事(雖然我還沒有安好tf),因此大多時候就忽略了模型本身的work方式,比如如何迭代,涉及的參數矩陣包括4個:DNN中每層的W矩陣、DNN中每層的b向量、embedding層的V矩陣(FM的二階表示V)、FM的一階表示w。此部分的梯度下降推導筆者會之后補上
總結
以上是生活随笔為你收集整理的二阶龙格库塔公式推导_DeepFM原理推导的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自助点餐小程序能解决餐饮业两大痛点 ?自
- 下一篇: 不用和面的蔬菜卷,姐妹们快去做!