推薦演算法之FFM 原理及實現簡介

2021-08-11 04:27:16 字數 2968 閱讀 5008

推薦系統一般可以分成兩個模組,檢索和排序。比如對於電影推薦,檢索模組會針對使用者生成乙個推薦電影列表,而排序模組則負責對這個電影列表根據使用者的興趣做排序。當把ffm演算法應用到推薦系統中時,具體地是應用在排序模組。

ffm演算法,全稱是field-aware factorization machines,是fm(factorization machines)的改進版。這個改進原理上比較簡單,所以我想先把fm講清楚。

我們知道推薦演算法中,最廣為人知的是協同過濾演算法,協同過濾一般分為基於使用者的協同過濾和基於物品的協同過濾,而除此之外,還有基於隱語義的協同過濾。我們來考慮乙個電影評分的問題,使用者對於電影的評分,可以構成乙個評分矩陣

m ,這個矩陣是稀疏的,因為每個使用者看過的電影都是有限的,這個矩陣裡面會有很多缺失項,我們要做的便是將這個稀疏矩陣填滿,我們可以怎麼做呢?想象乙個興趣空間,這個空間裡面有多個維度,維度一表示懸疑型別,維度二表示言情型別,等等。那麼使用者的興趣可以表達為這個空間裡的乙個向量

u,而電影本身的特點也可以用這個空間裡的向量

v 表達,於是使用者對電影的評分可以用內積 u⋅

v來表示。通過這個方式,我們便可以對這個評分矩陣做矩陣分解: m=

ut⋅v

其中u 是使用者在隱語義空間對應的向量組成的矩陣,而

v則是電影對應的矩陣。求解這個矩陣分解問題對應的優化問題是這樣:

minu,v

∑ru,

v∈r(

ru,v

−u⋅v

)2其中r是使用者對電影的評分的集合,ru

.v即表示使用者

u 對電影

v的評分。這裡為了方便省略了正則項。通過求解這個優化問題,得到矩陣u 和

v,於是對於ru

′,v′

∉r,可以通過u′

⋅v′ 得到。也就是說這個隱語義模型具有很好的泛化能力,可以對沒有出現的使用者對電影的評分做出比較準確的**。

我們來看一下廣泛應用在排序場景裡的邏輯回歸,為了學習出不同特徵之間的關聯,邏輯回歸的使用中往往會引入高階特徵。比如說性別跟手機品牌的關係,通過引入(性別+手機品牌)的二階特徵,模型可以學習到不同性別對不同手機品牌的興趣。但如果訓練樣本中沒有出現(女性+錘子),模型也就無法學習到女性對於錘子的興趣程度。那麼如果說我就是想知道女性對於錘子的興趣呢?考慮上面的隱語義模型,如果我們把女性和錘子這些特徵對映到隱語義空間,通過學習女性和路虎各自對應的向量,就可以用這兩個向量的內積得到這個興趣。這樣嘗試就得到了fm。(這裡使用興趣這個詞是不太嚴謹的,更準確地講是這個二階特徵的權重)

邏輯回歸模型可以寫成: y=

11+e

−ϕ(w

,x)

ϕ(w,

x)=∑

wi⋅x

i 其中w

i 為xi

對應的權重。將上面的ϕ(

w,x)

改寫為: ∑(

i,j)

∈c(w

i⋅wj

)xix

j 就得到了fm模型,其中wi

即特徵xi

所對應的隱語義空間的向量,

c 則是二階交叉特徵的組合。隱語義空間的維度是乙個超引數,用

k表示。這裡省略了一階項和正則項。

fm模型相對於邏輯回歸有了更好的泛化能力,可以學習出訓練樣本中沒有的交叉特徵的權重。而另一方面,在效能上也有很好的表現,使用邏輯回歸的時候,對於有

n 個特徵的情況,所有二階特徵對應的引數數量是n2

(當然一般也沒人會取遍所有二階組合),而fm模型對應的引數總數只有nk

,一般地

k<

100<<

n 。ϕ(

w,x)

得到,於是ffm模型的優化問題可以完整寫出:

minw∑l

=1ml

og(1

+exp

(−yl

ϕ(w,

xl))

)+λ2

∥w∥2

ϕ(w,x)=

∑(i,

j)∈c

(wi,

fj⋅w

j,fi

)xix

j 其中w

i,fj

即xi 與

fiel

d=j 的特徵互作用時對應的向量。

minwl(

w)=minw[

−12∑

l=1m

(1+y

l)lo

g11+

e−yl

ϕ(w,

xl)+

(1−y

l)lo

g11+

e−yl

ϕ(w,

xl)]

+λ2∥

w∥2=

minw∑l

=1ml

og(1

+exp

(−yl

ϕ(w,

xl))

)+λ2

∥w∥2

ϕ(w,x)=

∑(i,

j)∈c

(wi,

fj⋅w

j,fi

)xix

j 最後,來聊聊實現。將ffm發揚光大的台大團隊提供了乙個libffm實現,是乙個單機版本的並行實現。其優化演算法,無他,唯stochastic-gradient dencent而已,對演算法細節感興趣的詳見[1]。而其並行演算法則有點意思,其實現使用了並行演算法hog-wild!,這名字一看就很酷炫。這個演算法說的是,對於大部分機器學習問題,往往乙個訓練樣本所涉及的引數只是整個引數集的一小部分。那麼把這一點作為基礎的話,在多核環境下,開啟多個執行緒,每個執行緒根據不同的訓練樣本同時對引數集進行優化,是沒有問題的,更新的引數發生衝突的機率很低,即使衝突了,也沒多大事。這個演算法的偽**如下。

RSA演算法原理及加密解密簡介

素數又稱質數,指在乙個大於1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數。公因數只有1的兩個數,叫做互質數 又稱互素,若n個整數的最大公因子是1,則稱這n個整數互質。rsa演算法 是根據數論中相關理論求出公鑰和私鑰 找出質數p和q 2.n p q l p 1 q 1 此為尤拉函式 數論...

PageRank演算法原理及實現

pagerank演算法原理介紹 pagerank演算法是google的網頁排序演算法,在 the top ten algorithms in data mining 一書中第6章有介紹。大致原理是使用者搜尋出的多個網頁需要按照一定的重要程度 即後面講的權重 排序,每個網頁的權重由所有鏈結到它的其他網...

BitMap演算法原理及實現實現

1.bitmap是什麼 bitmap是乙個十分有用的結構。所謂的bit map就是用乙個bit位來標記某個元素對應的value,而key即是該元素。由於採用了bit為單位來儲存資料,因此可以大大節省儲存空間。2.bitmap優勢 舉個例子,有乙個無序有界int陣列,初步估計占用記憶體44 16位元組...