SGD和ALS在协同过滤中的比较

机器算法验证 模型评估 随机梯度下降
2022-03-24 14:14:55

矩阵分解在协同过滤中得到了广泛的应用,简单来说,它尝试学习以下参数:

minqu,pi{u,i}(ruiquTpi)2

我们可以应用SGDALS作为学习算法,但是,正如我在这里读到的,他们说,

如果数据集很大,SGD 不实用,而 ALS 更好。

我想知道如果数据集很大,为什么 SGD 不好?我想即使它很大,我们也可以使用 mini-batch SGD,这是训练大型神经网络的广泛采用的方法,不是吗?

跟进

通过 SGD,我们每次只使用一个数据点,并且只优化整个损失的一部分,即优化,所以我们使用这个梯度部分,产生rui(ruiquTpi)2ququ~

绝对将优化,但它可能会恶化整个损失的其他部分,比如,我的意思是涉及qu~(ruiquTpi)2(rujquTpj)2ruirunqu

考虑到上述情况,我们如何保证 SGD 会收敛

2个回答

SGD 和 ALS 对于矩阵分解都非常实用,

Yehuda Koren 是 Netflix 奖(见此处)的获得者,也是 CF 矩阵分解技术的先驱,当时在雅虎实验室工作,并且是雅虎 CF 模型开发的一部分。

阅读雅虎实验室的出版物(例如这里这里),很容易看出他们大量使用 SGD,我们只能假设生产系统也是如此。

由于冷启动问题,矩阵分解通常在user_featurexmovie_features的矩阵(而不是 x 的矩阵usersmovies上完成,从而使链接中提到的论点不太相关。

SGD 在处理缺失数据方面也占上风,这是一种相当常见的情况。

综上所述,SGD 是一种非常常见的 CF 方法,我看不出它为什么不能应用于大型数据集。

看看这里的比较:

推荐人:协同过滤技术分析-Aberger

结论似乎是有偏随机梯度下降通常比 ALS 更快、更准确,除非在稀疏数据的情况下 ALS 表现更好。