推薦系統一般可以分成兩個模組,檢索和排序。比如對於電影推薦,檢索模組會針對使用者生成乙個推薦電影列表,而排序模組則負責對這個電影列表根據使用者的興趣做排序。當把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位元組...