华为 | ReLoop:自纠正地训练推荐系统

2022-09-19 10:21:33 浏览数 (1)

关注我们,一起学习~

title:ReLoop: A Self-Correction Continual Learning Loop for Recommender Systems link:https://arxiv.53yu.com/pdf/2204.11165.pdf from:SIGIR 2022

1. 导读

目前的模型训练过程只获取用户的反馈作为标签,而没有考虑到之前推荐中的错误。本文为推荐系统构建一个自纠正学习循环(称为 ReLoop),从而从之前的推荐错误中学习知识。构建自定义损失来鼓励每个新模型版本在训练期间减少对先前模型版本的预测误差。

核心:利用前一次训练的预测结果来约束当前轮次训练的性能不能差于前一次,简单有效

2. 方法

image.png

2.1 生产中的训练循环

推荐模型的训练循环如图 1(a) 所示。

  • 首先,从用户对曝光商品的隐式反馈中收集训练数据,即点击商品作为正样本,未点击商品作为负样本。
  • 其次,使用此类数据的滑动窗口(离线/增量训练模式)训练排序模型。
  • 然后,新模型将更新为在线服务。在在线推理阶段,候选商品由模型评估并根据预测分数的排名显示给用户。
  • 最后,在线曝光和点击事件将被记录在用户行为日志中,进而触发新的一段时间的训练。

可以发现相邻训练程序之间的联系非常松散,因为每个程序都独立地训练自己的模型。换句话说,当前的训练过程没有充分利用来自先前过程的信息,并且忽略了先前预测中的错误。

2.2 自纠正模块

图 1(b) 展示了自纠正模块的细节。每个样本都有一个标签y,它是从用户的隐式反馈(例如点击)生成的。预测的点击率 (pCTR) 可以在模型推断期间记录,它表示用户点击商品的概率。将样本的pCTR与其真实标签之间的差距定义为所犯的错误,根据上一个版本的模型的预测可以得到每个样本的pCTR

tilde{y}_{last}

。至于当前误差,它表示当前预测

hat{y}

与训练期间的真实标签之间的差距。人类可以从错误中学习和启发,因此这里也希望模型在时间t的性能优于上一个t-1版本

为了达到上述“希望”,作者设计了一个损失函数来对训练过程进行约束,这当前的误差要小于之前的误差。以正样本(y=1)为例,公式如下,

y-hat{y} leq y-tilde{y}_{text {last }} quad Leftrightarrow quad tilde{y}_{text {last }}-hat{y} leq 0

从而损失函数可以构建为下式,即约束正负样本的预测值在前后两次训练中的关系

mathcal{L}_{s c}=y max left(widetilde{y}_{text {last }}-hat{y}, 0right) (1-y) max left(hat{y}-widetilde{y}_{text {last }}, 0right)

2.4 训练策略

除了上述损失函数还需要正常的推荐模型训练,此处采用交叉熵损失,

mathcal{L}_{c e}=-y log hat{y}-(1-y) log (1-hat{y})

因此总损失为

L=alpha L_{sc} (1-alpha)L_{ce}

2.5 和知识蒸馏相比

本文方法和知识蒸馏存在相似之处,知识蒸馏的损失函数可以表示为下式,

mathcal{L}_{k d}=-tilde{y}_{text {last }} log hat{y}-left(1-tilde{y}_{text {last }}right) log (1-hat{y})

通过知识蒸馏,将前一次的预测作为这一次的标签,可以使得当前轮次的训练至少要达到上一轮的效果,这个想法和本文的想法的一样的,但是上述损失存在的问题就是前一轮的预测结果本身可以存在问题,即教师模型的预测可能错误。从下面的实验结果中也可以发现本文方法要比KD略好。

3. 结果

0 人点赞