als算法参数_CF的ALS算法推导

在上一篇中介绍了矩阵微分,现在就来牛刀小试一下。早些时候子龙问过我 Collaborative Filtering for Implicit Feedback Datasets这篇论文里的公式推导,在这里重新解一遍。

论文里给出的目标函数为:

$$

\min_{x_*,y_*}\left\{\sum_{u,i}c_{ui}(p_{ui}-x_u^Ty_i)^2+\lambda(\sum_u||x_u||^2+\sum_i||y_i||^2)\right\}\,\,\,\,(1)

$$

模型的来历不是今天的重点,简单描述一下各个变量的含义,其中$u$代表user,$i$代表item,$x_u\in R^f$,$y_i\in R^f$,未出现的变量 $r_{ui}$ 表示user对item的“消费”度量,

$$

p_{ui}=

\begin{cases}

1 & r_{ui}>0 \\

0 & r_{ui}=0 \\

\end{cases}

$$

表征user是否对item有偏好,$c_{ui}=1+\alpha r_{ui}$ 表征$p_{ui}$ 的置信度。

假设user的数目为$m$,item的数目为$n$,则目标函数包含的项大约有$m\cdot n$,通常数量非常巨大,一些常见的优化算法比如SGD不再适合,论文中采用了ALS(alternating-least-squares)算法,这是一种迭代的方法,第一步先固定所有的$y_i$,求解最优的$x_u$;第二步固定所有的$x_u$,求解最优的$y_i$,依次迭代。

我们先看第一步,当固定所有$y_i$后,(1)式转化为

$$

\min_{x_*}\left\{\sum_{u,i}c_{ui}(p_{ui}-x_u^Ty_i)^2+\lambda\sum_u||x_u||^2\right\}\\

=\sum_u\min_{x_u}\left\{\sum_{i}c_{ui}(p_{ui}-x_u^Ty_i)^2+\lambda||x_u||^2\right\}\\

=\sum_u\min_{x_u}L_u(x_u)

$$

问题简化为求每个$L_u(x_u)$ 函数的最小值。

对每个$u$,我们定义一个$n\times n$的对角矩阵$C^u$,其中$C_{ii}^u=c_{ui}$,定义向量$p(u)\in R^n$包含所有的$p_{ui}$。激动人心的时刻来到了,我们开始推导函数$L_u(x_u)$ 对$x_u$的微分

$$

L_u(x_u)=\sum_{i}c_{ui}(p_{ui}-x_u^Ty_i)^2+\lambda||x_u||^2\\

=

\sum_{i}c_{ui}(y_i^Tx_u-p_{ui})^2+\lambda x_u^Tx_u\\

dL_u=\sum_{i}2c_{ui}(x_u^Ty_i-p_{ui})y_i^Tdx_u+2\lambda x_u^Tdx_u\\

=2\left(\sum_{i}c_{ui}x_u^Ty_iy_i^T-\sum_{i}c_{ui}p_{ui}y_i^T+\lambda x_u^T\right)dx_u\\

$$

$L_u(x_u)$ 取极值,须$dL_u=0$,有

$$

\sum_{i}c_{ui}x_u^Ty_iy_i^T-\sum_{i}c_{ui}p_{ui}y_i^T+\lambda x_u^T=0\\

\Rightarrow \sum_{i}c_{ui}y_iy_i^Tx_u+\lambda Ix_u=\sum_{i}c_{ui}p_{ui}y_i\\

\Rightarrow \left(\sum_{i}c_{ui}y_iy_i^T+\lambda I\right)x_u=\sum_{i}c_{ui}p_{ui}y_i\,\,\,\,(2)

$$

按论文中的符号定义,设$Y^T=(y_1,\cdots,y_n)$,有

$$

\sum_{i}c_{ui}y_iy_i^T=(c_{u1}y_1,\cdots,c_{un}y_n)

\left(\begin{array}{c}

y_1^T \\

\vdots \\

y_n^T \\

\end{array}\right)\\

=(y_1,\cdots,y_n)

\left(\begin{array}{ccc}

c_{u1} & & \\

& \ddots & \\

& & c_{un} \\

\end{array}\right)

\left(\begin{array}{c}

y_1^T \\

\vdots \\

y_n^T \\

\end{array}\right)\\

=Y^TC^uY

$$

类似地,有 $\sum_{i}c_{ui}p_{ui}y_i=Y^TC^up(u)$,因此

$$

(2)\Rightarrow (Y^TC^uY+\lambda I)x_u=Y^TC^up(u)\\

\Rightarrow x_u=(Y^TC^uY+\lambda I)^{-1}Y^TC^up(u)

$$

正是论文中的结果。对于固定$x_u$求$y_i$完全类似,不再详述。

你可能感兴趣的:(als算法参数)