潜在因子模型(Latent Factor Model)是一种常见的数据降维技术,可以将高维数据表示为低维特征空间中的因子分解形式。假设我们有 nnn 个用户和 mmm 个物品,每个用户对某些物品有评分行为,那么可以用潜在因子模型来表示这些评分:
rij=μ+uiTvj+ϵijr_{ij} = \mu + u_i^Tv_j + \epsilon_{ij}rij=μ+uiTvj+ϵij
其中 rijr_{ij}rij 表示用户 iii 对物品 jjj 的评分,μ\muμ 表示全局平均值,uiu_iui 和 vjv_jvj 分别表示用户 iii 和物品 jjj 的潜在向量(或者说“因子”),ϵij\epsilon_{ij}ϵij 是一个随机噪声项,通常假设 ϵij\epsilon_{ij}ϵij 独立同分布于某个已知的概率分布,比如高斯分布。
为了满足差分隐私,我们需要保证相邻的数据集只有微小的变化会导致输出的概率分布变化也很小。具体地,考虑两个相邻的数据集 DDD 和 D′D'D′,它们只相差一个用户 iii 对物品 jjj 的评分,我们要保证通过概率分布 M(D)\mathcal{M}(D)M(D) 和 M(D′)\mathcal{M}(D')M(D′) 计算出的条件概率比值 M(D)M(D′)\frac{\mathcal{M}(D)}{\mathcal{M}(D')}M(D′)M(D) 不会太大。这里 M\mathcal{M}M 是模型的输出结果,即用户 iii 对物品 jjj 的预测评分。
为了方便计算,我们假设噪声项 ϵij\epsilon_{ij}ϵij 服从标准正态分布,即 ϵij∼N(0,1)\epsilon_{ij} \sim \mathcal{N}(0,1)ϵij∼N(0,1)。这时,模型的训练过程可以看成是最小化观测数据和模型预测之间的均方误差(MSE)加上一个正则化项:
minu,v∑(i,j)∈D(rij−μ−uiTvj)2+λ(∣∣ui∣∣2+∣∣vj∣∣2)\min_{u,v}\sum_{(i,j)\in D}(r_{ij} - \mu - u_i^Tv_j)^2 + \lambda(||u_i||^2 + ||v_j||^2)u,vmin(i,j)∈D∑(rij−μ−uiTvj)2+λ(∣∣ui∣∣2+∣∣vj∣∣2)
其中 λ\lambdaλ 是正则项的系数,保证模型不会过拟合。
接下来,我们考虑如何加入噪声使得这个模型满足差分隐私。为了简化推导,我们假设每个用户只对少量物品进行评分,且每个物品也只被少数用户评分,这样数据矩阵是非常稀疏的。此时,我们可以将每个元素 (i,j)(i,j)(i,j) 分别视为一个独立的查询,然后对每个查询都加入独立同分布的噪声 N(0,σ2ϵ)\mathcal{N}(0,\frac{\sigma^2}{\epsilon})N(0,ϵσ2),其中 σ\sigmaσ 是一个与查询结果范围相关的参数,ϵ\epsilonϵ 是差分隐私的隐私参数。注意到加入的噪声是与查询无关的,因此对于每个查询,模型预测的结果就变成了:
r^ij=μ+uiTvj+N(0,σ2ϵ)\hat{r}_{ij} = \mu + u_i^Tv_j + \mathcal{N}(0,\frac{\sigma^2}{\epsilon})r^ij=μ+uiTvj+N(0,ϵσ2)
于是,我们可以得到不加噪声和加噪声的模型预测之间的条件概率比值:
M(D)M(D′)=∏(i,j)∈D△D′exp(−(rij−r^ij)22σ2)exp(−(rij−r^ij′)22σ2)\frac{\mathcal{M}(D)}{\mathcal{M}(D')} = \prod_{(i,j)\in D\bigtriangleup D'}\frac{\exp(-\frac{(r_{ij}-\hat{r}{ij})^2}{2\sigma^2})}{\exp(-\frac{(r{ij}-\hat{r}'_{ij})^2}{2\sigma^2})}M(D′)M(D)=(i,j)∈D△D′∏exp(−2σ2(rij−r^ij′)2)exp(−2σ2(rij−r^ij)2)
其中,M(D)\mathcal{M}(D)M(D) 是在不加噪声时的条件概率,M(D′)\mathcal{M}(D')M(D′) 是在加噪声时的条件概率,DDD 是原始数据集,D′D'D′ 是添加了拉普拉斯噪声的数据集,r^ij\hat{r}_{ij}r^ij 是模型对 (i,j)(i,j)(i,j) 的预测评分,σ\sigmaσ 是控制隐私保护和查询精度之间的权衡参数。 △\bigtriangleup△ 表示两个集合的对称差集。此公式用于计算矩阵分解任务中差分隐私机制的参数 ϵ\epsilonϵ。
其中 D△D′D\bigtriangleup D'D△D′ 表示两个数据集的对称差分,即只包含在其中一个数据集中的元素。注意到噪声的方差是与隐私参数 ϵ\epsilonϵ 相关的,因此我们可以将上式改写为:
M(D)M(D′)=exp(ϵ2∑(i,j)∈D△D′(rij−r^ij)2−(rij−r^ij′)22σ2)\frac{\mathcal{M}(D)}{\mathcal{M}(D')} = \exp(\frac{\epsilon}{2}\sum_{(i,j)\in D\bigtriangleup D'}\frac{(r_{ij}-\hat{r}{ij})^2-(r{ij}-\hat{r}'_{ij})^2}{2\sigma^2})M(D′)M(D)=exp(2ϵ(i,j)∈D△D′∑2σ2(rij−r^ij)2−(rij−r^ij′)2)
接下来,我们需要计算上式中指数部分的值。注意到:
(rij−r^ij)2−(rij−r^′ij)2=(r^′ij−r^ij)(2rij−r^ij−r^′ij)(r_{ij}-\hat{r}{ij})^2-(r{ij}-\hat{r}'{ij})^2 = (\hat{r}'{ij}-\hat{r}{ij})(2r{ij}-\hat{r}{ij}-\hat{r}'{ij})(rij−r^ij)2−(rij−r^′ij)2=(r^′ij−r^ij)(2rij−r^ij−r^′ij)
因此,我们可以进一步得到:
M(D)M(D′)=exp(ϵ2σ2∑(i,j)∈D△D′(r^′ij−r^ij)(2rij−r^ij−r^′ij))\frac{\mathcal{M}(D)}{\mathcal{M}(D')} = \exp(\frac{\epsilon}{2\sigma^2}\sum_{(i,j)\in D\bigtriangleup D'}(\hat{r}'{ij}-\hat{r}{ij})(2r_{ij}-\hat{r}{ij}-\hat{r}'{ij}))M(D′)M(D)=exp(2σ2ϵ(i,j)∈D△D′∑(r^′ij−r^ij)(2rij−r^ij−r^′ij))
现在的问题是如何计算 r^ij\hat{r}{ij}r^ij 和 r^′ij\hat{r}'{ij}r^′ij 的值。由于加入的噪声是独立同分布的,因此对于每个查询 (i,j)(i,j)(i,j),我们可以独立地生成两个噪声 ϵij\epsilon_{ij}ϵij 和 ϵ′ij\epsilon'{ij}ϵ′ij,然后计算出对应的预测结果 r^ij=μ+uiTvj+ϵij\hat{r}{ij} = \mu + u_i^Tv_j + \epsilon_{ij}r^ij=μ+uiTvj+ϵij 和 r^′ij=μ+uiTvj+ϵ′ij\hat{r}'{ij} = \mu + u_i^Tv_j + \epsilon'{ij}r^′ij=μ+uiTvj+ϵ′ij。这样,我们就可以将上式进一步转化为:
M(D)M(D′)=exp(ϵ2σ2∑(i,j)∈D△D′(ϵ′ij−ϵij)(2rij−μ−uiTvj−ϵij−uiTvj−ϵij′))\frac{\mathcal{M}(D)}{\mathcal{M}(D')} = \exp(\frac{\epsilon}{2\sigma^2}\sum_{(i,j)\in D\bigtriangleup D'}(\epsilon'{ij}-\epsilon{ij})(2r_{ij}-\mu-u_i^Tv_j-\epsilon_{ij}-u_i^Tv_j-\epsilon'_{ij}))M(D′)M(D)=exp(2σ2ϵ(i,j)∈D△D′∑(ϵ′ij−ϵij)(2rij−μ−uiTvj−ϵij−uiTvj−ϵij′))
化简一下可以得到:
M(D)M(D′)=exp(−ϵ2σ2∑(i,j)∈D△D′(ϵ′ij−ϵij)22uiTvj)\frac{\mathcal{M}(D)}{\mathcal{M}(D')} = \exp(-\frac{\epsilon}{2\sigma^2}\sum_{(i,j)\in D\bigtriangleup D'}\frac{(\epsilon'{ij}-\epsilon{ij})^2}{2}u_i^Tv_j)M(D′)M(D)=exp(−2σ2ϵ(i,j)∈D△D′∑2(ϵ′ij−ϵij)2uiTvj)
现在的问题是如何计算 ∑(i,j)∈D△D′uiTvj\sum_{(i,j)\in D\bigtriangleup D'}u_i^Tv_j∑(i,j)∈D△D′uiTvj 的值。注意到这个值可以看成是两个低维向量空间的内积,因此可以用矩阵乘法来实现。具体地,我们可以构造两个矩阵 U∈Rn×kU\in\mathbb{R}^{n\times k}U∈Rn×k 和 V∈Rm×kV\in\mathbb{R}^{m\times k}V∈Rm×k,其中 kkk 是潜在因子的维度,然后令 Ui,:=uiU_{i,:}=u_iUi,:=ui 和 Vj,:=vjV_{j,:}=v_jVj,:=vj。这样,∑(i,j)∈D△D′uiTvj\sum_{(i,j)\in D\bigtriangleup D'}u_i^Tv_j∑(i,j)∈D△D′uiTvj 就可以表示为 UT(V−V′)U^T(V-V')UT(V−V′)。于是,我们就可以将条件概率比值进一步转化为:
M(D)M(D′)=exp(−ϵ2σ2∣∣UT(V−V′)∣∣F2)\frac{\mathcal{M}(D)}{\mathcal{M}(D')} = \exp(-\frac{\epsilon}{2\sigma^2}||U^T(V-V')||_F^2)M(D′)M(D)=exp(−2σ2ϵ∣∣UT(V−V′)∣∣F2)
这里 ∣∣⋅∣∣F||\cdot||_F∣∣⋅∣∣F 表示 Frobenius 范数,即矩阵所有元素的平方和的平方根。注意到这里用到了矩阵 UUU 和 VVV 的乘法,因此我们需要保证这个乘法满足差分隐私。
为了达到这个目的,我们可以对每个用户的潜在向量 uiu_iui 加入独立同分布的噪声 N(0,kσϵ)\mathcal{N}(0,\frac{\sqrt{k}\sigma}{\epsilon})N(0,ϵkσ),对每个物品的潜在向量 vjv_jvj 加入独立同分布的噪声 N(0,kσϵ)\mathcal{N}(0,\frac{\sqrt{k}\sigma}{\epsilon})N(0,ϵkσ)。这样,对于不同的数据集 DDD 和 D′D'D′,我们可以得到两个带噪声的矩阵 U~\tilde{U}U~ 和 V~\tilde{V}V~,它们的元素都服从概率分布 N(0,kσ2ϵ2)\mathcal{N}(0,\frac{k\sigma^2}{\epsilon^2})N(0,ϵ2kσ2)。然后,我们可以将矩阵 UUU 和 VVV 分别替换为 U~\tilde{U}U~ 和 V~\tilde{V}V~,得到带噪声的乘积矩阵 U~TV~\tilde{U}^T\tilde{V}U~TV~。由于加入的噪声是独立同分布的,因此对于任意的两个查询 (i,j)(i,j)(i,j) 和 (i′,j′)(i',j')(i′,j′),它们生成的噪声是独立的,因此它们对应的乘积矩阵元素也是独立的。这意味着,整个矩阵 U~TV~\tilde{U}^T\tilde{V}U~TV~ 满足 (ϵ,δ)(\epsilon,\delta)(ϵ,δ)-差分隐私,其中 δ\deltaδ 是一个非常小的常数,可以忽略不计。
综上所述,我们证明了在潜在因子模型中加入独立同分布的噪声可以满足差分隐私。具体地,对于每个查询 (i,j)(i,j)(i,j),我们生成两个独立的噪声 ϵij\epsilon_{ij}ϵij 和 ϵ′ij\epsilon'{ij}ϵ′ij,然后计算 r^ij=μ+uiTvj+ϵij\hat{r}{ij} = \mu + u_i^Tv_j + \epsilon_{ij}r^ij=μ+uiTvj+ϵij 和 r^′ij=μ+uiTvj+ϵ′ij\hat{r}'{ij} = \mu + u_i^Tv_j + \epsilon'{ij}r^′ij=μ+uiTvj+ϵ′ij。接下来,我们使用 r^ij\hat{r}{ij}r^ij 和 r^′ij\hat{r}'{ij}r^′ij 计算条件概率比值,得到:
M(D)M(D′)=exp(−ϵ2σ2∣∣UT(V−V′)∣∣F2)\frac{\mathcal{M}(D)}{\mathcal{M}(D')} = \exp(-\frac{\epsilon}{2\sigma^2}||U^T(V-V')||_F^2)M(D′)M(D)=exp(−2σ2ϵ∣∣UT(V−V′)∣∣F2)
为了保证乘法 UT(V−V′)U^T(V-V')UT(V−V′) 满足差分隐私,我们对矩阵 UUU 和 VVV 加入独立同分布的噪声,得到带噪声的矩阵 U~\tilde{U}U~ 和 V~\tilde{V}V~,然后将它们替换成原来的矩阵,在加噪声的乘积矩阵 U~TV~\tilde{U}^T\tilde{V}U~TV~ 中进行乘法运算。最终,整个过程都满足 (ϵ,δ)(\epsilon,\delta)(ϵ,δ)-差分隐私,其中 δ\deltaδ 是一个非常小的常数,可以忽略不计。
上述内容是基于原始的“Differential Privacy for Matrix Factorization”论文进行阐述的。该论文由McSherry等人撰写,发表在ACM Conference on Computer and Communications Security (CCS) 2009上。
上一篇:TCP/UDP协议
下一篇:C语言—程序环境和预处理(1)