深度学习-推荐系统 研读记录(王喆)

第一章:前深度学习时代-推荐系统的进化之路
1 关于传统推荐系统的演化

传统推荐模型的演化关系图:(该章内容会根据图中模型依次讲解)

2 关于推荐系统的技术架构示意图:

3 Begin
1 对图1-4架构示意图的理解

数据部分:原始数据的出口分为三个方面

  • 生成模型训练所需的特征以及评价模型的特征
  • 由原始特征根据模型需要生成衍生特征
  • 生成的衍生特征可以作为统计型数据

2 离线训练与在线训练的优缺点:

  • 离线因为可以利用全量的样本和特征可以是模型逼近全局最优点
  • 在线更新可以准实时的提取新样本的信息,更快反应新数据的变化趋势,满足模型的实时性需求

3 关于召回层,排序层以及补充策略与算法层:

  • 召回层也就是粗排,快速从海量数据中找到有用的特征
  • 排序层则是利用排序模型对初筛的候选集进行精排序
  • 补充策略与算法层:对排序层后的结果再排序,这是为了兼顾一些指标,比如:多样性,流行度,新鲜度,冷启动等现实存在的问题,之后才会将推荐结果推荐到用户页面。
2 最初也最经典的推荐算法:协同过滤(2003年亚马逊提出)

UserCF 基于用户的协同过滤

商品A商品B商品C商品D
用户A×
用户B××
用户C×
用户D×
用户X×

其中√表示喜欢,×表示不喜欢,⚪表示不知道 ?表示推荐结果

