本文由 dbaplus 社群授权转载。
导读: 现如今推荐系统已经得到了广泛的应用,其性能通常是随着数据量的增加而提高。但现实中,数据往往分散在各个提供方手上,且随着数据监管政策趋严,以及数据隐私保护问题越来越受到重视,导致目前集中式的推荐系统难以进一步提高。因此,联邦推荐算法得以兴起。联邦推荐可以在数据不出本地的情况下,在加密的环境中实现和传统推荐算法一致的性能。其中,微众银行的开源平台 FATE 在这方面落地了多种算法,得到了越来越多的应用。今天将为大家带来微众银行在联邦推荐算法上的探索及应用。
主要内容包括:
推荐系统简介
联邦推荐系统
联邦推荐算法原理及实现
联邦推荐云服务和应用
01 推荐系统简介
1. 推荐系统应用广泛
推荐系统在互联网中的应用非常广泛,包括:电商、社交、信息流、在线视频、在线广告等场景。
2. 推荐系统极大提高效率
同时,推荐系统也是 AI 在商业领域成功应用的典型代表。推荐系统大大提高了用户获取信息的效率,帮助用户在海量信息中快速找到匹配的信息;另外,推荐系统还可以帮助企业找到合适的用户群,从而降低获客成本,提高投资回报率。比如,在应用推荐系统后,Youtube 视频点播率提高了 60%;Netflix 电影的播放量提高了 80%,亚马逊的用户浏览量提高了 30%,这都是很大,很可观的提升。
3. 推荐系统的原理
在数学上,推荐系统是一个矩阵填充的问题。其中,矩阵的行表示用户,列表示内容/商品,矩阵中的值表示用户的行为。根据场景的不同,值可以是点击,购买,评分。以评分为例,1-5 表示对应的评分,空白表示用户在这个商品上还没有评分。我们的目的是根据已有的行为记录来预测空白的值,然后根据预测的值进行推荐。为了更精准的进行推荐,还会用到很多其它的信息:包括用户信息 ( 如用户的性别、年龄、职业等维度 ) 和商品信息 ( 如商品的类别、描述文字以及推荐的环境数据(如推荐发生的时间点 ) )。
推荐系统通常会与多个数据方进行合作,从而收集更多的信息,以此提升推荐的效果。因为数据越多,对用户了解越深入,覆盖面越广,效果的提升就越大。图中相关研究也表明:随着额外数据的增加,性能随之提高。
4. 推荐系统面临的问题
① 数据孤岛问题
推荐系统是大数据驱动的应用。在理想情况下,大家可能认为数据质量很好,标签数据很充足,数据也是可以集中收集,并且触手可得的。但现实是,数据通常是分散隔离的,存储在不同的企业,即所谓的数据孤岛问题。
② 数据监管问题
例如欧盟的 GDPR 和国内监管政策的严格,隐私保护是推荐系统必不可少的一个环节。随着数据监管体系不断完善,各个企业都在不断的加强对用户隐私的保护。
5. 差分隐私解决方法
在这种情况下,比如差分隐私是一种比较常用的隐私保护方法。它是在数据中加入一些差分隐私来保护用户的隐私。它可以用于建模的各个环节,比如在用户数据收集的过程中加入,也可以在建模的过程中,比如梯度计算,模型参数中加入差分隐私噪声,还可以在预估结果中加入噪声。
但是,现在的方法,包括差分隐私并不能完全满足我们的需求。随着差分隐私噪声的增加,确实可以保护隐私,但性能是下降的。如上图,在增加差分隐私噪声的情况下,性能下降非常快。我们希望,有一种新的技术可以在保护隐私的情况下做到性能无损。另外一个问题是,加入噪声的数据还是有可能被集中收集,所以其并没有从根本上解决数据安全的问题。我们希望新的技术可以做到数据不出本地,从而保障数据安全和用户隐私。
02 联邦推荐系统
1. 联邦学习的优点
性能无损,A fed B 在保护隐私的前提下,性能和直接收集 A 和 B 数据的效果是一样的
原始数据不出本地
在加密条件下交换模型的参数来构建模型
2. 联邦推荐系统的分类
推荐系统中的核心数据为用户和物品的交互行为数据。根据物品和用户的共享情况,可以将推荐系统分为:
纵向联邦推荐:有大量相同的用户,但是 item 不同,因此也叫 user-based 联邦推荐系统。
横向联邦推荐:有大量相同的物品,但是用户不同,也叫 item-based 联邦推荐系统。
03 联邦推荐算法原理及实现
1. 纵向联邦推荐
纵向联邦推荐介绍:
在这个场景中,书籍和电影这两个推荐系统有共同的 user,但是 item 不同。根据一些研究指出:将这两个推荐系统进行联合,可以提高推荐效果,因为这两个推荐系统的用户偏好是一样的。
纵向联邦矩阵分解:
以矩阵分解为例,在数据不出本地的情况下,如何构建推荐系统?
在单方的情况下,用户的评分矩阵可以分解为两个低维矩阵的乘积,即 user profile p 和 item profile q。这两个矩阵乘积可以很好的拟合历史数据,同时可以填充矩阵中的空白值,并利用这些值进行推荐。
在多方的情况下,可以把两者的矩阵分解合并在一起,即图中的公式:第一项为 A 方的矩阵分解,第二项为 B 方的矩阵分解,第三项是正则项。其中,两方的 user profile 是共享的,item profile 是各自独有的。为了让两方可以及时的获得最新的 user profile,通过引入第三方服务器,由它来维护 p,并实时分发给 A 方和 B 方。
纵向联邦矩阵分解的训练过程:
① 服务器初始化并加密 user profile,参与两方各自初始化 item profile
② 服务器分发加密的 user profile 给 A 和 B 方
③ AB 两方解密 user profile 并基于本地数据计算 loss,更新各自的 item profile,然后两方分别计算 user profile 的梯度,并加密传输给服务器
④ 服务器汇集 user profile 梯度并更新 user profile 矩阵
⑤ 如此迭代,直到模型收敛
纵向联邦矩阵分解在 FATE 中的实现:
计算更新的公式如下:
纵向联邦矩阵分解在 FATE 中的使用:
首先是准备好数据,数据是以三元组形式保存的,包括有 user ID,item ID 和用户的评分。再配置好 FATE job 的文件,最后 submit job,就可以看到模型训练的结果。
2. 纵向联邦推荐案例
在这个案例中,参与各方是有相同用户,但用户特征不一样。这个场景也是很常见的,一个推荐系统和另外一个数据提供方进行合作来提高推荐效果。
在这个场景中,需要做特征交叉。其中因子分解机是处理交叉特征的常用算法。比如将性别和电影类型进行交叉,可以挖掘出男性在战争电影、男性在爱情电影、女性在战争电影和爱情电影的不同偏好程度。对于图中例子的特征交叉,可以知道不同地区的人对不同体育项目的偏好。
联邦因子分解机:
在数据可以自由传输的情况下,是很容易处理的。但是联邦场景下,如何进行交叉呢。联邦因子分解机的目标函数经优化后,由三部分组成:在 party A 和 party B 各自内部进行特征交叉,以及在 A 和 B 之间的特征交叉。我们分别在 A 方和 B 方做一部分计算,然后在合并起来,数据不出本地。同样的,通过引入第三方服务器,在加密的状态下在 A 方和 B 方之间传递模型参数和特征交叉求和的中间结果。
联邦因子分解机训练过程:
① Party A 和 Party B 分别初始化各自的模型
② Party B 基于自己的特征计算部分预估值和部分 loss,并加密发送给 A
③ A 方接收到以后,基于自己的特征计算部分预估值,并结合 B 方的预估值,计算最终的损失函数和梯度,然后将 B 需要的梯度和损失函数发送回 B
④ A 和 B 在完成梯度计算以后,分别将梯度进行加密并掩码,发送给第三方服务器
⑤ 第三方服务器解密并汇总梯度并发给 A 和 B
⑥ A 和 B 去除自己的掩码并更新自有模型
不断循环,直至收敛,最终得到自己那部分的模型。
联邦因子分解机推理过程:
在推理过程中,对于新样本,需要 A 方和 B 方共同参与,才能完成模型的预估。
① A 和 B 首先基于自己的模型和自己的特征计算自己的特征交叉结果以及跨合作方的特征交叉结果,并加密发送给第三方服务器
② 第三方服务器汇集的中间结果
③ 第三方服务器将汇总结果发送给 A 方,解密后即可使用
联邦因子分解机在 FATE 中的实现:
联邦因子分解机的预测函数和损失函数如下图所示。特别的,将 AB 两方共同完成的交叉项分解为各自需要完成的计算过程。
其核心逻辑有四个:
首先是实现预测函数;
然后计算 loss 和梯度;
发送给第三方服务器以及汇总,并更新;
分别发送给 ab 方,不断进行迭代。
联邦因子分解机在 FATE 中的使用:
① 参与方准备数据,数据是以矩阵的形式进行存储的,包括用户 ID,样本 ID,样本标签,每个特征的特征值。
② 定义好配置文件
③ Guest 提交训练任务,获得 jobid
④ 在 fate board 中查看中间结果,收敛情况,预估结果,预估准确率,并根据结果调整参数
3. 横向联邦推荐
横向联邦推荐是有大量相同的物品,但各方有不同的用户。比如不同地区的电影推荐系统中,内容是一样的,但用户群体不一样。每个参与方都是一个单独的用户,但推荐的电影是一样的。
那么用户数据不出本地,如何构建推荐系统呢。
横向联邦矩阵分解:
类似于纵向联邦矩阵分解,横向联邦矩阵分解是 item profile 共享。
横向联邦矩阵分解的训练过程:
① 服务器初始化并加密 item profile
② 服务器将加密的 item profile 发送给各参与方
③ 参与方解密 item profile 并基于本地数据计算 loss,更新各自的 user profile,并将 item profile 的梯度加密传输给服务器
④ 服务器汇总 item profile 的梯度并更新 item profiles
⑤ 完成以后,每个参与方都会有各自的 user profile 和 item profile,然后利用矩阵分解进行推荐
4. 联邦矩阵分解与传统矩阵分解的效果对比
以 movielens 数据集为例,将联邦矩阵分解和明文中心化的传统矩阵分解算法进行比较。从下图中可以看出 training loss 的变化趋势基本是一致的,因此可以说联邦矩阵分解是无损的,是可以保护用户隐私的。
04 联邦推荐云服务和应用
1. 目前腾讯云上提供两种接入方式
客户可以将自己的数据上传到腾讯云 FDN,在加密的环境下,和数据提供方进行联邦推荐模型训练,并最终保存到云服务上。然后就可以调用训练好的模型。优点是轻量级,快速接入测试,
另外一种是本地部署 FDN,优点是数据不出本地,安全可控。将应用数据上传到本地 FDN 中,FDN 以加密的形式,与云服务和数据提供方进行联邦建模,最后将训练好的模型发送回本地 FDN 上,进行调用。
2. 联合建模预测示意图
数据提供方和推荐系统分别处理自己的数据,然后进行特征加工,抽样到 FDN 系统中,FDN 会加密 id 匹配,并输出 id 交集或并集,进行模型训练。参与方和数据提供方会得到自己部分的模型,然后进行离线预测,评估效果或在线预测,不断的收集数据,不断的迭代和重复这个过程,优化模型。
3. 联邦推荐的应用
通过新闻推荐引擎和第三方数据提供方进行联邦学习,可以看到各种推荐指标都大幅提升。
联合第三方数据,在保证各方数据安全和用户隐私的情况下,可以做到更精确的用户分层。根据用户的数据,优化用户画像,判断是否对利润有不同的偏好,从而制定个性化的推送策略。最终提高了 30%的性能。
05 总结
推荐系统是数据驱动的应用,数据对效果的提升显著。在现实中,数据孤岛、隐私保护和数据安全是亟需解决的问题。微众银行首创联邦推荐,并将其应用于多个实际场景中取得了良好的效果。
联邦推荐算法 Github 地址:
https://github.com/FederatedAI/FATE/tree/master/federatedrec
今天的分享就到这里,谢谢大家。
作者介绍:
谭奔,微众银行人工智能部高级研究员。博士毕业于香港科技大学,主要研究方向为迁移学习、推荐系统、机器学习等,目前在微众银行人工智能部门负责推荐算法研发工作,曾就职于腾讯,负责广告转化率预估、商品推荐等工作。在 KDD、AAAI、SDM、TIST 等国际学术期刊会议上发表论文 10 余篇,多次在国际数据挖掘大赛中名列前茅。
原文链接:
评论