协同过滤算法除了捕捉用户潜在的消费模式外,还会学习用户特定的人口统计学特征或受保护信息等特征,如性别、种族和地理位置位置。这些偏见(Bias)信息会进一步影响推荐系统(RS)的决策,使得推荐算法会提供给不同用户子群的内容进一步分离,这将引起对用户受保护属性泄露的隐私问题。通过观察下图,可以发现基本的推荐算法(MultVAE)存在性别上的偏差,使得攻击者可以很容易的识别这种模式并进行敏感属性的推测。
更多关于对抗学习在推荐系统中的应用可以阅读我之前总结的文章:推荐系统中的对抗机器学习技术总结。
代码: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
由于公众号试行乱序推送,您可能不再准时收到机器学习与推荐算法的推送。为了第一时间收到本号的干货内容, 请将本号设为星标,以及常点文末右下角的“在看”。