基于对抗学习的隐私保护推荐算法
The following article is from 机器学习与推荐算法 Author ML_RSer
在这项工作中,本文研究了在保持推荐算法有效性的同时,将用户的特定保护信息从学习的交互表征中移除的可能性和挑战。具体来说,本文将对抗训练纳入到变分自编码器MultVAE架构中,从而形成了一个新的模型——基于对抗训练的多项式自编码器模型(Adv-MultVAE),其目的是去除受保护属性的隐性信息,同时保持推荐性能。通过在两个数据集上进行实验来评估偏见缓解方法的有效性。结果表明,Adv-MultVAE虽然在性能上略有下降(在NDCG和召回率方面),但在很大程度上缓解了模型的内在偏差。
更多关于对抗学习在推荐系统中的应用可以阅读之前总结的文章:推荐系统中的对抗机器学习技术总结。
代码:https://github.com/CPJKU/adv-multvae
本文的训练过程旨在从中间特征中删除受保护属性的信息,同时并保持推荐性能。为此,模型的损失函数被定义为以下最小-最大博弈问题:
其中,对抗网络的损失函数被定义为交叉熵损失,因为其本质是一个分类任务,即预测敏感属性的类别;推荐任务的损失函数则被定义为下式:
其中,为输入的重构损失,比如平方损失,为正则项用来保证编码器的分布与先验尽可能的接近。
对于本文的损失函数直观的理解是在保证推荐性能的基础上,尽可能的减少中间变量z中所携带的敏感信息。
考虑到众所周知的优化min-max损失函数的复杂性,受前人工作的启发,本文在对抗网络和中间变量之间添加了一个梯度反转层。在训练过程中,在前向传播中充当恒等函数,而在反向传播中,它将计算出的梯度缩放为。在推理时对模型没有任何影响。本文把参数𝜆称为梯度反转缩放。通过在模型中采用,模型的整体损失就可以被重新表述为标准的风险最小化的基本设置,因此可以达到快速收敛的目的。
该公式就能够通过标准的基于梯度的优化算法来优化模型。关于梯度反转层GRL的Pytorch代码如下,在前向传播过程中保持原值不变,在反向传播的过程中乘上了梯度缩放系数。
from torch.autograd import Function
class GRL_(Function):
"""
Gradient reversal functional
Unsupervised Domain Adaptation by Backpropagation - Yaroslav Ganin, Victor Lempitsky
https://arxiv.org/abs/1409.7495
"""
@staticmethod
def forward(ctx, input, grad_scaling):
ctx.grad_scaling = grad_scaling
return input
@staticmethod
def backward(ctx, grad_output):
# need to return a gradient for each input parameter of the forward() function
# for parameters that don't require a gradient, we have to return None
# see https://stackoverflow.com/a/59053469
return -ctx.grad_scaling * grad_output, None
关于本文的细节和实验结果可阅读原论文。
往期推荐