如果将上面的用户-商品表用矩阵表示,1代表喜欢,-1表示不喜欢,0表示不知道
KaTeX parse error: Undefined control sequence: \matrix at position 9: \left[ \̲m̲a̲t̲r̲i̲x̲{ 1 & -1 & 1 …
注:矩阵列表示商品,行表示用户

  1. 我们从表中去理解,商品A用户X表示喜欢,那么同样喜欢商品A的用户还有A和C,然后看商品B,跟用户X一样同喜欢商品B的只有用户C,那么四个商品中两个兴趣都重合,那么商品C用户C是不喜欢的,那么我们推测用户X可能也不喜欢
  2. 用矩阵去计算用户之间的相似度
    • 在1中我们可以逐个分析,但是在大数据场景,显然不现实那么我们将矩阵每行作为用户向量,来计算用户之间的相似度,主要度量方法有余弦相似度,皮尔逊相关系数等方法度量相似度

同理可得itemCF:基于物品的协同过滤

上述基于用户的协同过滤表与矩阵同样适用于分析基于物品的协同过滤,只不过是以行为用户向量,改成以列为物品向量去计算相似度。

  1. userCF与itemCF的应用场景:
    • userCF是根据用户来推荐那么就需要数据中含有较强的社交特性,适用场景比如新闻类的推荐,新闻本身兴趣点是广泛的,而且比较及时,与带有热点,更能推荐给兴趣相同的朋友
    • itemCF更适用于兴趣变化较为稳定的应用,比如亚马逊的电商场景,可能用户某段时间对某种商品感兴趣那么我们基于物品进行推荐,又比如视频推荐,当用户喜欢的视频类型稳定之后,就可以根据类型进行推荐。
  2. 协同过滤的缺点:
    • 由于热门的物品具有很强的头部效应,容易与大量物品产生相似性,反之尾部的物品由于特征向量稀疏,很少与其他商品产生相似性,那么热门物品就很容易被推荐,尾部物品很少被推荐
    • 总结:推荐结果的头部效应较为明显,处理稀疏向量的能力弱
3 矩阵分解算法-协同过滤的进化
  1. 隐向量的提出:矩阵分解算法提出的一个概念是为每个用户和物品都生成一个隐向量,将用户和物品定位到隐向量的表示空间上,计算在该空间上用户和物品之间的距离来进行推荐。

  2. 如何寻找隐向量:通过分解协同过滤生成的共现矩阵(用户对物品评分的表,类比上方表格下的矩阵)得到用户和物品的隐向量

  3. 矩阵分解的过程:

在这里插入图片描述

  1. 矩阵分解算法将m×n维的共现矩阵分解成m×k维的用户矩阵U,和k×n维的物品矩阵V相乘的形式,其中m是用户数量,n是物品数量,k是隐向量的维度,k的大小决定了隐向量表达能力的强弱,因为k取值太小,所能包含的信息太少,泛化能力强,k值越大,包含的信息天多,泛化能力弱

    • 基于用户矩阵U和物品矩阵V,用户u对物品i的预估评分用公式表达:
      r ^ = q i T p i (0.0) \hat{r} = q_{i}^Tp_{i}\tag{0.0} r^=qiTpi(0.0)

    • 其中Pu是用户u在用户矩阵U中对应的行向量,qi是物品i在物品矩阵V中对应的列向量

  2. 如何矩阵分解?

    1. ED 特征值分解(只能应用于非零方阵)

      注:如果一个非零向量v是方阵A的特征向量,将一定可以表示成下面形式,而λ是特征向量v对应的特征值:特征值分解是将一个矩阵分解成下面的形式(-1表示矩阵的逆矩阵):
      A v = λ v (1.1) Av = \lambda{v} \tag{1.1} Av=λv(1.1)

      A = Q Σ Q − 1 (1.2) A = QΣQ^{-1}\tag{1.2} A=QΣQ1(1.2)

      其中Q是这个矩阵甲的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。一个矩阵的一组特征向量是一组正交向量。(高数中求解矩阵的特征值与特征向量的问题)

      特征值与特征向量:矩阵特征值_百度百科 (baidu.com)

      1 只有方阵才有特征向量 2 特征值是非零列向量,对应统一特征值的特征向量有无穷多个

    2. SVD奇异值分解

      注:正交矩阵,即一个n阶矩阵满足该矩阵乘以该矩阵结果为单位矩阵,则该矩阵为正交矩阵(T表示转置),公式表达是:
      A T A = E 或 者 A A T = E A^TA = E 或者 AA^T=E ATA=EAAT=E
      SVD的表达式为:
      A = U Σ V T (2.1) A = UΣV^{T}\tag{2.1} A=UΣVT(2.1)

在这里插入图片描述

  1. 假设A是一个M* N的矩阵,那么得到的U是一个M* M的方阵(里面的向量是正交的,U里面的向量称为左奇异向量),Σ是一个M *
    N的矩阵(除了对角线的元素都是0,对角线上的元素称为奇异值),V’(V的转置)是一个N *
    N的矩阵,里面的向量也是正交的,V里面的向量称为右奇异向量)如上图

  2. 那么奇异值和特征值是怎么对应起来的呢?首先,我们将一个矩阵A的转置 A^T ,将会得到一个方阵,我们用这个方阵求特征值可以得到:
    ( A T A ) v i = λ i v i (2.2) {(A^TA)}v_{i} = \lambda_{i}{v}_{i} \tag{2.2} (ATA)vi=λivi(2.2)

  3. 这里得到的v,就是我们上面的右奇异向量。此外我们还可以得到
    σ i = λ i (2.3) \sigma_{i} = \sqrt{\lambda_{i}}\tag{2.3} σi=λi (2.3)
    μ i = 1 σ i A v i (2.4) \mu_{i} = \frac{1}{\sigma_{i}}Av_{i}\tag{2.4} μi=σi1Avi(2.4)

    • 这里的σ就是上面说的奇异值,u就是上面说的左奇异向量。奇异值σ跟特征值类似,在矩阵Σ中也是从大到小排列,而且σ的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前r大的奇异值来近似描述矩阵,这里定义一下部分奇异值分解
      A m ∗ n ≈ U m ∗ r Σ r ∗ r V r ∗ n T (2.5) A_{m*n} \thickapprox U_{m*r}Σ_{r*r}V_{r*n}^{T}\tag{2.5} AmnUmrΣrrVrnT(2.5)

    • r是一个远小于m、n的数,这样矩阵的乘法看起来像是下面的样子:

在这里插入图片描述 1 右边的三个矩阵相乘的结果将会是一个接近于A的矩阵,在这儿,r越接近于n,则相乘的结果越接近于A。而这三个矩阵的面积之和(在存储观点来说,矩阵面积越小,存储量就越小)要远远小于原始的矩阵A,我们如果想要压缩空间来表示原矩阵A,我们存下这里的三个矩阵:U、Σ、V就好了。
2 关于数学部分的推导就到此为止,个人数学功底有限。
参考博客:机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用 - LeftNotEasy - 博客园 (cnblogs.com)
3 奇异值分解的缺点
4 奇异值分解需要原始的共现矩阵是稠密的,但是互联网场景下大部分用户的行为历史都是非常少的,也就是共现矩阵比较稀疏,所以如果在该场景下使用需要进行填充
5 奇异值分解的计算复杂度太高,而互联网的数据场景动辄百万千万,计算成本太高。因此衍生出最后一个最常用算法

  • 梯度下降法

    • 公式0.0为求解矩阵分解的目标函数,该函数的目的是让公式0.0等式两边的差尽量小,这样才能最大限度的保存共现矩阵的原始信息(比较于损失函数的构建)

    • 通俗来讲,目标函数求解我们在函数满足可导可微的前提下通过求导求微分的方式求解,类比这一原理来理解,文字形容就是:假设坐标轴有一个开口向上的抛物线,求解的过程就相当于求解抛物线的最小值,我们可以利用抛物线的定理,但是也可以抛物线上点的切线来根据切线的斜率来找到极值点,所以引申出梯度下降的方向与学习率(自我理解的梯度下降,仅供参考)

在这里插入图片描述

可参考梯度下降详解:梯度下降算法原理讲解——机器学习_Arrow and Bullet-CSDN博客_梯度下降法

梯度下降一般伴随有正则化的过程,此处浅谈书中的正则化:

将正则化项加入损失函数来用来保持模型稳定的。对于加入了正则化项的损失函数来说,模型权重越大,损失函数的值越大,梯度下降时朝着损失小的方向发展的,因此正则化其实是希望在尽量不影响原模型与数据集之间的损失的前提下,是模型的权重变小 ,权重的减小自然会让模型的输出波动更小,从而达到让模型更稳定的目的(通俗理解:就是将一个非常曲折变化幅度非常大的曲线变得平滑缓和)

  1. 矩阵分解之后得到所有用户和物品的隐向量,进行推荐时候就是利用用户的隐向量与所有物品的隐向量逐一计算内积即可,排序推荐

  2. 矩阵分解生成隐向量的过程是利用了共现矩阵本身包含的全局信息的,因此具有比协同过滤更强的泛化能力,而协同过滤依赖用户,物品互相的历史关系,如果没有交集那相似度就为0,这样无法利用全局信息。

  3. 关于消除用户和物品打分的偏差问题

    1. 每个人在对物品进行评分时,评分标准会有差异,比如10分满分,有的人认为5分就表示可以,而有的人认为3分就很不错了,所以常用消除用户和物品打分的偏差的做法是在矩阵分解时候加入用户和物品的偏差向量,即下方公式
      r ^ = μ + b i + b u + q i T p i (0.0) \hat{r} = \mu + b_{i} + b_{u} + q_{i}^Tp_{i}\tag{0.0} r^=μ+bi+bu+qiTpi(0.0)

    2. 其中第一个miu值是全局偏差常数,bi是物品偏差系数(可使用物品i收到的所有评分均值),bu用户偏差系数(同物品构建方法)

  4. 矩阵分解的优点与局限:

    1. 泛化能力增强,一定程度上解决了数据稀疏的问题
    2. 空间复杂度低,单纯的存储用户和物品的隐向量空间复杂度大大降低
    3. 更好的扩展性与灵活性(产出的用户与物品隐向量与深度学习的embedding思想较为相似,因此矩阵分解的结果非常便于与其他特征进行组合和拼接,且便于应用在神经网络上)
    4. 与协同过滤一样,矩阵分解同样不方便加入用户,物品,上下文等相关的特征; 缺乏用户历史行为时候无法进行有效的推荐;
4 逻辑回归-融合多种特征的推荐模型
1 简介
  1. 对于协同过滤与矩阵分解仅利用用户与物品的相互行为信息进行推荐的缺陷,逻辑回归则能综合用户,物品,上下文等多种特征,生成较为全面的推荐。另外逻辑回归的另一种表现形式”感知机“作为神经网络中最基础的单一神经元,是深度学习的基础结构。因此能够进行多特征融合的逻辑回归模型成了独立于协同过滤的推荐模型发展的另一个主要方向。
  2. 不同于上面两种方法计算相似度来进行推荐,逻辑回归将推荐问题看成一个分类问题,通过预测正样本的概率对物品进行排序。因此逻辑回归将推荐问题转换成了点击率CTR预估问题。
2 逻辑回归模型的推断过程
  1. 将特征向量x=(x1,x2,x3,…,xn)^T作为模型的输入,其中x为特征,编号为不同的特征

  2. 通过为各特征赋予相应的权重(w1,w2,w3,…,wn)来表示各特征的重要性差异,将各特征进行加权求和,得到X^T W

  3. 将X^T W输入激活函数sigmoid函数中,使之映射到0~1之间,得到最终的点击率,如下图所示

在这里插入图片描述

3 逻辑回归的训练方法
4 逻辑回归模型的优势与劣势
  • 数学含义的支撑:简易理解就是点击与否是符合伯努利分布的,逻辑回归刚好符合
  • 可解释性强:从特征加权融合,再通过激活函数映射都符合的整个过程都是符合CTR物理意义的
  • 当时工程化的需要,逻辑回归易于并行运算,训练开销小,模型简单在大数据量面前比较吃香
  • 劣势:表达能力不强,无法进行交叉与特征筛选等操作(交叉衍生了fm,ffm,特征筛选衍生了gbdt+lr)
5 特征交叉的解决方法-PolY2,FM,FFM

​ 注:文中作者用著名的”辛普森悖论“来说明进行多维度特征交叉的重要性(反正就是很重要就对了,该悖论感兴趣自查)

1 poly2模型-特征交叉的开始
  1. poly2特征交叉十分暴力,就是对特征进行两两组合然后赋予权重,本质上仍然是线性模型,一定程度上解决了特征组合的问题,但是缺点也十分明显
  2. 在互联网数据处理时候,需要经常使用热独编码来处理类别形的数据,导致特征向量极度稀疏,那么poly2无差别的特征交叉就会让特征向量更加稀疏,导致大部分交叉特征的权重缺乏有效的数据进行训练,从而导致无法收敛(还有特征爆炸的情况); 而且权重参数的量成平方增加,大大加重了训练复杂度
2 FM,FFM模型的引入
  • FM 隐向量特征交叉
  • FFM 引入特征域的概念
  • 因总结过FM,FFM的相关解读,此处不做详解(代码为请教同事的代码,仅供参考) FM&FFM理解(初版) - 知乎 (zhihu.com)
  • FM家族的弊端:理论中FM模型利用交叉的思路可以引申到三阶特征交叉甚至更高,但是由于组合特征爆炸的问题限制,三阶的FM无论是权重数量还是训练复杂度都过高,难以在工程中实现。因此为了突破二阶特征交叉的限制,进一步加强模型特征组合的能力,就成了推荐模型发展的方向,比如接下来介绍的特征工程模型化(组合模型)在一定程度上解决了高阶特征交叉的问题
3 作者有些图比较形象,作为注解部分
  • 关于poly2

在这里插入图片描述

  • FM

在这里插入图片描述

  • FFM

在这里插入图片描述

6 GBDT+LR – 特征工程模型化的开端
  • 由于上面FM,FFM模型不断引入交叉特征,会不可避免的产生组合爆炸和计算复杂度高的问题,因此引入了全新的GBDT+LR的组合模型解决方案

  • 即:利用GBDT自动进行特征筛选和组合,进而生成新的离散特征向量,再把该特征向量作为LR模型的输入,结构如下

在这里插入图片描述

  • 如图所示,GBDT与LR两部分是独立开来的

  • 关于集成学习相关的GBDT,Xgboost,LightGBM等,单独整理: 假装有链接

GBDT+LR组合模型开启的特征工程新趋势
  • GBDT+LR的提出,实现了真正的端到端训练,之前进行人工或者半人工的特征组合和特征筛选对算法工程师的经验和精力投入要求都比较高,还有就是从根本上改变模型结构,对模型设计能力的要求较高。
7 LS-PLM模型 --阿里曾经的主流推荐模型
  • LS-PLM模型又称MLR混合逻辑回归模型,从本质来看,其可以看作对逻辑回归的自然推广,它在逻辑回归的基础上采用分而治之的思路,先对样本进行分片,再在样本分片中应用逻辑回归进行CTR预估。(该思路类比于,当进行女装推荐的时候,男装进入数据集就会被影响)

  • LS-PLM首先用聚类函数Π对样本进行分类(这里的Π采用了softmax函数对样本进行多分类),再用LR模型计算样本在分片中的具体的CTR,然后将二者相乘后求和。
    f ( x ) = ∑ i = 1 m π i ( x ) ∗ η i ( x ) = ∑ i = 1 m e μ i x ∑ j = 1 m e μ j x ∗ 1 1 + e − w i x f(x) = \sum_{i=1}^{m}\pi_{i}(x)*\eta_{i}(x)=\sum_{i=1}^{m}\frac{e^{\mu_{i}x}}{\sum_{j=1}^{m}e^{\mu_{j}x}}*\frac{1}{1+e^{-w_{i}x}} f(x)=i=1mπi(x)ηi(x)=i=1mj=1meμjxeμix1+ewix1

  • 其中,超参数m为分片数,当m=1的时候模型退化成普通的逻辑回归,m越大,模型的拟合能力越强。同样的,模型参数的规模也同m的增大而线性增长,模型收敛所需要的训练样本也随之增长

在这里插入图片描述

  • LS-PLM模型的优点

    • 适用于工业级的推荐,广告等大规模稀疏数据的场景
    • 端到端的非线性学习能力,可以自主挖掘出数据中蕴含的非线性关系,便于用一个全局模型对不同应用领域,业务场景进行统一建模
    • 模型的稀疏性强,LS-PLM建模时候引入了L1 L2范数,可以使最终训练出来的模型具有较高的稀疏度,从而模型的部署更加轻量级。模型服务的过程中仅需使用权重非零的特征大大提高了在线推断的效率。
    • LS-PLM已经有深度学习的大致雏形了。
4 END
  • 传统推荐模型的特征总结
模型名称基本原理特点局限性
协同过滤根据用户的行为历史生成用户-物品共现矩阵,利用用户相似性和物品相似性进行推荐原理简单、直接,应用广泛泛化能力差,处理稀疏矩阵的能力差,推荐结果的头部效应明显
矩阵分解将协同过滤算法中的共现矩阵分解为用户矩阵和物品矩阵,利用用户隐向量和物品隐向量的内积进行排序并推荐相较协同过滤,泛化能力有所增强,对稀疏矩阵的处理能力有所增强除了用户历史行为数据,难以利用 其他用户、物品特征及上下文特征
逻辑回归将推荐问题转换成类似CTR预估的二分类问题,将用户、物品、上下文等不同特征转换成特征向量,再按照预估CTR进行排序并推荐能够融合多种类型的不同特征模型不具备特征组合能力,表达能力较差
FM再逻辑回归的基础上,再模型中假如二阶特征交叉部分,为每一维特征训练得到相应特征隐向量,通过隐向量的内积运算得到交叉特征权重相比逻辑回归,具备了二阶特征交叉能力,模型的表达能力有所增强由于组合爆炸问题的限制,模型不易扩展到三阶特征交叉阶段
FFM在FM模型的基础上,加入“特征域”的概念,使每个特征在与不同域的特征交叉时采用不同的隐向量相比FM,进一步加强了特征交叉能力模型的训练开销达到了O(n2)的量级,训练开销较大
GBDT+LR利用GBDT进行“自动化”的特征组合,将原始特征向量转换成离散型特征向量,并输入逻辑回归模型,进行最终的CTR预估特征工程模型化,使模型具备了更高阶特征组合的能力无法进行完全的并行训练,模型更新所需的训练时长较长
LS-PLM首先对样本进行“分片”,在每个“分片”内部构建逻辑回归模型,将每个样本的各个“分片”概率与逻辑回归的得分进行加权平均,得到最终的预估值模型结构类似三层神经网络,具备了较强的表达能力模型结构相比深度学习模型仍比较简单,有进一步提高的空间
  • 补充关于L1 L2正则化相关内容

    • 参考资料1:l1正则与l2正则的特点是什么,各有什么优势? - 知乎 (zhihu.com)

    • 参考资料2:L1正则化与L2正则化的区别_ybdesire的专栏-CSDN博客_l1正则化和l2正则化的区别

    • 范式的通用表达式p-norm:
      ∥ x ∥ p : = ( ∑ i = 1 n ∣ x i ∣ p ) 1 p \parallel x\parallel_{p} := (\sum_{i=1}^n\mid x_{i}\mid^p)^\frac{1}{p} xp:=(i=1nxip)p1

    • 当p=1的时候成为1-norm,同理2-norm,将l1和l2范式作为正则项使用即所谓的l1正则化和l2正则化(下公式是方式,而不是正则化表示)
      ∥ x ∥ 1 : = ∑ i = 1 n ∣ x i ∣ (L1) \parallel x\parallel_{1} := \sum_{i=1}^n\mid x_{i}\mid\tag{L1} x1:=i=1nxi(L1)

      ∥ x ∥ 2 : = ( ∑ i = 1 n ∣ x i ∣ 2 ) 1 2 (L2) \parallel x\parallel_{2} := (\sum_{i=1}^n\mid x_{i}\mid^2)^\frac{1}{2}\tag{L2} x2:=(i=1nxi2)21(L2)

    • 相关理解:

      • l1:lasso回归对所有参数的惩罚力度都一样,可以让一部分权重变为零,因此产生稀疏矩阵,能够去重某些特征(因为权重为0);稀疏了也就可以减少储存空间
      • l2L岭回归减少的是权重的固定比例,使得权重平滑,并不会使权重变为零,因为其无法产生系数模型,所以选择了更多的特征;优点就是实现简单起到了正则化的作用,缺点就是l1的优点
      • l1和l2结合就是弹性网络
      • 更多时候使用l2,因为l2计算方便,一定只有一条最好的预测线,而l1因为其性质可能存在多个最优解;l1的优势就是可以创造稀疏矩阵,筛选特征,鲁棒性更强,对敏感值更不敏感。
Logo

更多推荐