论文阅读:matrix factorization techniques for recommender systems—我的第一篇博客
Authors : Xin Zhang from * University
本篇论文2009年由推荐系统领域大神Yehuda Koren团队发表,他曾是Nexflix冠军队队员。众所周知,本文也是许多大佬推荐的第一篇入门论文。
论文地址:自己去网上搜,一搜一大把。
一、前言
指出了随着Netflix比赛(百万大奖赛)的落幕,矩阵分解(matrix factorization)方法显而易见优于经典最近邻技术(classic nearest-neighbor techniques)。
随着信息洪泛时代的到来,每个人面临着大量各种各样的选择,为了更好的迎合消费者的喜好与口味,个性化推荐系统越来越得到各大电商巨头的青睐。有了大量的数据,我们可以“搞出”很多事情。
二、推荐系统策略(RECOMMENDER SYSTEM STRATEGIES)
这一部分介绍了推荐系统常见的两种策略,即内容过滤(content filtering)与协同过滤(collaborative filtering)。
内容过滤策略:建立了大量用户文档(user profile)与商品文档(product profile)。举例来说,对于一个电影推荐系统,它的product profile可能包含了某部电影的类型、参演明星、票房等等;它的user profile可能包含了人口统计信息(性别、年龄等)与通过问卷调查得到的其他信息。同时作者也指出了这种方法的缺点,就是这种方法需要收集额外的信息,但这些信息往往难以收集。采用这种策略做的比较好的有the Music Genome Project(音乐基因组计划)。
协同过滤策略:完全免费,受困于冷启动问题(cold start problem)。但优于内容过滤的是不需要建立用户/商品文档,仅仅依赖于用户的历史交易与商品评级进行推荐,通过分析大量用户间的关系以及商品间的相关性进行推荐。
作者指出,相对于内容过滤,采用协同过滤策略的推荐系统更加准确。
*1.简介协同过滤(collaborative filtering)的两大主要领域
(1)neighborhood methods:又分为面向商品方式(the item-oriented approach)与面向用户 (the user-oriented approach)。在这里如何解释邻居(neighborhood)?以面向商品方式举例,根据用户以前评分过的电影《拯救大兵瑞恩》,推荐系统开始寻早这部电影的邻居,这部电影是战争片,斯皮尔伯格电影,也是汤姆汉克斯电影,根据这三个标签开始寻找相似的邻居商品;
*(2)latent factor models:隐语义模型试图把用户与商品之间的联系解释出来,比如对于电影来说,它是戏剧还是戏剧,是面向儿童还是充满了大量暴力动作?本文采用了隐语义模型的协同过滤。
三、矩阵分解方法 MATRIX FACTORIZATION METHODS
作者首先指出大多是隐语义模型(latent factor models)的成功实现都是基于矩阵分解。这里的矩阵指的是user-item interaction matrix,即用户-项目交互矩阵,这个矩阵可能是每个用户对具体商品的评分,也可能是点赞、差评这样的简单评价,此矩阵既有可能稠密,也有可能稀疏。di
对于我们的推荐系统,我们需要各种各样不同的数据,在这个评分矩阵中,通常纵列表示不同的用户,而横列表示不同的商品(某个电影、音乐等等),最好的数据就是高质量显示反馈数据(high-quality explicit feedback),在这个矩阵中,相对每个用户而言,不可能每个用户都对所有的商品进行了评分,如果这样的话,推荐系统还有什么意义?因此,我们的这个矩阵是一个稀疏矩阵(稀疏到何种程度分情况而定)。
**矩阵分解的好处:**我们可以*添加额外信息,当显式反馈不好使或者得不到时,就可以使用隐式反馈来推断用户的偏好,隐式反馈可以根据观察用户行为、购买记录,甚至是鼠标的移动来进行推断。
四、基本矩阵分解模型 A BASIC MATRIX FACTORIZATION MODEL
对于一个用户-物品评分矩阵,我们的矩阵分解模型可以将这个评分矩阵分解成为两个部分,模型将用户群与物品群隐形因子映射到f维度,每个用户对应了一个向量p,每个物品对应了对应一个向量q,通过p与q的内积表示用户对此商品的评分。
这种方法就是传统SVD方法(奇异值分解),对于一个用户-商品矩阵而言,其最大的问题是这个矩阵中大部分单元格都是缺失的,也称为稀疏矩阵。传统SVD方法没有对这种大量缺失数据的情况进行定义,早期采用这种方法的SVD靠瞎猜去填满这些缺失的数据,手动狗头!
我们先不管缺失数据的解决办法,仅仅关注如何用这种方法如何完成任务,请看下图:
上图中的表达式是损失函数表达式,何为损失函数?
我们之前通过SVD方法对训练集中的每个参数进行了分解,并对真实评分做出了预测,即向量q的转置与向量p的乘积,也可以倒过来,都是一样的,Rui是真实的评分,再减去预测值的平方。在上图的右边,我们把这一部分成为正则项,正则项存在的意义是为了防止出现过拟合现象。
何为过拟合现象?说白了就是构建的模型在训练数据集中表现的很好,等到了测试集就会出现非常大的波动,甚至表现非常糟糕。其中括号外的λ是一个常数,在实验过程中,我们可以认为对其进行调整,以获得更好的推荐效果。括号内的部分是范数,范数是衡量一个向量大小的标准,需要详细了解的请自行百度。
五、学习算法 LEARNING ALGORITHMS
当本小白第一次看到“学习”这两个字的时候也是很懵A,最后看完了这部分才发现也就是那么一回事。
本部分内容主要介绍了为了最小化损失函数,也就是为了我们的预测更加精确所采用的方法,第一种称为随机梯度下降法(Stochastic gradient descent),第二种方法称为交替最小二乘法(Alternating least squares),作者在文中简单描述了这两种方法,这两种方法也是目前机器学习课程首先要进行介绍的方法。
废话少说,开整!
如果你是一颗推荐系统小白菜的话,惊不惊喜?意不意外?手动狗头!
下面我们就来介绍下随机梯度下降法(Stochastic gradient descent)
随机梯度下降法,那么什么是梯度?为什么又随机了呢?
所谓随机梯度下降法,是为了找到局部的最优解,对于我们的推荐系统,是想找到损失函数的最小值,找到了这个“偏差”函数最小值,那就找到了我们的最好推荐。
来!让我们讨论下前面那个图是怎么来的?
上面那个图并不是等式,而是一种迭代的形式,qi与pu通过不断地移动,以寻求局部的最优解,γ是一个参数,可以控制qi及pu移动的远近,也成为学习率,一般会设成一个非常小的值,eg:0.0001
γ后面括号内的内容是算是函数分别对qi及pu求导得到的内容,如果你高等数学学的好的话,秒懂,这部分内容也成为梯度,也可以把它理解为微分(仅作理解)。
为什么需要随机呢?正如前文所说,梯度下降仅仅只能找到具备最优解,我们在训练集中随机去找多个样本点,就可以避免掉到坑里,增大我们找到最优解的可能。
下一部分是交替最小二乘法,我就不说了,手动捂脸,老铁们自己去查,手动捂脸。
尴尬!
六、加入偏置量(ADDING BIASES)
在上文中,我们已经探讨了加入正则项防止过拟合的问题,那么,为什么还需要偏置量呢?
下次有空再更