- 构建企业级推荐系统:算法、工程实现与案例分析
- 刘强
- 348字
- 2021-08-06 14:59:58
6.3.1 利用SGD来求解矩阵分解
假设用户u对标的物v的评分为ruv,u、v嵌入k维隐因子空间的向量分别为pu、qv,我们定义真实评分和预测评分的误差为euv,公式如下:

式(6-1)对应的最优化问题的目标函数如下:

f(pu,qv)对pu,qv求偏导数,具体计算如下:


有了偏导数,再沿着导数(梯度)相反的方向更新pu、qv,最终我们可以采用如下公式来更新pu、qv。

上式中为步长超参数,也称为学习率(导数前面的系数2可以吸收到参数中),取大于零的较小值。pu、qv先可以随机取值,通过上述公式不断更新pu、qv,直到收敛到最小值(一般是局部最小值),最终求得所有的pu、qv。
SGD方法一般可以快速收敛,但是对于海量数据,单机无法承载这么大的数据量,所以在单机上是无法或者在较短的时间内无法完成上述迭代计算的,这时可以采用ALS方法来求解,该方法可以非常容易地进行分布式拓展。