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\}
k≤min{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=1∑mj=1∑n(Di,j−Di,j^)2Di,j^=k∑Ui,k⋅Vj,k=k∑Ui,k⋅Vk,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=1∑mj=1∑n(Di,j−Di,j^)2 +λ(∣∣U∣∣2 + ∣∣V∣∣2) =i=1∑mj=1∑n(Di,j−Di,j^)2 +λ(i=1∑m∣∣Ui∣∣2 + j=1∑n∣∣Vj∣∣2) =i=1∑mj=1∑n(Di,j−k∑UikVjk)2 + λ(i=1∑mk∑∣∣Uik∣∣2 + j=1∑nk∑∣∣Vjk∣∣2)
这里定义: 对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 \ \ \ \
∂Ui∂L=−2j=1∑nRij⋅Vj+2λUi=−2RiV+2λUi
其中
R
=
D
−
U
∗
V
R = D-U*V
R=D−U∗V
将该结果扩展,可以得到对L求U和V的偏微分为:
∂
L
∂
U
=
−
2
R
V
+
2
λ
U
\frac{\partial L}{\partial U} = -2RV + 2\lambda U
∂U∂L=−2RV+2λU
∂
L
∂
V
=
−
2
R
U
+
2
λ
V
\frac{\partial L}{\partial V} = -2RU + 2\lambda V
∂V∂L=−2RU+2λV
得到梯度以后,既可以通过梯度对U,V的值进行迭代。如果是采用最简单的梯度下降的话,则迭代公式如下 :
U
=
U
−
a
∗
∂
L
∂
U
U = U - a * \frac{\partial L}{\partial U}
U=U−a∗∂U∂L
V
=
V
−
a
∗
∂
L
∂
V
V = V - a * \frac{\partial L}{\partial V}
V=V−a∗∂V∂L
其中 α 表示学习速率。