回顧一下fm:
\begin\hat=w_0+\sum_^n+\sum_^n^n}\label\end
$\cdot$表示向量的內積。樣本$x$是$n$維向量,$x_i$是第$i$個維度上的值。$v_i$是$x_i$對應的長度為$k$的隱向量,$v$是模型引數,所以所有樣本都使用同乙個$v$,即$x_$與$x_$都使用$v_1$。
在ffm(field-aware factorization machines )中每一維特徵(feature)都歸屬於乙個特定的field,field和feature是一對多的關係。比如
field
field1年齡
field2城市
field3性別
feature
x1年齡
x2北京
x3上海
x4深圳
x5男x6女
使用者12310
010使用者2310
0101
1. 對於連續特徵,乙個特徵就對應乙個field。或者對連續特徵離散化,乙個分箱成為乙個特徵。比如
field
field1年齡
feature
小於20
20-30
30-40
大於40
使用者10230
0使用者200
3102. 對於離散特徵,採用one-hot編碼,同一種屬性的歸到乙個field
不論是連續特徵還是離散特徵,它們都有乙個共同點:同乙個field下只有乙個feature的值不是0,其他feature的值都是0。
ffm模型認為$v_i$不僅跟$x_i$有關係,還跟與$x_i$相乘的$x_j$所屬的field有關係,即$v_i$成了乙個二維向量$v_$,$f$是field的總個數。ffm只保留了(\ref)中的二次項.
\begin\hat=\sum_^n^n\cdot v_x_ix_j}}\label\end
以上文的**資料為例,計算使用者1的$\hat$
$$\hat=v_\cdot v_x_1x_2+v_\cdot v_x_1x_3+v_\cdot v_x_1x_4+\cdots$$
由於$x_2,x_3,x_4$屬於同乙個field,所以$f2,f3,f4$可以用同乙個變數來代替,比如就用$f2$。
$$\hat=v_\cdot v_x_1x_2+v_\cdot v_x_1x_3+v_\cdot v_x_1x_4+\cdots$$
我們來算一下$\hat$對$v_$的偏導。
$$\frac}}}}=v_x_1x_2+v_x_1x_3+v_x_1x_4$$
等式兩邊都是長度為$k$的向量。
注意$x_2,x_3,x_4$是同乙個屬性的one-hot表示,即$x_2,x_3,x_4$中只有乙個為1,其他都為0。在本例中$x_3=x_4=0, x_2=1$,所以
$$\frac}}}}=v_x_1x_2$$
推廣到一般情況:
\begin\frac}}}}=v_x_ix_j\label\end
$x_j$屬於field $fj$,且同乙個field裡面的其他$x_m$都等於0。實際專案中$x$是非常高維的稀疏向量,求導時只關注那些非0項即可。
你一定有個疑問:$v$是模型引數,為了求$v$我們採用梯度下降法時需要計算損失函式對$v$的導數,為什麼這裡要計算$\hat$對$v$的導數?看看分割線下方的內容你就明白了。
在實際**點選率的專案中我們是不會直接使用公式(\ref)的,通常會再套一層sigmoid函式。公式(\ref)中的$\hat$我們用$z$來取代。
$$z=\phi(v,x)=\sum_^n^n\cdot v_x_ix_j}}$$
由公式(\ref)得
$$\frac}}}=v_x_ix_j$$
用$a$表示對點選率的**值
$$a=\sigma(z)=\frac}=\frac}$$
令$y=0$表示負樣本,$y=1$表示正樣本,$c$表示交叉熵損失函式。根據《神經網路調優》中的公式(1)(2)可得
$$\frac=a-y=\left\-\frac & if\ y是正樣本 \\ \frac} & if\ y是負樣本\end\right . $$
$$\frac}}=\frac\frac}}}$$
看完了本部落格再去看**《field-aware factorization machines for ctr prediction》中的公式推導應該就比較容易了吧,在該**中他是以$y=1$代表正樣本,$y=-1$代表負樣本,所以才有了3.1節中的
關注(\ref)式,當$x$都是one-hot時可以寫成
$$\sum_^n^nv_}}$$
公式通過變形可以減少計算量,這裡要分兩種情況:$i$和$j$是否屬於同乙個field。
$$\sum_\sum_v_v_=\sum_v_\sum_v_$$
舉個例子,比如$a$、$b$、$c$屬於field1,$d$、$e$屬於field2,則$ad+ae+bd+de+cd+ce=(a+b+c)(d+e)$。只需要一次乘法。
\begin
\begin
\sum_\sum_v_v_&=\frac\left[\sum_\sum_v_v_-\sum_v_^2\right]\\
&=\frac\left[\sum_v_\sum_v_-\sum_v_^2\right]\\
&=\frac\left[\left(\sum_v_\right)^2-\sum_v_^2\right]
\end
\end
舉個例子,比如$a$、$b$、$c$屬於同乙個fied,則$ab+ac+bc=\frac[(a+b+c)^2-(a^2+b^2+c^2)]$。乘法計算量由$o(n^2)$ 降為$o(n)$,$n$表示該field內有幾個特徵。
推薦演算法之FFM 原理及實現簡介
推薦系統一般可以分成兩個模組,檢索和排序。比如對於電影推薦,檢索模組會針對使用者生成乙個推薦電影列表,而排序模組則負責對這個電影列表根據使用者的興趣做排序。當把ffm演算法應用到推薦系統中時,具體地是應用在排序模組。ffm演算法,全稱是field aware factorization machin...
超平面公式推導及理解
最近在學習 統計學習方法 在學習第乙個機器學習演算法 感知機時,提出了超平面的概念,以下為超平面公式的推導及空間中任意一點距離超平面距離的推導。方便日後複習。參考 在數學中,超平面是n維歐氏空間中,餘維度為1的子空間 1 即超平面是n維空間中的n 1維的子空間。它是平面中的直線 空間中的平面之推廣。...
用泰勒公式推導梯度下降原理
泰勒公式,應用於數學 物理領域,是乙個用函式在某點的資訊描述其附近取值的公式。如果函式足夠平滑的話,在已知函式在某一點的各階導數值的情況之下,泰勒公式可以用這些導數值做係數構建乙個多項式來近似函式在這一點的鄰域中的值。說白了,泰勒公式就是 可以使用函式在某點的各階導數組成高次多項式去逼近乙個函式。泰...