Matrix Factorization(MF:矩阵分解)的基本原理

Matrix Factorization的基本原理

Matrix Factorization的原理比较简单,就是将一个矩阵 D 分解为 U 和 V 的乘积,即对于一个特定的规模为mn 的矩阵 D,估计出规模分别为 mk 和 n*k 的矩阵U和V,使得 U V T UV^T UVT 的值尽可能逼近矩阵 D 。一般来讲,k 的取值应该满足 k ≤ m i n { m , n } k ≤ min \{m,n\} kmin{m,n} ,这样矩阵分解才有意义。如果在推荐系统中,D 代表用户对商品的行为矩阵的话,那么 U 和 V 则分别代表 embedding, 表示的用户和商品向量。
以公式来表示的话,就是
arg min ⁡ U , V   ∑ i = 1 m ∑ j = 1 n ( D i , j − D i , j ^ ) 2 D i , j ^ = ∑ k U i , k ⋅ V j , k = ∑ k U i , k ⋅ V k , j T = U i V j T {\underset {U,V}{\operatorname {arg\,min} }}\, \sum_{i=1}^m\sum_{j=1}^n(D_{i,j} - \hat{D_{i,j}})^2 \\ \hat{D_{i,j}} = \sum_k U_{i,k} \cdot V_{j,k} = \sum_k U_{i, k} \cdot V_{k, j }^T = U_iV_j^T U,Vargmini=1mj=1n(Di,jDi,j^)2Di,j^=kUi,kVj,k=kUi,kVk,jT=UiVjT
其中 U i U_i Ui表示 U 矩阵第 i 行的向量, V j V_j Vj 表示 V 矩阵第 j 行向量。
为了限制 U,V 的取值呈现一个以0为中心的正态分布,这里对 U, V 的值加上正则项,得到目标优化项 :
L = ∑ i = 1 m ∑ j = 1 n ( D i , j − D i , j ^ ) 2   + λ ( ∣ ∣ U ∣ ∣ 2   +   ∣ ∣ V ∣ ∣ 2 )                                                   = ∑ i = 1 m ∑ j = 1 n ( D i , j − D i , j ^ ) 2   + λ ( ∑ i = 1 m ∣ ∣ U i ∣ ∣ 2   +   ∑ j = 1 n ∣ ∣ V j ∣ ∣ 2 )                                  = ∑ i = 1 m ∑ j = 1 n ( D i , j − ∑ k U i k V j k ) 2   +   λ ( ∑ i = 1 m ∑ k ∣ ∣ U i k ∣ ∣ 2   +   ∑ j = 1 n ∑ k ∣ ∣ V j k ∣ ∣ 2 )      L = \sum_{i=1}^m\sum_{j=1}^n(D_{i,j} - \hat{D_{i,j}})^2 \ + \lambda(||U||^2 \ + \ ||V||^2) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\ = \sum_{i=1}^m\sum_{j=1}^n(D_{i,j} - \hat{D_{i,j}})^2 \ + \lambda( \sum_{i=1}^m ||U_i||^2 \ + \ \sum_{j=1}^n ||V_j||^2 ) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\ = \sum_{i=1}^m\sum_{j=1}^n(D_{i,j} - \sum_k U_{ik} V_{jk})^2 \ + \ \lambda( \sum_{i=1}^m \sum_k ||U_{ik}||^2 \ + \ \sum_{j=1}^n \sum_k||V_{jk}||^2 ) \ \ \ \ L=i=1mj=1n(Di,jDi,j^)2 +λ(U2 + V2)                                                 =i=1mj=1n(Di,jDi,j^)2 +λ(i=1mUi2 + j=1nVj2)                                =i=1mj=1n(Di,jkUikVjk)2 + λ(i=1mkUik2 + j=1nkVjk2)    
这里定义: 对L求 U i U_i Ui的偏微分,得到对应梯度:
∂ L ∂ U i = − 2 ∑ j = 1 n R i j ⋅ V j + 2 λ U i = − 2 R i V + 2 λ U i      \frac{\partial L}{\partial U_i} = -2 \sum_{j=1}^n R_{ij} \cdot V_j + 2\lambda U_i \\ = -2R_iV + 2\lambda U_i \ \ \ \ UiL=2j=1nRijVj+2λUi=2RiV+2λUi    
其中 R = D − U ∗ V R = D-U*V R=DUV
将该结果扩展,可以得到对L求U和V的偏微分为:
∂ L ∂ U = − 2 R V + 2 λ U \frac{\partial L}{\partial U} = -2RV + 2\lambda U UL=2RV+2λU
∂ L ∂ V = − 2 R U + 2 λ V \frac{\partial L}{\partial V} = -2RU + 2\lambda V VL=2RU+2λV
得到梯度以后,既可以通过梯度对U,V的值进行迭代。如果是采用最简单的梯度下降的话,则迭代公式如下 :
U = U − a ∗ ∂ L ∂ U U = U - a * \frac{\partial L}{\partial U} U=UaUL
V = V − a ∗ ∂ L ∂ V V = V - a * \frac{\partial L}{\partial V} V=VaVL
其中 α 表示学习速率。

你可能感兴趣的:(机器学习)