ALS算法全称为交替最小二乘法(Alternating Least Squares),是一种基于协同过滤思想的矩阵分解算法。其亮点之一就在于优化参数时使用了交替最小二乘法,而非梯度下降算法,使得ALS算法可以进行分布式并行计算,因此其被收录于Spark的Mlib以及ML库中。下面将详细介绍这一算法:
通过隐含特征(latent factor)联系用户兴趣和物品(item), 基于用户的行为找出潜在的主题和分类, 然后对item进行自动聚类,划分到不同类别/主题(用户的兴趣)。
本质是把协同过滤算法进行了一种延伸, 把用户的相似性和物品的相似性通过了一个叫做隐向量的方式进行表达
矩阵分解算法将 m × n m×n m×n 维的共现矩阵 R R R 分解成 m × k m×k m×k 维的用户矩阵 U U U 和 k × n k×n k×n 维的物品矩阵 M M M 相乘的形式。 我们的目标就是填充共现矩阵中的空缺值,从而对用户的行为产生预测。
其中 m m m 是用户数量, n n n 是物品数量, k k k 是隐向量维度, 也就是隐含特征个数, 只不过这里的隐含特征变得不可解释了, 即我们不知道具体含义了, 要模型自己去学。 k k k 的大小决定了隐向量表达能力的强弱, k k k 越大, 表达信息就越强, 理解起来就是把用户的兴趣和物品的分类划分的越具体。
每个用户和物品都有一个 k k k维的隐向量来表示,因此如果我们想计算某个用户对特定物品的评分或其他隐式行为 p i j p_{ij} pij,只需要计算对应向量的内积即可。
p i j = U i T M j = < u i , m j > p_{ij}=U_i^TM_j=
显示反馈代价函数
对于有交互行为的用户和物品来说,其评分偏差就是 r − p r-p r−p,我们采用平方损失函数,所以对于单个样本来说: L ( r , u , m ) = ( r − p ) 2 = ( r − < u , m > ) 2 L(r,u,m)=(r-p)^2=(r-)^2 L(r,u,m)=(r−p)2=(r−<u,m>)2因此,整个样本上的损失函数为: L ( R , U , M ) = s u m ( i , j ) ∈ I L ( r i j , u i , m j ) L(R,U,M)=sum_{(i,j)\in I}L(r_{ij},u_i,m_j) L(R,U,M)=sum(i,j)∈IL(rij,ui,mj)其中 I I I 为用户和物品发生过交互行为的集合。
我们的目的是使得该损失函数最小,因此得到目标函数: ( U , M ) = a r g min ( U , M ) L ( R , U , M ) (U,M)=arg\ \min_{(U,M)}L(R,U,M) (U,M)=arg (U,M)minL(R,U,M)
当我们隐向量维度 k k k 设置的较大时,有可能会造成模型的过拟合,因此我们需要加入正则项对模型的参数进行惩罚(原论文使用的为Tikhonov正则化,我们为了简化计算使用L2正则化),因此损失函数就变成了: L λ r e g ( R , U , M ) = ∑ ( i , j ) ∈ I [ ( r i j − u i m j T ) 2 + λ ( ∣ ∣ u i ∣ ∣ 2 + ∣ ∣ m j ∣ ∣ 2 ) ] L_{\lambda}^{reg}(R,U,M)=\sum_{(i,j)\in I}[(r_{ij}-u_im_j^T)^2+\lambda({||u_i||}^2+{||m_j||}^2)] Lλreg(R,U,M)=(i,j)∈I∑[(rij−uimjT)2+λ(∣∣ui∣∣2+∣∣mj∣∣2)]
隐式反馈代价函数
很多情况下,我们并不能得到用户的显示评分,但可以得到一些隐式评分,比如浏览次数、浏览时长等。我们需要引入一个参数 c i j c_{ij} cij来衡量这个隐式得分: c i j = 1 + α r i j c_{ij}=1+\alpha r_{ij} cij=1+αrij
α \alpha α为置信度系数,表明这个隐式评分的可信程度,于是我们的代价函数就变成了: L λ r e g ( R , U , M ) = ∑ ( i , j ) ∈ I [ c i j ( r i j − u i m j T ) 2 + λ ( ∣ ∣ u i ∣ ∣ 2 + ∣ ∣ m j ∣ ∣ 2 ) ] L_{\lambda}^{reg}(R,U,M)=\sum_{(i,j)\in I}[c_{ij}(r_{ij}-u_im_j^T)^2+\lambda({||u_i||}^2+{||m_j||}^2)] Lλreg(R,U,M)=(i,j)∈I∑[cij(rij−uimjT)2+λ(∣∣ui∣∣2+∣∣mj∣∣2)]
由于在现实中往往跟用户发生过交互行为的物品往往只是在整个物料库中一小部分,因此传统的矩阵分解方法 S V D {SVD} SVD并不适用,我们采用ALS方法来解决,求解过程如下:
显示反馈求解
现在来演示一下给定物品矩阵 M M M之后怎样求解矩阵 U U U,由于此时矩阵 M M M已经固定,我们可将其看为常量,此时损失函数 L L L可以看作变量为 U U U的函数,我们使得 L L L取得最小值就是求其极值点,即 ∂ L ∂ U = 0 \frac{ \partial L }{ \partial U }=0 ∂U∂L=0,先将L进行变换如下:
L = ∑ ( i , j ) ∈ I [ ( r i j − m j T u i ) 2 + λ ( ∣ ∣ u i ∣ ∣ 2 + ∣ ∣ m j ∣ ∣ 2 ) ] L=\sum_{(i,j)\in I}[(r_{ij}-m_j^Tu_i)^2+\lambda({||u_i||}^2+{||m_j||}^2)] L=∑(i,j)∈I[(rij−mjTui)2+λ(∣∣ui∣∣2+∣∣mj∣∣2)]
= ( R − M U ) T ( R − M U ) + λ U U T + λ M M T =(R-MU)^T(R-MU)+\lambda UU^T+\lambda MM^T =(R−MU)T(R−MU)+λUUT+λMMT
= ( R T − U T M T ) ( R − M U ) + λ U U T + λ M M T =(R^T-U^TM^T)(R-MU)+\lambda UU^T+\lambda MM^T =(RT−UTMT)(R−MU)+λUUT+λMMT
= R T R − R T M U − U T M T R + U T M T M U + λ U U T + λ M M T =R^TR-R^TMU-U^TM^TR+U^TM^TMU+\lambda UU^T+\lambda MM^T =RTR−RTMU−UTMTR+UTMTMU+λUUT+λMMT
L L L对 U U U求偏导可以分解如下:
∂ R T R ∂ U = 0 ① \frac{ \partial R^TR }{ \partial U }=0 \quad\quad\quad\quad① ∂U∂RTR=0①
∂ R T M U ∂ U = R T M ② \frac{ \partial R^TMU }{ \partial U }=R^TM\quad\quad\quad\quad② ∂U∂RTMU=RTM②
∂ U T M T R ∂ U = ( M T R ) T \frac{ \partial U^TM^TR }{ \partial U }=(M^TR)^T ∂U∂UTMTR=(MTR)T = R T M ③ \quad\quad\quad\quad\quad\quad\quad\quad\quad=R^TM\quad\quad\quad\quad③ =RTM③
∂ U T M T M U ∂ U = ∂ U T A U ∂ U \frac{ \partial U^TM^TMU}{ \partial U }=\frac{ \partial U^TAU}{ \partial U } ∂U∂UTMTMU=∂U∂UTAU = ∂ U ∂ U A U + ∂ A U ∂ U U \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad=\frac{ \partial U}{ \partial U }AU+\frac{ \partial AU}{ \partial U }U =∂U∂UAU+∂U∂AUU = A U + A U \quad\quad\quad\quad\quad\quad\quad =AU+AU =AU+AU = 2 A U ④ \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad=2AU\quad\quad\quad\quad\quad④ =2AU④
∂ λ U U T ∂ U = 2 λ U ⑤ \frac{ \partial \lambda UU^T }{ \partial U }=2\lambda U \quad\quad\quad\quad⑤ ∂U∂λUUT=2λU⑤
∂ λ W W T ∂ U = 0 ⑥ \frac{ \partial \lambda WW^T }{ \partial U }=0 \quad\quad\quad\quad⑥ ∂U∂λWWT=0⑥
因此可得:
∂ L ∂ U = − 2 R T M + 2 M T M U + 2 λ U = 0 \frac{ \partial L }{ \partial U }=-2R^TM+2M^TMU+2\lambda U=0 ∂U∂L=−2RTM+2MTMU+2λU=0
U = ( M T M + λ E ) M T R U=(M^TM+\lambda E)M^TR U=(MTM+λE)MTR
固定 U U U对 M M M求解过程相同,可得:
M = ( U T U + λ E ) U T R T M=(U^TU+\lambda E)U^TR^T M=(UTU+λE)UTRT
隐式反馈求解
过程同上一样,最终可得结果:
U = ( M T C m M + λ E ) M T C m R U=(M^TC_mM+\lambda E)M^TC_mR U=(MTCmM+λE)MTCmR
U = ( M T C u M + λ E ) M T C u R U=(M^TC_uM+\lambda E)M^TC_uR U=(MTCuM+λE)MTCuR
优点
缺点