Self-Guided Learning to Denoise for Robust Recommendation
公众号: Intelligent Computing Lab
1.核心思想
-
以往的去噪方式,容易在去除噪声的时候,一并把hard sample给删除(比如我记得何向南有一篇去噪的文章,将计算loss时梯度大的样本认为是噪声,但它也有可能是决策边界的样本)。亦或者他们的方法需要人为的找一些合适的参数,不够自适应。
-
那么本文的方法是:a.记录模型的记忆,让模型保留干净的信息。b.用模型的记忆,给予不同的样本不同loss权重。(那么为什么这种方法可以保留困难样本呢?)
-
文章用到的技术比较多:模型记忆,元学习,LSTM(虽然是做二部图推荐,但确实又LSTM)。
2.算法框架
2.1记忆阶段
作者喜欢叫这个阶段为抗噪阶段。虽然文章较为花里胡哨的反复说,记忆,但是在本文中,他们用到的记忆也就是模型的决策结果(用户u是否会喜欢项目i)。 这个阶段的任务是找到哪些(u,i)交互对被模型记住了。
2.1.1记录模型对交互的推测
-
模型在第t个epoch,认为用户u是否会喜欢项目i,用记录,取值为{0,1}。具体到代码实现而言,一个user记录多少个item呢,训练集这个user有N个item交互记录,就记录topN个item的推测结果。
-
其中,就是对近h轮的推测结果取均值。那么这个值有什么用呢?如果这个user和item的pair近几轮的测试结果主要都是1,也就是说,那就说明模型已经记住了这个交互对。
-
这么做的话记忆里面其实也有噪声信息,不能一直这么训练下去。
2.1.2找到平衡的记忆点
-
这里作者定义了两个指标,类似precision和recall:
-
MP和MR分别表示memorization precision和memorization recall。
-
表示第t个epoch,所有记忆的集合,,,是真实标签(文中说,其实真实的label因为噪声的存在,所以不可知,但这里明明就用了),而D就是train dataset中记录的所有user和item的交互情况{0,1}。
这里作者还给出对这两个指标的分析和训练过程中的变化趋势:
-
因为训练过程中噪声信息逐渐起作用,MP越来越小,MR越来越大。具体证明论文中也有给出。
-
之前有一个问题,让模型记忆,记忆到什么时候,就记忆到MP=MR的时候,因为我们希望MR和MP都是越大越好,所以取了一个平衡点,也就是说:
(注意到上面公式中的D,前面带t,后面不带t)。是D中噪声数据的占比,这也是未知的。
-
虽然未知,但是我们可以估计,用归一化后的loss和二元高斯混合模型(GMM)+期望最大法(EM),拟合一个双峰分布,分别捕捉真实标签概率和虚假标签概率。这样我们就可以判断一个(u,i) pair是真实的还是噪声。那么也可以评估了:
-
是(u,i)的loss,(这里就有一个问题了,如果我们用的是pair-wise loss,loss中既有正样本,又有负样本,如何衡量这个user和item对的loss?但是作者又说,pair-wise loss也是可以用的,具体怎么用文章也没说)代表model,是GMM中更大的那个均值。
-
审视一下这个过程,个人认为作者是用GMM,强行在所有的loss中,找出真实交互的loss和虚假loss的分布。
-
不过可以看出作者其实也是基于一个假设,噪声数据会有更大的loss,那他又是怎么避免筛除掉hard sample的?
-
-
总之,我们得到了之后,的时候,我们就可以停止记忆了,相当于推测了这个数据集理论上会有多少个干净的数据,然后只记忆这么多数据。选择评估的好处是,计算量极小,不必每轮计算MR、MP。
2.2自引导阶段
2.2.1用记忆数据去噪
-
去噪的方式是给loss加权,取到最小化带权Loss的模型:
其中k代表第k个sample,代表训练集。是一层MLP,是他的参数,已知loss是一个标量,这是要对一个标量MLP吗?多少有点迷惑。是关于的函数。
-
但是其实上面有两组参数,和,对于,我们期望最小化:
-
但是上面两个loss写出来都是argmax,文章又说是最小化,有点迷惑,难道是在优化最大最小值?而且w其实paper里面也没有解释是什么。一个是让训练集中的带权loss最小,一个是让记忆中交互对loss最小。联合起来看,那就是说,作者认为记忆里面的交互对,都是真实的数据,那么他们的loss就应该很小,以此为依据训练一个MLP判断器,再喂进来一个loss很大,那说明它可能有问题。
-
为了避免用双重循环反复优化和,作者提出基于元学习的方法,单层循环优化:
先固定对做一次虚假的更新,在虚假跟新的结果上,固定更新,最后再用更新过的,对对来一次真实的更新。
2.2.2自适应去噪调度器
为什么需要这一步呢?因为之前说到的,记忆阶段用全量数据,难免学到噪声数据,所以我们还得去噪,选择没有噪声信息的记忆。
要判断一个记忆样本m是否是噪声,需要用到两个指标,loss ,和两次对model 进行反向传播的梯度的相似性,这里作者用余弦相似度刻画:
相似度有什么用呢?如果Loss很大,并且两次传播时,梯度很相似,那说明这个记忆起了贡献(记忆的梯度方向和模型优化目标的方向时一致的)。但如果loss很大,但是梯度相似度很小,则说明可能这个样本是噪声数据。
是我们期待设计的一个理想的调度器的输出,根据后面用softmax的形式计算来看,相当于判定样本是否属于噪声数据的依据。作者选择使用LSTM作为调度器,但是介于采样过程不可微,softmax更改为Gumbel-Softmax:
是0-1之间的随机数,是控制离散数值到连续数值插值的因子(默认0.5)。而后模型就可以选择大的记忆数据进行辅助训练。
3.实验
3.1整体对比
3.2权重分析
3.3消融实验
-
w/o DLS:在噪声感知阶段,去除去噪学习的部分
-
w/o ADS:去除LSTM调度器
可以看出,记忆加权贡献较大,LSTM调度器效果不是很明显。
4.个人总结
-
虽然作者花里胡哨用了一大堆方法,但是整体来说就是平滑记录了模型的决策结果,基于这些记忆训练一层MLP判断样本是否噪声,给与相应的权重。最后训练一个LSTM对记忆采样,只用记忆中干净的部分。
-
给我们主要的启发是,如何记录模型的记忆,如何使用记忆给样本loss加权。这两个是文章的核心框架,其他说了很多,也都是围绕这两个部分展开的锦上添花。
-
文章里面说可以用pair-wise loss,但是以BPR为例,就含有正负样本对,一个loss是(u,i,j)的三元组的结果。此时怎么定义(u,i)的loss,有待从代码中考证?