数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
八、PMF [2008]
低维因子模型
low-dimensional factor model
是最流行的协同过滤方法之一,该模型背后的思想是:用户偏好是由少量未观察到的因子unobserved factor
决定的。在线性因子模型
$ \mathbf R = \mathbf U^\top\mathbf V $linear factor model
中,我们可以通过采用线性加权item
因子向量item factor vector
来建模用户的偏好,权重为特定于用户的系数user-specific coefficient
。例如,对于 $ m $ 个用户、 $ n $ 部电影,则偏好矩阵 $ \mathbf R\in \mathbb R^{m\times n} $ 由用户系数矩阵 $ \mathbf U^ \top\in \mathbb R^{m\times d } $ 和item
因子矩阵 $ \mathbf V\in \mathbb R^{d\times n } $ 的乘积给出:训练这个模型等价于:在给定损失函数的意义下,寻找 $ \mathbf R $ 的最佳 $ d $ 秩近似。
通常可以采用奇异值分解
Singular Value Decomposition: SVD
寻找到最小平方和损失下的低秩近似。但是, 大多数真实数据集都是非常稀疏的,即 $ \mathbf R $ 中大量数据是缺失的,此时损失函数仅仅考虑矩阵 $ \mathbf R $ 的观察值observed entry
(即非缺失值)。这种看起来非常微小的修改将导致难以解决的非凸优化问题,从而使得标准的SVD
无法解决。《Maximum-margin matrix factorization》
方法并非约束矩阵分解的秩,而是对 $ \mathbf U $ 和 $ \mathbf V $ 增加范数正则化。但是这会导致需要求解一个稀疏的半正定矩阵,这对于包含数百万个观察值的数据集是不可行的。上面提到的许多协同过滤算法已经应用于
Netflix Prize
数据集上建模用户评分。然而,由于以下两个原因,这些方法都不是很成功:- 首先,除了基于矩阵分解的方法之外,上述方法都无法很好地扩展到大型数据集。
- 其次,大多数现有算法都难以为评分很少的用户做出准确的预测。
协同过滤任务的一种常见的数据预处理方法为:删除评分数量低于指定阈值的用户(如评分数量低于
3
)。事实上,评分数量很低的用户的推荐难度更大。因此大多数协同过滤算法在MovieLens, EachMovie
等标准数据集上效果非常好,因为这些标准数据集剔除了最困难的情况。例如,Netflix
数据集非常不平衡,低频用户评分少于5
部电影、高频用户评分超过10000
部电影。由于Netflix Prize
数据集规模之大、不活跃用户之多, 使得它成为协同过滤算法更现实的benchmark
数据集。论文
《Probabilistic Matrix Factorization》
提出了概率矩阵分解Probabilistic Matrix Factorization:PMF
模型,该模型可以轻松的处理非常大的数据,并且也可以处理评分数量稀少的用户。实验表示PMF
模型在Netflix
数据集上表现良好。PMF
模型的计算复杂度和观察次数成线性,因此具有很好的scalability
。并且模型在大型、非常稀疏、非常不平衡的数据集(例如Netflix
数据集)上表现良好。- 论文进一步扩展了
PMF
模型,从而得到能够自动调整超参数的自适应PMF
,并展示如何自动控制模型容量。 - 最后,论文引入
PMF
模型的约束版本,该变种基于以下假设:对相似item
集合评分的用户可能具有相似的偏好。该假设得到的模型对于评分数量很少的用户能产生更好的推荐结果。
当多个
PMF
模型的预测与受限玻尔兹曼机模型的预测线性组合时,论文实现了0.8861
的RMSE
,这比Netflix
自己的系统得分好了将近7%
。
8.1 模型
8.1.1 PMF
假设有 $ m $ 个用户、 $ n $ 个
item
。假设评分为:从整数 $ 1,2,\cdots,K $ , $ r_{i,j}\in \{0,1,\cdots,K\} $ 为用户 $ i $ 对item
$ j $ 的评分,其中对于缺失值我们定义 $ r_{i,j} = 0 $ 。定义 $ \mathbf U\in \mathbb R^{d\times m } $ 为用户因子矩阵,第 $ i $ 列 $ \mathbf{\vec u}_i $ 代表用户 $ i $ 的因子向量。定义 $ \mathbf V\in \mathbb R^{d\times n} $ 为
item
因子矩阵,第 $ j $ 列 $ \mathbf{\vec v}_j $ 代表item
$ j $ 的因子向量。定义观测值的条件分布为:
$ p\left(\mathbf R\mid \mathbf U,\mathbf V,\sigma^2\right) = \prod_{i=1}^m\prod_{j=1}^n\left[\mathcal N(r_{i,j}\mid \mathbf{\vec u}_i\cdot \mathbf{\vec v}_j,\sigma^2)\right]^{I(i,j)} $其中:
$ \mathcal N(x\mid \mu,\sigma^2) $ 为均值为 $ \mu $ 、方差为 $ \sigma^2 $ 高斯分布的概率密度函数,其中 $ \sigma^2 $ 为噪音方差。
$ I(i,j) $ 为示性函数:
$ I(i,j) = \begin{cases} 1,& r_{i,j} \gt 0\\ 0,& r_{i,j} = 0 \end{cases} $
进一步的,我们假设用户因子向量和
$ p(\mathbf U\mid \sigma_U^2) = \prod_{i=1}^m \mathcal N(\mathbf{\vec u}_i\mid \mathbf{\vec 0},\sigma_U^2\mathbf I)\\ p(\mathbf V\mid \sigma_V^2) = \prod_{j=1}^n \mathcal N(\mathbf{\vec v}_j\mid \mathbf{\vec 0},\sigma_V^2\mathbf I) $item
因子向量采用零均值的球形高斯先验分布spherical Gaussian
:其中 $ \sigma_U^2,\sigma_V^2 $ 为先验方差。
则后验概率分布的对数为:
$ \log p(\mathbf U,\mathbf V\mid \mathbf R,\sigma^2,\sigma_U^2,\sigma_V^2) = - \frac{1}{2\sigma^2}\sum_{i=1}^m\sum_{j=1}^n I(i,j)(r_{i,j} - \mathbf{\vec u}_i\cdot \mathbf{\vec v}_j)^2 - \frac{1}{2\sigma_U^2}\sum_{i=1}^m \mathbf{\vec u}_i\cdot \mathbf{\vec u}_i\\ - \frac{1}{2\sigma_V^2}\sum_{j=1}^n \mathbf{\vec v}_j\cdot \mathbf{\vec v}_j - \frac{1}{2}\left(\left(\sum_{i=1}^{m}\sum_{j=1}^n I(i,j)\right)\log \sigma^2 + md\log \sigma_U^2 + nd\log\sigma_V^2\right) +C $其中 $ C $ 为不依赖于任何参数的常数。
当固定 $ \sigma^2,\sigma^2_U,\sigma^2_V $ 时,最大化后验分布等价于最小化带正则化项的误差平方和:
$ \mathcal L = \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^n I(i,j)(r_{i,j} - \mathbf{\vec u}_i\cdot \mathbf{\vec v}_j)^2 + \frac{\lambda_U}{2}\sum_{i=1}^m ||\mathbf{\vec u}_i||^2+ \frac{\lambda_V}{2}\sum_{j=1}^n ||\mathbf{\vec v}_j||^2 $其中: $ \lambda_U = \frac{\sigma^2}{\sigma^2_U}, \lambda_U = \frac{\sigma^2}{\sigma^2_V} $ 为正则化系数; $ ||\cdot||^2 $ 为
Frobenius
范数。我们可以通过对 $ \mathcal L $ 进行梯度下降从而求解参数 $ \mathbf U,\mathbf V $ 。
PMF
模型可以视为SVD
模型的概率扩展。当我们能够观察到所有的user-item
评分时,在先验方差 $ \sigma_U^2,\sigma_V^2 $ 无穷大的限制下,PMF
模型退化为SVD
模型。事实上,上述推导过程存在一个问题:预测结果 $ \mathbf{\vec u}_i\cdot {\mathbf v}_j $ 容易超出评分范围。因此
$ g(x) = \frac{1}{1+\exp(-x)}\\p(\mathbf R\mid \mathbf U,\mathbf V,\sigma^2) = \prod_{i=1}^m\prod_{j=1}^n\left[\mathcal N(r_{i,j}\mid g(\mathbf{\vec u}_i\cdot \mathbf{\vec v}_j),\sigma^2)\right]^{I_(i,j)} $PMF
使用logistic
函数来限定评分范围:在训练过程中我们将评分 $ 1,2,\cdots,K $ 使用函数 $ f(x) = \frac{x-1}{K-1} $ 映射到区间
[0,1]
;在预测过程中我们使用 $ (K-1)\times (\mathbf{\vec u}_i\cdot {\mathbf v}_j) + 1 $ 将结果映射回评分。可以通过最速下降法优化
PMF
的目标函数,其计算复杂度和观察值的规模成线性关系。在
Matlab
实现中,当 $ d=30 $ 时我们可以在不到一个小时内训练整个Netflix
数据集的1
个epoch
。训练
PMF
模型的高效率来自于:仅找到模型参数和超参数的点估计,而不是推断他们的完整后验分布。如果我们采用完全贝叶斯方法,则计算上更为昂贵,但是初步结果强烈表明:对PMF
模型的完全贝叶斯处理将导致预测准确性的显著提高。
8.1.2 自适应 PMF
模型容量对于
PMF
模型的泛化至关重要。超参数 $ d $ 可以控制模型容量,当 $ d $ 足够大时
PMF
模型能够逼近任何给定的矩阵。因此,控制PMF
模型容量的最简单直接的方法是限制 $ d $ 的大小。但是,当数据集不平衡时(即观察值的规模在不同的行或者列之间显著不同),则该方法行不通。因为无论怎么选择 $ d $ ,总会对于某些因子向量过高、对另外一些因子向量过低。因为某些因子可能需要大容量来包含足够多的信息,而另一些因子只需要很小的容量来包含少量信息。
另一种方式是采用正则化来控制模型容量,如 $ \lambda_U,\lambda_V $ 。
选择合适正则化系数,最简单直接的方法是进行超参数搜索,如
GridSearch, RandomSearch
。这种方式的主要缺点是计算量太大:除了训练最终的模型之外,我们必须训练多个模型来确定最佳的正则化系数。
这里我们提出了一个自动确定
$ \log p(\mathbf U,\mathbf V,\sigma^2,\Theta_U,\Theta_V\mid \mathbf R) = \log p(\mathbf R\mid \mathbf U,\mathbf V,\sigma^2) + \log p(\mathbf U\mid \Theta_U) + \\ \log p(\mathbf V\mid \Theta_V) + \log p(\Theta_U) + \log p(\Theta_V) + C $PMF
正则化系数的变种,称作自适应PMF
。这种方式可以自动选择合适的正则化系数,并且不会显著影响模型训练时间。其基本原理是:引入超参数的先验分布,并最大化模型在参数 $ \mathbf U,\mathbf V $ 和超参数 $ \sigma_U^2,\sigma_V^2 $ 上的对数后验分布:其中:
$ C $ 是和任何参数无关的常数。
$ \Theta_U,\Theta_V $ 分别为针对用户因子向量 、
item
因子向量的先验分布的超参数。它们本身也是一个随机变量,分别服从分布 $ p(\Theta_U),p(\Theta_V) $ 。当先验分布 $ p(\mathbf U\mid \Theta_U),p(\mathbf V\mid \Theta_V) $ 为球形高斯分布时,这会得到一个常规模型并能够自动选择 $ \lambda_U $ 和 $ \lambda_V $ 。假设 $ p(\Theta_U) $ 和 $ p(\Theta_V) $ 为均匀分布(其实 $ \Theta_U $ 就是 $ \sigma_U^2 $ , $ \Theta_V $ 就是 $ \sigma_V^2 $ ), 此时有:
$ \log p(\mathbf U,\mathbf V,\sigma^2,\Theta_U,\Theta_V\mid \mathbf R) = - \frac{1}{2\sigma^2}\sum_{i=1}^m\sum_{j=1}^n I(i,j)(r_{i,j} - \mathbf{\vec u}_i\cdot \mathbf{\vec v}_j)^2 - \frac{1}{2\sigma_U^2}\sum_{i=1}^m \mathbf{\vec u}_i\cdot \mathbf{\vec u}_i\\ - \frac{1}{2\sigma_V^2}\sum_{j=1}^n \mathbf{\vec v}_j\cdot \mathbf{\vec v}_j - \frac{1}{2}\left(\left(\sum_{i=1}^{m}\sum_{j=1}^n I(i,j)\right)\log \sigma^2 + md\log \sigma_U^2 + nd\log\sigma_V^2\right) +C^\prime $其中 $ C^\prime = C + \log p(\sigma_U^2) + \log p(\sigma_V^2) $ 为常数。
根据偏导数为零,则我们得到超参数的闭式解: $ \sigma_U^2 = \frac{\sum_{i=1}^m\mathbf{\vec u}_i\cdot \mathbf{\vec u}_i}{md},\quad \sigma_V^2 = \frac{\sum_{j=1}^n\mathbf{\vec v}_j\cdot \mathbf{\vec v}_j}{nd} $
当先验分布 $ p(\mathbf U\mid \Theta_U),p(\mathbf V\mid \Theta_V) $ 为高斯分布时,如果 $ \mathbf U $ 和 $ \mathbf V $ 固定,则可以求解最佳超参数的闭式解。因此,我们可以在训练期间通过交替求解超参数、优化参数。
- 在求解超参数时固定参数 $ \mathbf U,\mathbf V $ ,此时超参数有闭式解。
- 在求解优化参数时固定超参数,此时通过梯度下降法求解。
当先验分布是混合高斯分布时,我们可以通过执行单步
EM
算法来更新超参数(参数的更新仍然是通过梯度下降法)。
8.1.3 约束 PMF
上述
PMF
模型存在一个问题:对于评分非常少的用户,他们的用户因子向量将趋近于先验均值(或者说用户因子向量的均值),因此这些用户的预测评分将接近所有评分的均值。这里我们提出了一种约束用户因子向量的方法,该方法对于评分稀少的用户具有很强的效果。
定义 $ \mathbf W \in \mathbb R^{d\times n} $ 为一个潜在的相似约束矩阵
$ \mathbf{\vec u}_i = \mathbf{\vec y}_i + {\sum_{k=1}^n s_{i,k}\mathbf{\vec w}_k} \\ s_{i,k} = \frac{I(i,k)}{\sum_{k^\prime=1}^{n}I(i,k^\prime)} $latent similarity constraint matrix
,定义用户 $ i $ 的因子向量为:其中 $ \mathbf{\vec w}_k\in \mathbb R^d $ 为矩阵 $ \mathbf W $ 的第 $ i $ 列。
直观的看:
- 矩阵 $ \mathbf W $ 的第 $ i $ 列捕获了:如果用户对第 $ i $ 个
item
评分,则用户因子先验均值受到的影响。因此,看过相同(或者相似)电影的用户,其用户因子向量将具有相似的先验分布。如果两个用户评分的item
集合相同,则他们具有相同的用户因子向量。 - $ \mathbf{\vec y}_i $ 可以视为这种先验分布的一个偏移量。
事实上,这里假设有 $ \mathbf W $ 和 $ \mathbf V $ 都作为
item
因子向量,但是 $ \mathbf W $ 用于表达用户、 $ \mathbf V $ 用于表达item
。下图中,左图为无约束
PMF
,此时先验均值固定为零,因此 $ \mathbf{\vec u}_i = \mathbf{\vec y}_i $ ;右图为约束PMF
,此时先验分布非零。(注意下图为原始论文, $ i,j,k $ 的范围与我们这里表述的不一致)。- 矩阵 $ \mathbf W $ 的第 $ i $ 列捕获了:如果用户对第 $ i $ 个
我们定义观察值的条件分布为:
$ p(\mathbf R\mid \mathbf Y,\mathbf V,\mathbf W,\sigma^2) = \prod_{i=1}^m\prod_{j=1}^n\left[\mathcal N\left(r_{i,j}\mid g\left(\left(\mathbf{\vec y}_i + {\sum_{k=1}^n s_{i,k}\mathbf{\vec w}_k} \right)\cdot \mathbf{\vec v}_j\right),\sigma^2\right)\right]^{I({i,j})} $假设 $ \mathbf W $ 服从一个零均值的球形高斯分布:
$ p(\mathbf W\mid \sigma_W) = \prod_{k=1}^n \mathcal N\left(\mathbf{\vec w}_k\mid \mathbf{\vec 0},\sigma_W^2\mathbf I\right) $则有:最大化对数后验概率,等价于最小化带正则化项的误差平方和:
$ \mathcal L = \frac 12\sum_{i=1}^m\sum_{j=1}^n I({i,j}) \left(r_{i,j} - g\left(\left(\mathbf{\vec y}_i + {\sum_{k=1}^n s_{i,k}\mathbf{\vec w}_k} \right)\cdot \mathbf{\vec v}_j \right)\right)^2\\ + \frac{\lambda_Y}{2}\sum_{i=1}^m ||\mathbf{\vec y}_i||^2 + \frac{\lambda_V}{2}\sum_{j=1}^n||\mathbf{\vec v}_j||^2 + \frac{\lambda_W}{2}\sum_{k=1}^n||\mathbf{\vec w}_k||^2 $其中:
$ \lambda_Y = \frac{\sigma^2}{\sigma_Y^2},\quad\lambda_V = \frac{\sigma^2}{\sigma_V^2},\quad\lambda_W = \frac{\sigma^2}{\sigma_W^2} $我们可以对 $ \mathcal L $ 执行梯度下降来求解参数 $ \mathbf Y, \mathbf V,\mathbf W $ ,训练时间和观察值的数量成线性比例。
实验表明,这种方式的效果比简单的无约束
PMF
模型效果好得多,尤其是针对评分数量稀少的用户。
8.2 实验
数据集:
Netflix
数据集。该数据集收集了1998
年10
月到2005
年12
月之间Netflix
网站上用户的所有评分数据。训练数据集包含来自
480189
个 随机选择的匿名用户的100480507
个评分,涉及17770
个电影标题。作为训练数据的一部分,Netflix
还提供了包含1408395
个评分的验证数据集。除了训练集和验证集之外,
Netflix
还提供了一个包含2817131
个user-movie pair
的测试集,这些pair
是从训练集中部分用户的最新评分中选择的。Netflix
给出了测试集中一半数据的评分,另一半数据的评分是未给出的。研究人员需要向官方上传另一半(未知部分)数据的评分结果,并由官方返回该部分的RMSE
指标。这种方式是为了防止模型对测试集过拟合。作为Baseline
,Netflix
给出了他们自己模型在测试集上的RMSE
指标为0.9514
。为了进一步了解不同算法的性能,我们通过随机选择
50000
个用户和1850
部电影,从而创建了一个更小、难度更高的数据集。这个小数据集包含1082982
个训练数据、10462
个验证数据,其中训练数据中超过50%
的用户的评分数量少于10
。
训练配置:为加快训练速度我们采用随机梯度下降,其中
batch size = 100000
。为选择合适的学习率和动量,我们在各种超参数组合上进行实验,最终选择学习率为
0.005
、动量为0.9
,因为这组配置对所有维度 $ d $ 都工作良好。
8.2.1 自适应 PMF
为评估自适应
PMF
模型的性能,我们选择 $ d=10 $ 。选择如此小的维度是为了证明:即使特征维度很低,类似的SVD
模型仍然可能过拟合,并且通过自动正则化会有一些性能的提升。模型:
SVD
模型:该模型的损失函数为观察值误差的平方和,其中没有采用任何形式的正则化。固定正则化系数的
PMF
模型:模型损失函数为观察值误差的平方和,带固定系数的正则化。其中PMF1
的正则化系数为 $ \lambda_U = 0.01, \lambda_V = 0.001 $ ,PMF2
的正则化系数为 $ \lambda_U = 0.001,\lambda_V = 0.0001 $ 。自适应
PMF
模型:模型损失函数为观察值误差的平方和,带正则化。其中PMFA1
的 $ p(\mathbf U\mid \Theta_U) $ 和 $ p(\mathbf V\mid \Theta_V) $ 为球形高斯先验分布;PMFA2
的 $ p(\mathbf U\mid \Theta_U) $ 和 $ p(\mathbf V\mid \Theta_V) $ 为对角协方差的高斯先验分布。在这种情况下,自适应先验具有可调整的均值。
先验参数和噪音协方差每隔
10
到100
个 $ \mathbf U,\mathbf V $ 的更新才更新一次。
我们在完整的
Netflix
训练集上训练模型,然后评估模型在Netflix
验证集上的效果。可以看到:SVD
模型的表现几乎和具有适当正则化的PMF
模型(PMF2
)效果一样好,但是SVD
模型在训练结束之前陷入严重过拟合。PMF1
模型虽然没有陷入过拟合,但是它仅达到0.9430
的RMSE
,明显欠拟合。自适应
PMF
明显优于其它模型。这里没有给出PMFA2
(RMSE
为0.9204
),因为它的曲线和PMFA1
几乎相同(RMSE
为0.9197
)。这表明:通过自适应先验来自动正则化在实践中效果良好。我们比较了 $ d=10 $ (左图)和 $ d=30 $ (右图),结果表明:使用自适应先验而导致性能的差距,可能随着因子维度 $ d $ 的增加而增加。
另外,尽管对角协方差矩阵的使用并未比球形协方差矩阵的版本有明显改善,但是对角协方差可能非常适合自适应
PMF
训练的greedy
算法,在该算法中模型每次学习一个因子向量。
8.2.2 约束PMF
在约束
PMF
上我们使用30
维特征,因为 $ d=30 $ 可以使得验证集获得最佳效果。对于PMF
和约束PMF
我们设置正则化参数为 $ \lambda_U=\lambda_Y=\lambda_V=\lambda_W = 0.002 $ 。我们在完整的
Toy
训练集(我们构造的小数据集)上训练模型,然后评估模型在Toy
验证集上的效果。可以看到:SVD
模型明显的陷入了过拟合。约束
PMF
模型相比无约束PMF
模型具有更好的性能,并且收敛速度更快。右图给出了不同评分数量的用户的评估结果。可以看到:
- 对于训练集中评分数量少于
5
个的一组用户,PMF
模型性能与均值算法(电影 $ j $ 在所有用户上评分的均值作为用户 $ i $ 对电影 $ j $ 评分的预测结果)的性能相同。 - 约束
PMF
模型在评分较少的用户上的性能要好得多。 - 随着评分数量的增加,
PMF
和约束PMF
的性能相差无几。
- 对于训练集中评分数量少于
约束
$ \mathbf{\vec u}_i = \mathbf{\vec y}_i + {\sum_{k=1}^n s_{i,k}\mathbf{\vec w}_k} $PMF
模型的另一个有趣的性质是:即使我们仅知道用户曾经评分的电影,但是不知道评分的值,模型也能够利用该信息从而得到更好的效果。对于用户 $ i $ 如果已知它对电影 $ j $ 产生评分,即使不知道评分大小, 它对于 $ \mathbf{\vec u}_i $ 也是有贡献:对于我们的
toy
数据集,我们随机增加了额外的50000
个用户来训练,并丢弃这些用户的实际评分。最终约束PMF
方法在验证集上的RMSE
为1.0510
,而简单平均算法的RMSE
为1.0726
。这表明:仅了解用户评分的电影而不知道具体评分,仍然可以帮助我们更好的建模用户的偏好。
约束
PMF
在整个Netflix
数据集上的表现与Toy
数据集的结果相似。对于PMF
和约束PMF
我们设置正则化参数为 $ \lambda_U=\lambda_Y=\lambda_V=\lambda_W = 0.001 $ 。结果表明:
SVD
模型的RMSE
为0.9280
,大约10
个epoch
开始过拟合。约束
PMF
模型对于评分数量很少的用户可以有更好的泛化,其中训练集中超过10%
的用户其评分不足20
个;随着评分数量的增加,PMF
和约束PMF
性能趋同。考虑到
Netflix
数据还有一个额外的信息来源:Netflix
会告诉我们测试集中还有哪些user-movie pair
,因此我们还知道一个信息:用户已经评分、但是不知道评分大小的电影。约束
PMF
可以很容易考虑该信息,如右图所示,这将进一步提高模型的性能。
当我们将
PMF
、自适应PMF
、约束PMF
线性组合在一起时,我们在测试集上达到了0.8970
的RMSE
,这比Netflix
官方Baseline 0.9514
提高了将近6%
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论