Secure Federated Matrix Factorization学习总结

Secure Federated Matrix Factorization学习总结

背景

传统的矩阵分解推荐系统,会泄漏用户的评分信息、特征向量,可能大家会觉得泄漏这两种信息不重要,但是通过这两种信息,恶意攻击者可以进行inference attack,也就是从这两种信息推断用户的性别、年龄、住址,而后面的这些信息都属于非常隐私的数据。
目前有解决方案:Obfuscation-based和Full-Homomorphic encryption-based。前者主要采用的方法是通过将用户的原始偏好数据进行混淆后,再发送到中央服务器,以实现某种程度上的隐私保护。显而易见的是,这种方法会导致预测精度的损失。为了保证预测精度,Full-Homomorphic encryption-based方法引入了一个第三方的私密服务提供商,然而这种方法会增大系统实现难度,同时这类私密服务提供商的可靠性难以保障,一旦他们与推荐服务节点存在不正当合作关系,那对用户来说,任何信息都毫无隐私可言。
先说两个
Horizontal Federated Learning:用户的特征空间相同,然而用户群体不同。这类问题下,我们一般规定,用户是诚实的,系统的目标是保护用户的隐私,免于受到诚实但好奇的服务器的侵犯。

Homomorphic Encryption:一种仅享有数据处理权,但不具备数据访问权的方法。换句话说,这种方法允许任何第三方对已经加密过的数据进行运算,而不可以在运算前对数据进行解密。

在这里插入图片描述
在矩阵分解推荐系统中,我们通常会拿到一个稀缺的用户评分矩阵 X,而我们的任务是通过计算出user profile 矩阵U和item profile矩阵V,来将X中的空缺信息补全。一般来说,SGD(Stochastic Gradient Descent,随机梯度下降)是用来解决矩阵分解的主流方法。具体loss function和updating formula的定义如图所示。

分布式矩阵求解

在这里插入图片描述
显而易见的,想要保护用户的隐私,就是将服务器与用户的数据进行隔离,避免服务器对用户数据的直接访问,所以我们希望用户可以把自己的数据保留在本地。

基于此,我们设计了一个分布式的矩阵分解系统,在这个系统中,所有的评分数据都掌握在用户手中。一个全局的item profile矩阵为所有用户提供一个本地的update,同时用户将会把gradient传回给服务器,用来更新item profile。总结来说,服务器只会收到用户的gradient,不会收到用户的任何评分信息。

这样看来,我们的任务目标就实现了,但是让我们再思考一个问题,传输gradient就真的能保障用户隐私了吗?
在这里插入图片描述
如果已知任意2个连续step的gradients,已知user profile的更新公式,我们可以求得一个多元高阶方程组7、8、9。求解这个方程组的过程比较复杂,我们在这里不对求解过程做过多描述,仅仅把结果展示在途中。在等式24中,u是唯一的未知量,并且我们已知u一定存在一个实数解。我们可以利用一些迭代方法(比如牛顿法)来求得一个数值解。当我们算出u,评分信息r就可以利用等式25求解出来。

总结来说,我们刚刚证明了在矩阵分解场景下,gradient会泄漏用户的信息。那么我们又该怎么解决这个问题呢?

联邦矩阵求解

在这里插入图片描述
我们的解决方案是对系统中加入homomorphic encryption,也就是联邦矩阵分解系统。假设用户和服务器已经实现了对密钥的生成和分发,其中服务器拥有公钥,用户拥有彼此相同的私钥,那么整个系统就可以分为4个步骤:

第一步,对参数进行初始化,参数包括item profile矩阵和user profile矩阵,与此同时服务器对item profile使用公钥进行加密;
第二步,服务器提供加密后的item profile矩阵,供所有的用户来进行下载;

第三步,用户进行本地的update,这一步中可以拆分成若干个环节:用户首先下载加密后的item profile矩阵,并将其解密成一个plaintext V,然后用户会进行本地的update并计算gradient,最后用户会对gradient进行加密并且将ciphertext发给服务器;

接下来让我们回到整体的架构,在第四步,服务器在接收到加密后的gradient之后,会根据附加的homomorphic encryption对item profile矩阵进行更新,请注意,服务器会提供给用户最新一次加密后的item profile用作下载,此时我们就需要再一次回到第二步。

整个系统通过重复第二、三、四步,会实现整个训练过程。一般来说,用户的评价信息由一个系数矩阵组成,这也就意味着一个用户的评价其实是非常有限的。因此,两个不同的设置在我们的系统中是implemented。这两个设置会遵循系统的各个环节然而会在用户的上传环节由些许的不同。其中一种设置叫做fulltext,在这种设置中,用户会对所有的item都会上传gradient,当用户对某一个item不做出评价时,gradient为0;另外一种设置叫做parttext,用户只会将评价后的item的gradient进行上传。

这两种方式有利有弊,parttext会泄漏哪些item是用户打过分的,同时在计算效率上表现更好,而fulltext不会泄漏用户的信息,但是会需要更多的计算耗时。

猜你喜欢

转载自blog.csdn.net/Rick_rui/article/details/129555360