推荐系统–矩阵分解(1)
推荐系统–矩阵分解(2)
推荐系统–矩阵分解(3)
推荐系统–矩阵分解(4)
推荐系统–矩阵分解(5)
推荐系统–矩阵分解(6)
9 应用于联邦学习的矩阵分解
这个部分主要参考以下两篇论文:
2008-Collaborative Filtering for Implicit Feedback Datasets
Federated collaborative filtering for privacy-preserving presonalized recommendation system
9.1 Collaborative Filtering for Implicit Feedback Datasets
在该模型中对ruir_{ui}rui引入喜好变量和置信度变量。
- 喜好变量fuif_{ui}fui是一个二元变量,表示用户是否具有该无偏偏好,定义如下:
fui={1rui>00rui=0(1)f_{u i}=\left\{\begin{array}{cc} 1 & r_{u i}>0 \\ 0 & r_{u i}=0 \end{array}\right. \tag1 fui={10rui>0rui=0(1) - 置信度变量 cuic_{ui}cui表示用户对物品喜好的置信程度,定义如下:
cui=1+αrui(2)c_{u i}=1+\alpha r_{u i} \tag2 cui=1+αrui(2)
α\alphaα是超参数。 - 整体的损失函数如下:
最终得到如下优化目标函数:
J=minp⋆,q⋆∑u,icui(fui−puTqi)2+λ(∑u∥pu∥2+∑i∥qi∥2)(3)J = \min _{p_{\star}, q_{\star}} \sum_{u, i} c_{u i}\left(f_{u i}-p_{u}^{T} q_{i}\right)^{2}+\lambda\left(\sum_{u}\left\|p_{u}\right\|^{2}+\sum_{i}\left\|q_{i}\right\|^{2}\right) \tag3 J=p⋆,q⋆minu,i∑cui(fui−puTqi)2+λ(u∑∥pu∥2+i∑∥qi∥2)(3)
λ\lambdaλ是惩罚项,用于惩罚两个参数,防止过拟合
这个问题是非凸函数, 作者使用的是ALS(交替最小二乘法)优化方法。如果固定其中一个参数将其看做是常数的话,那么整个问题就变成了一元二次函数,可以很容易的得到极小值点。根据这种思想就有了交替最小二乘法: - 初始化pu1p_u^1pu1,qi1q_i^1qi1
- 循环kkk,k=1,2,…k = 1, 2, \dotsk=1,2,…
– [ ] puk+1=argminpuJ(puk,qik)p_u^{k+1} = \arg \min_{p_u} J(p_u^k, q_i^k)puk+1=argminpuJ(puk,qik)
– [ ] qik+1=argminqiJ(puk+1,qik)q_i^{k+1} = \arg \min_{q_i} J(p_u^{k+1}, q_i^k)qik+1=argminqiJ(puk+1,qik)
固定qiq_iqi的值,对pup_upu进行搜索:
12∂J∂pu=∑icui(puTqi−fui)qi+λpu=∑icui(qiTpu−fui)qi+λpu=QTCuQpu−QTCuf(u)+λpu\begin{aligned} \frac{1}{2} \frac{\partial J}{\partial p_{u}} &=\sum_{i} c_{u i}\left(p_{u}^{T} q_{i}-f_{u i}\right) q_{i}+\lambda p_{u} \\ &=\sum_{i} c_{u i}\left(q_{i}^{T} p_{u}-f_{u i}\right) q_{i}+\lambda p_{u} \\ &=Q^{T} C^{u} Q p_{u}-Q^{T} C^{u} f(u)+\lambda p_{u} \end{aligned} 21∂pu∂J=i∑cui(puTqi−fui)qi+λpu=i∑cui(qiTpu−fui)qi+λpu=QTCuQpu−QTCuf(u)+λpu
得到:
pu=(QTCuQ+λI)−1QTCuf(u)p_{u}=\left(Q^{T} C^{u} Q+\lambda I\right)^{-1} Q^{T} C^{u} f(u) pu=(QTCuQ+λI)−1QTCuf(u)
同理可得:
12∂J∂qi=∑u[cui(puTqi−fui)]pu+λqi\begin{aligned} \frac{1}{2}\frac{\partial J}{\partial {q}_{i}}&= \sum_{u}\left[c_{u i}\left({p}_{u}^{T}{q}_{i}- f_{u i}\right)\right] {p}_{u}+ \lambda {q}_{i} \end{aligned} 21∂qi∂J=u∑[cui(puTqi−fui)]pu+λqi
qi=(PTCiP+λI)−1PTCif(i)q_{i}=\left(P^{T} C^{i} P+\lambda I\right)^{-1} P^{T} C^{i} f(i) qi=(PTCiP+λI)−1PTCif(i)
9.2 Federated collaborative filtering for privacy-preserving presonalized recommendation system
9.2.1 分析
联邦学习的思想是“数据不出本地”,现在对之前的计算进行分析:
- 用户uuu利用自己的数据,就可以实现pup_upu的更新;
- 对qiq_iqi的更新需要用到所有用户的个人数据,需要将数据整合到一起,但是这与联邦学习的定义不符。
文章采用梯度下降的方法对qi{q}_{i}qi进行更新:
qi=qi−γ∂J∂qi\begin{aligned} {q}_{i}&={q}_{i}-\gamma \frac{\partial J}{\partial {q}_{i}} \end{aligned} qi=qi−γ∂qi∂J
用户只用自己的个人数据就可以求出部分梯度,最终将所有人求出的梯度进行整合即可。
与ALS相比:
- ALS可以一步到位直接到达参数qiq_iqi的较小值点
- 梯度下降需要迭代多次才能到达一个较小值点
- 梯度下降可以在用户本地进行,最终只需要将所有用户的梯度整合一下取平均即可
9.2.2 步骤
联邦学习范式中的协同过滤。 主模型 YYY(项目-因素矩阵,有时候也用QQQ,或者VVV,不同文献使用的符号系统不同,为了和图片一致,我这里依然采用YYY)在服务器上更新,然后分发到客户端。 每个特定于用户的模型 XXX(用户-因素矩阵,有时候也用PPP,或者UUU,不同文献使用的符号系统不同,为了和图片一致,我这里依然采用XXX)保留在本地客户端上,并使用本地用户数据和来自服务器的 YYY 在客户端上进行更新。 通过 YYY 的梯度的更新在每个客户端上计算并传输到服务器,在那里它们被聚合以更新主模型 YYY。
- 所有项目因子向量 yiy_iyi , i=1,…,Mi = 1, \dots, Mi=1,…,M 在服务器上更新,然后分发给每个客户端 uuu。
- 用户因子向量 xux_uxu, u∈1,...,Nu \in {1, . . . , N}u∈1,...,N 在客户端 uuu 上本地更新,使用用户 uuu 自己的数据和 yiy_iyi, i=1,…,Mi = 1, \dots, Mi=1,…,M来自服务器。
- 通过梯度 δyuiδy_{ui}δyui 的更新是针对每个客户端 uuu 上的项目 tit_iti 计算的,并传输到服务器,在那里梯度被聚合以更新 yiy_iyi。 这与现有的联邦学习架构形成对比,其中客户端直接计算参数 yuiy_{ui}yui 的更新,然后在服务器上聚合以更新主模型。
以下公式是从论文中摘录下来的:
符号说明:
p(u)p(u)p(u)就是前文的f(u)f(u)f(u):表示用户的购买记录;
符号说明:
puip_{ui}pui就是前文的fuif_{ui}fui:表示用户是否具有该无偏偏好;