总共包含两篇博文:
深度学习推荐系统 学习笔记–Chapter 2.1
深度学习推荐系统 学习笔记–Chapter 2.2
本文是其中一篇
前言
传统推荐模型模型的演进关系图
传统推荐模型分为几个大族:
作为最成熟的推荐算法,协同过滤的研究最早可以追溯到1992年,目前协同过滤主要有两个大类。
UserCF很重要的一点是要计算用户之间的相似度,常见的相似度计算有如下几种。
s i m ( i , j ) = i ∗ j ∣ ∣ i ∣ ∣ ∗ ∣ ∣ j ∣ ∣ sim(i,j) = \frac{i * j}{||i||*||j||} sim(i,j)=∣∣i∣∣∗∣∣j∣∣i∗j
s i m ( i , j ) = ∑ p ∈ P ( R i , p − R i ) ( R j , p − R j ) ∑ p ∈ P ( R i , p − R i ) 2 ∑ p ∈ P ( R j , p − R j ) 2 sim(i,j) = \frac{\sum_{p\in{P}}{(R_{i,p}-R_i)(R_{j,p}-R_j)}}{\sqrt{}\sum_{p\in{P}}{(R_{i,p}-R_i)^2} \sqrt{}\sum_{p\in{P}}{(R_{j,p}-R_j)^2}} sim(i,j)=∑p∈P(Ri,p−Ri)2∑p∈P(Rj,p−Rj)2∑p∈P(Ri,p−Ri)(Rj,p−Rj)
其中,R_ip是用户i对物品p的评分。Ri是用户对物品的平均评分。利用这个可以减少用户评分偏置的影响。
UserCF算法主要步骤:
R u , p = ∑ s ∈ S ( w u , s ∗ R s , p ) ∑ s ∈ S w u , s R_{u,p} = \frac{\sum_{s\in{S}}(w_{u,s}*R_{s,p})}{\sum_{s\in{S}}w_{u,s}} Ru,p=∑s∈Swu,s∑s∈S(wu,s∗Rs,p)
UserCF基于一种逻辑,兴趣相似的用户,喜欢的东西应该也是相似的。确实如此。但是,UserCF也有很大的弊端:
所以在互联网初期,实现的协同是基于物品相似度的。
实现逻辑:
R u , p = ∑ h ∈ H ( w p , h ∗ R u , h ) R_{u,p} = \sum_{h\in{H}} (w_{p,h} * R_{u,h}) Ru,p=h∈H∑(wp,h∗Ru,h)
H是用户历史中有正反馈的物品。R_uh是用户对h的已有评分。
UserCF社交属性强,比较适合新闻类型的推荐,可用于发现热点,跟踪热点。
ItemCF比较适合用户兴趣较为稳定的推荐,比如亚马逊的电商推荐场景。
两个算法都具有可解释性强,泛化能力弱,头部效应过强的特点。热门的物品往往有非常多的互动历史,会产生很强的头部效应,因此容易跟大量物品产生相似性;而尾部的物品由于特征向量稀疏,很少跟其他物品产生相似性,导致很少被推荐。
另外,协同过滤也没有用到物品本身的信息,用户本身的信息,也没有用到上下文特征,这会造成有效信息的遗漏。所以,以逻辑回归作为基础的推荐算法也渐渐发展起来。
矩阵分解主要是基于如下一个逻辑:利用共现矩阵,为每个用户和视频生成一个隐向量,每个隐向量就代表了该实体的“自身特性”,相似的隐向量,对应的两个实体也更相似。
这样子,MF就有了较强的泛化性。
矩阵分解的求解办法:奇异值分解以及梯度下降。(顺带一提,还有一个矩阵分解的办法,特征值分解,该方法是PCA的核心逻辑,只适合方阵)
对于一个m*n的矩阵,可以分解为三个矩阵:
M = U E V T M = UEV^T M=UEVT
M为m*n的矩阵,U为 m ∗ m m*m m∗m的方阵,V是 n ∗ n n*n n∗n的方阵,E为 m ∗ n m*n m∗n的对角阵。
MF算法会取对角阵E中较大的k个元素作为隐含特征,删除其他维度,则
M ∼ U m ∗ k E k ∗ k V k ∗ n T M \sim U_{m*k}E_{k*k}V_{k*n}^T M∼Um∗kEk∗kVk∗nT
则每个用户和物品就可以以U,V的向量来唯一标示了。
奇异值分解的计算复杂度为O(mn^2),这对于海量的互联网数据是不可接受的,另外,其对矩阵的要求是必须稠密,互联网场景下的数据也很难满足这一点。因此,相比奇异值分解,梯度下降的求法更为常用。
首先给出梯度下降的目标函数:
m i n q , p ∑ ( u , i ) ∈ K ( r u i − q i T ∗ p u ) 2 min_{q,p} \sum_{(u,i)\in K}(r_{ui} - q_i^T*p_u)^2 minq,p(u,i)∈K∑(rui−qiT∗pu)2
其中K是所有用户的评分集合。
一般情况下,为了避免过拟合,会在上式加入正则化
m i n q , p ∑ ( u , i ) ∈ K ( r u i − q i T ∗ p u ) 2 + λ ∗ ( ∣ ∣ q i ∣ ∣ 2 + ∣ ∣ p u ∣ ∣ 2 ) min_{q,p} \sum_{(u,i)\in K}(r_{ui} - q_i^T*p_u)^2 + \lambda * (||q_i||^2 + ||p_u||^2) minq,p(u,i)∈K∑(rui−qiT∗pu)2+λ∗(∣∣qi∣∣2+∣∣pu∣∣2)
梯度下降算法迭代如下:
q i < − q i − α ∗ ( ( r u i − q i T p u ) p u − λ q i ) q_i <- q_i - \alpha *((r_{ui} - q_i^Tp_u)p_u - \lambda q_i) qi<−qi−α∗((rui−qiTpu)pu−λqi)
p u < − p u − α ∗ ( ( r u i − q i T p u ) q i − λ p u ) p_u <- p_u - \alpha*((r_{ui}-q_i^Tp_u)q_i - \lambda p_u) pu<−pu−α∗((rui−qiTpu)qi−λpu)
α \alpha α之后的部分是目标函数对p,u分别做的偏导。
矩阵分解的优点和局限性
逻辑回归的输入为:用户,物品,上下文等多种不同的特征。相比MF和CF这种计算相似度的推荐,LR是将推荐看做一个分类问题,通过预测正样本的概率对物品进行排序。正样本可以是用户点击了某商品,业可以是用户观看了某视频等。LR将推荐转换为为一个点击率(CTR)预估问题。
J ( w ) = − 1 / m ∗ y i ∑ i = 1 m ( l o g f w ( x i ) + ( 1 − y i ) l o g ( 1 − f w ( x i ) ) ) J(w) = -1/m * y^i \sum_{i=1}^m(logf_w(x^i) + (1 - y^i)log(1 - f_w(x^i))) J(w)=−1/m∗yii=1∑m(logfw(xi)+(1−yi)log(1−fw(xi)))
对J(w)进行求导,会有
δ δ w j J ( w ) = 1 / m ∑ i = 1 i ( f w ( x i ) − y i ) x j i \frac{\delta}{\delta w_j}J(w) = 1/m \sum^i_{i=1}(f_w(x^i) - y^i)x_j^i δwjδJ(w)=1/mi=1∑i(fw(xi)−yi)xji
之后更新 w j w_j wj
LR的优势和局限性