ALS算法理解

  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=<u_i,m_j> pij=UiTMj=<ui,mj>

二、代价函数

显示反馈代价函数
​​  对于有交互行为的用户和物品来说,其评分偏差就是 r − p r-p rp,我们采用平方损失函数,所以对于单个样本来说: L ( r , u , m ) = ( r − p ) 2 = ( r − < u , m > ) 2 L(r,u,m)=(r-p)^2=(r-<u,m>)^2 L(r,u,m)=(rp)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[(rijuimjT)2+λ(ui2+mj2)]
隐式反馈代价函数
  很多情况下,我们并不能得到用户的显示评分,但可以得到一些隐式评分,比如浏览次数、浏览时长等。我们需要引入一个参数 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(rijuimjT)2+λ(ui2+mj2)]

三、参数求解

​​  由于在现实中往往跟用户发生过交互行为的物品往往只是在整个物料库中一小部分,因此传统的矩阵分解方法 S V D {SVD} SVD并不适用,我们采用ALS方法来解决,求解过程如下:

  • Step1:初始化矩阵 M M M,用电影的平均分作为第一行,其余是小的随机数
  • Step2:固定矩阵 M M M,通过最小化损失函数来求解矩阵 U U U
  • Step3:固定矩阵 U U U,通过最小化损失参数来求解矩阵 M M M
  • Step4:重复Step2和Step3,直到满足停止条件(原论文中的停止条件是两次迭代计算的RMSE差小于0.0001,实际可根据自身业务需求来决定)

显示反馈求解
  现在来演示一下给定物品矩阵 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 UL=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[(rijmjTui)2+λ(ui2+mj2)]

        = ( R − M U ) T ( R − M U ) + λ U U T + λ M M T =(R-MU)^T(R-MU)+\lambda UU^T+\lambda MM^T =(RMU)T(RMU)+λ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 =(RTUTMT)(RMU)+λ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 =RTRRTMUUTMTR+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① URTR=0
∂ R T M U ∂ U = R T M ② \frac{ \partial R^TMU }{ \partial U }=R^TM\quad\quad\quad\quad② URTMU=RTM
∂ U T M T R ∂ U = ( M T R ) T \frac{ \partial U^TM^TR }{ \partial U }=(M^TR)^T UUTMTR=(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 } UUTMTMU=UUTAU = ∂ 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 =UUAU+UAUU = 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 UL=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

四、ALS算法的优缺点

优点

  • 可以分布式计算,处理大数据场景
  • 泛化能力强,原论文提到如果采用Tikhonov正则化不论迭代次数多少或者隐藏向量维度多高都不会出现过拟合现象
  • 解决了协同过滤中头部效应明显的现象

缺点

  • 没有充分利用用户和物品的其他特征以及上下文特征
  • 缺乏用户历史行为时无法进行有效的推荐
  • 9
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟炼丹师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值