《深度学习推荐系统》读后感2-机器学习

2020-11-28  本文已影响0人  西部小笼包

机器学习凭借其可解释性强,硬件环境要求低,易于快速训练和部署。在深度学习时代也有着重要的地位。此外它同时也是深度学习推荐模型的基础。
主要的核心算法有协同过滤,逻辑回归族,因子分解机族,和组合模型。

协同过滤

UserCF

首先我们会有一个用户 和 物品之间的 矩阵。 矩阵里的数值代表用户对这个物品的喜好程度。


image.png

那么用户协同过滤,就是对每一个用户来说(按行来看),在这个用户集里找到和这个用户最相似的用户。这个相似度是基于对物品栏的打分情况算出的相似度。有多种算法,比如余弦相似度,和皮尔逊相似度。(后者可以减少用户评分偏置的影响)
找到了相似的用户,把最相似的N个用户,点赞的商品,加权平均。然后把得分最高的返回给这个被推荐的用户。这里的权重是用户的相似度的值。平均的是每个物品的评价分数。

用户协同过滤的问题是,用户历史数据,也就是这个基于物品的特征向量十分稀疏。因为物品是海量的,用户打分是个别的。此外用户数远比物品数多,造成存储开销非常大,需要用户的平方的存储规模来存所有特征向量。这样找到相似用户的准确度非常低。下面引出了ItemCF

ItemCF

这里的就是按照列去看,对于物品去计算相似度。那么虽然同样是平方的级别,因为物品数量相对稳定,所以空间开销可控。同时物品的评分行为更加平均,不会出现有些冷门买家推荐不准的问题。所以电商网站最开始采用的是基于基于商品的协同过滤。

  1. 构建物品相似度的n * n矩阵
  2. 获得用户历史行为数据中心的正反馈物品列表
  3. 利用物品相似度,根据正反馈列表找出相似的TOP K 个个物品排序后推荐给用户

用户和物品的协同过滤,用户的做法有点是具备更强的社交属性,可以发现自己兴趣相似的人在看什么,适合新闻推荐场景。物品的优点适用于兴趣比较稳定的应用比如,视频推荐和电商。

矩阵分解算法

前类算法的一大问题是会造成马太效应。越是热门的商品,因为数据更丰富更有可能跟其他物品产生更高的相似度,就更可能被推荐。而一些冷门物品去基于用户的行为的特征,即使本身有相似性,因数据过少而被排在靠后的位置。
这个技术是通过在协同过滤的共现矩阵的基础上,使用更稠密的隐向量表示用户和物品,来弥补稀疏矩阵的泛化能力不足的问题。
用通俗的话来说,就是一些隐藏的特征让算法为我们找出来。这也正是斯坦福机器学习课上介绍的协同过滤算法。
它是在我们掌握了可用的特征之后,使用这些特征训练出每一个用户的参数;相反地,如果我们拥有用户的参数,我们也可以学习得出电影的特征,数据集的形式如下:


这里写图片描述

则对应的第i个电影的特征建立的代价函数的表达式为:


这里写图片描述

同样我们可以学习所有电影的特征,我们可以将代价函数的形式表示为:


这里写图片描述 image.png

协同过滤算法也称为低秩矩阵分解,它可以通过向量化的方式实现。


这里写图片描述

对于上面的数据集我们可以通过右边的矩阵表示,同时我们能够对每个用户对每个电影的评估也可以用矩阵表示:


这里写图片描述

所以我们可以将每个电影的特征逐行表示,将每个用户的参数按行表示:


image.png

上图我们可以看到每个商品X的列数,就是隐向量的特征数。同理也对用户theta的列数,也是特征数。

最后书中还提到了,用户打分偏差的问题。这个也是可以通过加入用户和物品的偏差向量进行解决。

逻辑回归

相比上面的协同过滤仅仅利用物品和用户的相互行为信息进行推荐,逻辑回归模型能够综合利用物品,用户,上下文等多种不同的特征。生成较为全面的推荐结果。同时要引入一个优化目标。比如是点击率。
先说下,什么是逻辑回归

逻辑回归是在数据服从伯努利分布的假设下,通过极大似然的方法,运用梯度下降法来求解参数,从而达到将数据二分类的目的。

这样我们就会有一组特征,比如是用户年龄,性别,物品属性,物品描述,等。还会有一个结果Y表示这种特征下的点了没点。然后开始拿数据训练模型得到参数theta。
最后我们把一组测试特征放进模型里,就会得到一个0~1之间的值,我们可以把它当做我们预测的点击率。然后根据所有物品的点击率做排序,拿最高的给用户推荐即可。

