文章目录
推荐系统笔记——FM 模型
楼主小白一枚还在学习,下面仅是学习笔记,并非教程,文章中如果有问题烦请指正,欢迎一起交流学习。
线性模型及其改进
传统的推荐系统中,比较常用的模型是 LR 模型。LR 模型本质上来说是线性模型,线性模型可以表示为下面的形式:
y ^ = w 0 + ∑ i = 1 n w i x i \hat{y} = w_0 + \sum_{i=1}^{n} w_i x_{i} y^=w0+i=1∑nwixi
线性模型的优点是速度性,并且可解释性强。缺点是表达能力弱。
为了提高普通线性模型的表达能力,可以在线性模型中加入交互项:
y ^ = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n w i , j x i x j ( 1 ) \hat{y} = w_0 + \sum_{i=1}^{n} w_i x_i + \sum_{i=1}^{n} \sum_{j=i+1}^{n} w_{i,j} x_i x_j \quad\quad (1) y^=w0+i=1∑nwixi+i=1∑nj=i+1∑nwi,jxixj(1)
注意,这里的交互项不包含 x i 2 x_i^2 xi2 这样的项。
上面的模型,实际上等价于 SVM 在 kernel 为多项式核的情况,因此上面的模型也在原论文中被称为 SVM 模型。也有人称这个模型为 LR 模型。
此模型的矩阵形式为
y ^ = w 0 + x T w + x T W x \hat{y} = w_0 + x^T w + x^T W x y^=w0+xTw+xTWx
由于不包含 x i 2 x_i^2 xi2 ,因此 W W W 的对角线为0,并且是对称矩阵(至于为什么对称,这应该是线性代数的知识吧?)。
SVM模型的缺点
加入交互项之后,虽然模型的表达能力增强,但是有下面的两个问题:
- 计算复杂度比较高。一共有 n(n-1) / 2 个参数
- 在数据很稀疏的条件下表现并不好。考虑是对类别变量进行 one-hot encoding 的情况,如果有两个类别在样本中没有同时出现过,那么 x i x j x_i x_j xixj 在样本中总是为 0,因此 ∂ y ^ ∂ w i , j ≡ 0 \frac{\partial \hat{y}}{\partial w_{i,j}} \equiv 0 ∂wi,j∂y^≡0, w i , j w_{i,j} wi,j 完全无法更新。
FM 模型
由于上述的两个问题的存在,因此进行下面的改进,
假设第 i i i 个特征可以表示为一个 k 维的向量 v i ∈ R k v_i \in \mathbb{R}^k vi∈Rk 。 k k k 是隐向量的长度,是一个需要提前给定的超参数。
而 w i , j w_{i,j} wi,j 是度量第 i 个特征和第 j 个特征的交互作用的参数。 令 w i , j = ⟨ v i , v j ⟩ w_{i,j} = \left\langle v_i, v_j \right\rangle wi,j=⟨vi,vj⟩,因此 ( 1 ) (1) (1) 式就变成了
y ^ = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n ⟨ v i , v j ⟩ x i x j ( 2 ) \hat{y} = w_{0} + \sum_{i=1}^{n} w_{i} x_{i} + \sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle v_{i}, v_{j}\right\rangle x_{i} x_{j} \quad \quad ( 2 ) y^=w0+i=1∑nwixi+i=1∑nj=i+1∑n⟨vi,vj⟩xixj(2)
此时模型的参数为
- 常数项 w 0 w_0 w0
- 线性部分的参数,合写成一个向量 w 1 , … , w n w_1, \ldots, w_n w1,…,wn
- 交互项部分的参数 v 1 , … , v n v_1, \ldots, v_n v1,…,vn ,将其按行排列得到一个矩阵 V = ( v 1 T ⋮ v n T ) ∈ R n × k V = \begin{pmatrix} v_1^T\\ \vdots\\ v_n^T \end{pmatrix} \in R^{n \times k} V=⎝⎜⎛v1T⋮vnT⎠⎟⎞∈Rn×k
这个 V V V 模型看起来貌似比较突兀,其实如果从矩阵的角度来看会比较简单。SVM 模型的问题是 W W W 的维度过大,是 O ( n 2 ) O(n^2) O(n2) 量级的,并且在许多情况下是稀疏的。因此我们可以假设,