逻辑回归的问题是无法进行特征交叉,特征筛选的一系列较为高级的操作。因此不可避免造成信息损失。
特征交叉能力不强会引发著名的辛普森悖论

为了解决这个问题我们可以使用暴力穷举的方式交叉所有特征,然后得到新特征。
这样的问题是把原先的时间和空间都从n 直接上升到了 n^2 ,极大增加了训练复杂度。

为了解决这个缺陷,因子分解机算法问世。

FM模型-隐向量特征交叉

下图为之前提到的暴击枚举构建新特征的做法,也叫POLY2


image.png

FM 引入一个k 维 隐向量 可以把 原来 POLY 2 的 n^2 复杂度 优化到 nk .
同时也解决了纯逻辑回归遇到的特征组合问题。
能在非常稀疏数据的情况下做预估。训练速度快。

那么通过引入一个K维的列向量V,我们把原来枚举的权重矩阵,给分解出来2个V相乘。


image.png

随后我们把向量的点集给替换进原来的式子中


image.png

得到新的代价函数,可以发现复杂度是 O (nk)

这样做,FM通过丢失对某些具体特征组合的记忆能力,使得获得了极大的泛化能力。并且降低了训练开销。FFM 就是在FM 的基础上,对特征值加上一个特征域的概念。比如特征值NIKE的特征域是品牌。男性的特征域是性别。这样使得算法的表达能力更强,可以使得算法有更好的表现。但是计算复杂度上升到kn^2

上述的算法,还有一个限制没有突破。就是组合爆炸问题。我们可以看到2个维度进行组合,有这么多可能。如果维度上升到3,会变得超级多情况。难以在工程中实现。于是在2014年,FACEBOOK 提出了 GBDT + LR的模型来解决这个问题

GBDT + LR

这里其实2个模型分别在独立训练,然后被 PIPELINE起来 完成一个目标。GBDT是决策数组成的树林,没生成一颗新子树,会在原来森林上的残差去为拟合目标。因此在生成子树(回归树)的过程中,节点的分裂是个自然选择过程,多层的节点结构进行了有效的自动组合,可以非常高效的解决特征选择和特征组合问题。特征的维度是由决策树的深度决定的。


image.png

GBDT的缺点是容易产生过拟合,以及在特征转换的时候会丢失大量信息。

LS-PLM

CTR预估的发展过程中,LR模型是比较常用的方法,因为其计算量小容易并行,工业上应用非常广泛,同时也引发了各位大佬基于LR模型的优化改进,这一改进通常有两个方向,一个是走融合路,即GBDT+LR样式,将LR模型与其他的模型算法结合,达到优势互补的效果;另一个就是因子分解,即FM系列探索,它们的主要思想就是构造交叉特征或者是二阶的特征来一起进行训练。

除此之外也会有一些大佬给出一些新的思路,比如本文中介绍的LS-PLM模型(又叫MLR模型),这一模型是用传统的机器学习方法模仿了深度学习的结构,采用divide-and-conquer策略,将特征空间分割成若干个子区域,在每个子区域采用线性模型,最后用weighted-linear-predictions组合结果。

其灵感来自于不希望把男用户对数码产品点击率考虑进女用户对女装的点击率中。为了可以让点击率模型对不同用户群体,不同使用场景更有针对性,我们会先对物品聚类,随后再对每个分类做CTR。

首先我们需要先看一个图片:

image

我们在使用LR模型的时候,往往最容易处理图2样式,因为数据集线型可分,刚好是LR的特长,但是,对于图3样式就未必了,图3是非线性数据集,需要用非线性模型来处理,因此有了我们今天讲述的LS-PLM模型。

LS-PLM模型解决这一模型的方法即为将图3中的数据分成多个子区域,然后针对子区域单独建模,再用函数将模型融合成一个,如图:

image

那么,如何将上面的图片分切成多块呢?切分成几块比较合适的?每块的数据该用什么模型训练呢?

问题就变的很清晰了:有效切片和分组训练。

image

我们仔细观察这一模型,发现公式中有两个函数:

image

第一个即为分割函数σ(x),这一函数将原数据集分成m份,m为超参数;

第二个即为预测函数η(x),这一函数各自模拟每一小块数据集,形成上图中的Func_n函数。

然后相乘求和

该算法的优点是具有样本分片能力,可以挖掘数据中蕴藏的非线性模式。同时模型得出的特征比较少(稀疏性)使模型部署更加轻量级。

读后总结

即使在看完斯坦福机器学习课。对前3章的内容还是比较可以理解的。到后面引入了FM 和 GBDT, LS-PLM 大概只能看懂40%左右。可能需要更多学习回来三刷。

上一篇下一篇

猜你喜欢

热点阅读