Learning to Recommend via Meta Parameter Partition 走读

将Reptile用于新闻推荐这一现实场景中。本文提出将模型参数分为用户不变参数(fixed)与用户自适应相关参数(adaption)解耦,线下训练不变参数,线上训练自适应相关参数。论文提出的方法不仅节省了存储和线上训练时间,而且可以在持续微调用户特定参数的同时处理灾难性遗忘。

摘要

在本文中,我们提出基于元学习方法解决推荐中的一个重要问题-用户冷启动。先前的元学习方法为每个新用户微调所有参数,这在计算和存储上都非常昂贵。相反,我们将模型参数分为固定部分和自适应部分,并开发了两阶段元学习算法来分别学习它们。捕获用户不变特征的固定部分由所有用户共享,并在离线元学习阶段进行学习在在线元学习阶段,学习了捕获用户特定功能的自适应部分。通过将用户不变参数与用户相关参数解耦,所提出的方法比以前的方法更有效且存储更便宜。对生产数据进行的实验表明,与baseline相比,该方法收敛更快,性能更高。 不进行在线元模型微调的元训练将AUC从72.24%增加到74.72%(绝对改善2.48%)。 与离线元训练相比,在线元训练的绝对改善率进一步提高了2.46%。

Intro

个性化的推荐系统在基于Web的移动应用程序中扮演着越来越重要的角色。学习推荐的目的是学习一种训练范例,该范例将用户历史记录中的一组商品作为输入,并生成可应用于新商品的功能或用户模型,并预测该用户点击该商品的可能性–点击率(CTR)预测。传统矩阵分解方法面临的主要挑战之一是为顺序到达的新用户做出个性化推荐-用户冷启动问题。

解决冷启动问题的常用方法是利用其他用户的信息来帮助进行模型训练。例如,McMahan等。 通过对所有用户使用联合训练的统一模型,针对所有用户提出联合学习。这种方法的局限性在于,学习的模型偏向于主要兴趣,并且由于缺乏新用户的训练数据,因此可能无法反映新用户的个人兴趣。诸如MAML 之类的元学习算法为学习新任务/用户模型的良好初始化提供了一种有前途的方法。但是,以前的元学习方法每个新用户微调所有参数,这在计算和存储上都是昂贵的。

在本文中,我们建议将模型参数分为固定部分和自适应部分,并开发一种两阶段元学习算法来分别学习它们。捕获用户不变特征的固定部分由所有用户共享,并在离线元学习阶段进行学习。在在线元学习阶段,学习了捕获用户特定功能的自适应部分。通过将用户不变参数与用户相关参数解耦,所提出的方法比以前的方法更有效且存储更便宜。

我们在新闻推荐的实际问题上评估了所提出的算法。生产数据集是从我们的新闻推荐平台收集的。我们用来自57,000名用户的大约595k条记录训练了该模型,并评估了来自2000名新用户的17,000条记录。每个训练和测试用户平均每个会话分别只有10条记录和8条记录。这是典型的几次学习(few-shot )设置。实验结果表明,与baseline相比,该方法收敛速度更快,性能更高。没有在线元模型微调的元训练将AUC从72.24%增加到74.72%(绝对改善2.48%)。我们的算法在在线元训练期间通过其他训练示例/迭代不断进行改进,并且比离线元训练进一步获得2.46%的绝对改善。

我们的主要技术贡献包括三个方面:首先,我们将模型参数分为固定部分和自适应部分,以分别捕获用户不变性和依赖于用户的特征。其次,我们开发了离线和在线元学习算法,分别学习固定参数和自适应参数。第三,我们在生产数据上评估了我们的算法,并展示了其相对于传统方法的优势。

相关工作

我们的工作与点击率预测,few-shot学习,元学习,在线学习和持续学习密切相关。在本节中,我们将简要介绍这些领域中的相关工作。

CTR预测:近年来,几种基于深度学习的方法已应用于推荐系统中的CTR预测。深度神经网络(DNN)有潜力学习表达特征以进行准确的CTR预测。基于CNN的模型偏向于相邻要素之间的交互。基于RNN的模型适用于具有顺序依赖性的数据。基于FNN的模型受预训练因子分解机(FM)的能力限制。 PNN在嵌入层和完全连接层之间引入了产品层。 Wide-Deep结合了广泛和深入的模型,其中广泛依赖于要素工程。 DeepFM以端到端的方式对低阶和高阶特征交互进行建模。最近,已经提出了基于增强学习的方法来对用户行为和商品推荐进行建模。所有这些方法都不能很好地解决冷启动问题。相反,通过使用在线元学习,我们的方法可以很好地处理消费记录较少的用户。

few-shot学习:DNN的巨大收益依赖于大量标记的训练数据。然而,在许多情况下,例如推荐系统中的冷启动问题,标记为新用户的训练数据非常有限。这就需要用few-shot学习技术解决问题。处理有限训练数据的一种流行方法是转移学习,它可以在具有大量数据的源任务上对模型进行预训练,并在具有少量数据的目标任务上进行微调。当一组源任务可用于预训练模型时,转移学习的扩展是多任务学习。与这些鲜为人知的学习方法相反,我们采用元学习来转移用户之间共享的知识。如图1所示,元学习比传递学习和多任务学习生成更好的模型参数初始化。(MAML论文详细提到这三种学习的区别)链接
Learning to Recommend via Meta Parameter Partition 走读

推荐元学习:元学习提供了一种有效的方式,可以通过共享参数,共享模型或共享初始化在用户之间执行转移学习。所有这些方法都假定训练数据可立即获得,并以批处理模式训练模型。相反,我们的方法适用于更现实的情况,即训练数据按顺序到达。最近,提出了一种用于处理顺序数据的在线元学习算法,并在几种计算机视觉任务上显示了优势。这些元学习方法的缺点在于,它们会为每个新用户微调所有参数,这在计算和存储上都是昂贵的。相比之下,我们的方法使所有用户模型共享用户不变的参数,从而节省了存储和适应时间。

持续学习:我们的问题设置与持续学习有关。近年来,已经探索了利用神经网络进行持续学习的方法。基于克服灾难性遗忘(catastrophic forgetting)的方法,可以将当前方法分为模型大小固定和模型大小增加的方法。具有固定模型大小的方法在学习新概念/任务时采用某些约束来控制参数更改,或者使用其他内存来存储有关先前数据/任务的某些信息以进行再训练。随着模型大小的增加,方法获得的新任务将添加少量参数,同时保持先前学习的参数不变。与以前的工作不同,我们的方法将用户不变参数与用户依赖参数解耦,并且有可能通过保持用户不变参数固定并仅更新用户依赖参数来处理灾难性遗忘。

在线学习:类似于持续学习的设置,在线学习通过流任务处理顺序设置。早期的一项工作是跟随领导者(FTL),并进行各种改进。我们在在线学习环境中进行元学习,并推导了一种有效的在线元学习算法,该算法捕捉了在线学习的实践并得出了可喜的实验结果。

问题表述

构建个性化推荐系统的一种常用方法是估算用户的点击率(CTR),即用户单击推荐项目的可能性,并使用CTR对要显示给用户的商品进行排名。 因此,准确的点击率预测对于推荐系统很重要。

个性化点击率预测问题

我们将点击率预测公式化为二进制分类问题。 训练数据是n个实例(X,y)的集合,其中X是通常由一对用户和商品属性组成的m字段(或m-slot)数据记录,y指示用户是否单击项目。 y = 1表示用户单击该项目,否则y = 0。 问题是要学习用θ参数化的函数或用户模型,以预测用户单击特定项目的可能性。

传统推荐系统使用统一的用户模型来预测新用户的点击率,并且使用所有用户数据对模型进行训练。 相比之下,个性化推荐系统具有针对每个用户的模型,该模型使用每个用户自己的数据进行训练。 当新用户或偶尔使用的用户的训练数据很少时,学习的模型将过度拟合训练数据。 元学习提供了一种处理少量学习的方法。

Meta Learning 用于模型初始化

我们考虑学习将用户CTR作为一项任务进行预测的用户模型,并在元学习设置中增加个性化CTR预测。

元学习的基本思想是使用一组源任务{⌧1,…⌧k}来学习一个元模型,该元模型的参数用于初始化每个用户模型的参数。这种元初始化使学习新任务所需的训练数据和步骤比转移学习和多任务学习所需的训练数据和步骤少。

在个性化CTR预测的背景下,我们使用一组具有大量记录的用户来训练元模型,然后使用元模型参数初始化每个新的用户模型以进行在线微调。 设被采样到的任务的损失为L⌧。 目标函数是使用已更新k轮参数后的函数Uk(θ)后,将预期损失降至最低:
Learning to Recommend via Meta Parameter Partition 走读
本文采用Reptile (一种简化的MAML 算法)来计算元梯度。

这种形式使在线元学习无需特殊的训练和测试阶段,并且使其成为我们在线连续适应环境中更自然的选择。

两阶段元学习算法

我们的方法包含每个用户的元模型和用户模型。 元模型用于使用θ0初始化用户模型,并且用户模型提供用于更新元模型的元梯度。我们的训练包括两个阶段:在源任务上的离线元训练以及在线元任务的训练和测试。 在离线学习阶段,对元模型进行训练以捕获用户不变特征并为每个用户模型提供良好的初始化。在在线学习阶段,每个用户模型都经过训练以适应不断变化的个人特征的数据分布,同时保持由元模型捕获的用户不变特征不变。 通过将用户不变参数与用户相关参数解耦,所提出的方法不仅节省了存储和适应时间,而且可以在持续适应用户特定参数的同时处理灾难性遗忘。 以下小节详细介绍了这两个阶段。

离线元学习初始化

离线元学习的目标是训练元模型以捕获用户不变特征并为每个用户模型提供良好的初始化。

以Reptile为基础的算法伪代码Learning to Recommend via Meta Parameter Partition 走读
离线元学习过程包括两个循环。 外循环更新元模型参数,内循环更新训练任务参数。 在算法开始时,使用随机初始化元模型参数。 在每个内部循环中,从源任务集中采样一个任务,并使用元模型参数初始化任务模型参数。 然后从任务中采样k批数据,以用k个SGD步骤更新任务模型参数。 在每个外部循环中,计算元梯度来更新元模型参数

个性化微调的在线元学习

在在线学习中,用户和用户点击记录均按顺序到达。 我们推导了一种在线元学习算法,可以在用户单击或跳过推荐的项目后,逐步其作为可用于每个用户的模型更新的训练数据。 在这里,我们使用在离线训练阶段学到的元模型来初始化每个用户模型,并在保持其余层固定的同时对嵌入层和分类器层进行微调。 因此,我们将模型参数分为两组:固定组和自适应组
Learning to Recommend via Meta Parameter Partition 走读

在线元学习过程包含两个循环。 外循环更新元模型的自适应参数,同时保持固定参数不变; 内部循环更新用户特定的参数。 在算法的开始,使用在离线训练阶段学习的参数初始化元模型。 在每个内部循环中,对于从目标任务集按顺序到达的每个任务,使用元模型参数初始化任务模型参数。 然后,对于在任务中顺序到达的每个新样本,将获得“单击或不单击”标签,并使用k个SGD步骤更新特定于任务的模型参数。 在每个外部循环中,基于Reptile计算的元梯度更新元模型的自适应参数。

实验

生产数据

我们从新闻系统中收集了两个小时的生产数据集。 第一个小时的数据用于离线元数据训练,第二个小时的数据用于在线元数据训练和测试。 图3显示了训练和测试阶段每个用户的历史记录数的直方图分布。 训练数据和测试数据都具有对应于四种类型用户的四种模式(参见图3):有大约20条记录的活跃用户,有大约13条记录的常规用户,有大约7条记录的低活用户以及有大约3条记录的新用户。

表1总结了收集到的数据,从中我们可以看到,尽管大约有595k训练数据,但是对于每个用户而言,平均只有10条记录用于训练,这是典型的few-shot学习设置。 训练和测试用户之间没有重叠。 因此,该数据集可以测试所提出算法的泛化能力和快速适应能力。

DNN网络结构

为了公平地比较,所有算法都使用相同的神经网络体系结构进行训练。 该网络包括用于每个输入slot功能的一个嵌入层和三个全连接的隐藏层,然后是用于二分类的softmax层。 输入由571个slot组成,分别编码用户功能(例如年龄,性别,位置)和新闻项功能(例如item-id,title-term,item-category,author-id)。 每个slot属性均使用16维嵌入进行编码。 三个隐藏层分别包含128、64、32个隐藏单元。 输出层包含用于二进制分类的两个单位。

参数设置

我们用从57,000个用户那里收集的大约595k条记录训练了神经网络,并在2k个新用户的17,000条记录上进行了评估。 对于我们的实验,我们在外部(元模型更新)和内部(用户模型更新)循环中都使用了朴素SGD。 我们的算法中的超参数是根据Reptile中报告的参数进行微调的。 结果表明,当将内部迭代设置为3并将学习速率设置为0.02时,所提出的算法可获得最高的AUC。

实验结果

通过将每种方法实验五次,我们将本文提出的算法与三个baseline方法进行了比较。三种baseline方法是:base,base + finetune和meta。base是采用SGD算法训练的具有统一用户模型的方法。为了公平比较,其训练数据包括元测试阶段的训练部分。 base + finetune是一种混合算法,其预训练阶段与base算法相同,在线训练/测试阶段与元算法相同。 meta是常规的元学习算法。

我们在实验中使用ROC曲线下面积(AUC)作为评估指标。表3总结了我们生产数据集上的实验结果(五次运行的均值和标准差)。从表3中我们可以看到,本文所提出的方法的性能明显优于三个baseline,AUC从72.24%增加到77.18%(绝对改善了4.94%)。在这三种baseline方法中,baseline1的性能明显比其他方法差。常规元学习方法的性能优于其他两个baseline,AUC从72.24%增加到74.72%(绝对改善2.48%)。请注意,AUC评估中的少量改进(例如0.275%)可能会导致CTR预测准确性的显着提高(例如,在这种情况下提高3.9%)。 base + finetune的性能介于base和meta之间。特别是,meta和base + finetune的性能均优于base,这表明用户自己的数据比其他用户进行训练的数据更有效。元算法和提出的算法的性能均优于两种基本方法,这表明由于元学习具有更好的泛化能力,因此用元方法训练的初始化模型要好于常规联合训练统一模型的初始化模型。提出的两阶段元学习算法通过在线元学习使AUC绝对增加了2.46%,从而进一步提高了常规元学习算法的性能。

消融实验

我们进行了消融研究,以找出不同因素的影响:元学习参数初始化,解耦参数的微调和在线元学习。

我们进行的第一个实验是将传统的元学习方法与两个baseline进行比较。从图6中可以看出,基本算法无法适应新用户的数据,而base + finetune往往会过度拟合训练数据。相比之下,元数据收敛更快,并且具有更高的AUC,这表明元学习确实比两个baseline提供了更好的初始化。

我们进行的第二个实验是评估在在线元学习期间应该更新哪些网络层。表4表明固定不同网络层的实验结果,从中我们可以看到,固定嵌入层(第一层)会导致性能最差,而固定中间两个隐藏层(第二层和第三层)的性能最高。这意味着应该对嵌入层和分类器层进行微调,以适应用户属性和用户兴趣的变化,而隐藏层是用户不变的参数,可以保持固定。

我们进行的第三个实验是通过使用在线训练数据不断更新元用户模型来评估从在线元学习中获得的收益。证明了在在线元学习阶段,我们的算法在进行其他训练示例/迭代时得到了持续改进。

总结

在本文中,我们研究了推荐系统中的用户冷启动,并引入了两阶段元学习算法来解决该问题。与其他元学习方法的差异在于:(1)我们结合了离线元和在线元模型,以更好地初始化用户; (2)在在线元模型中,我们将模型参数分为固定部分和自适应部分。这样,模型可以捕获跨用户不变性并适应个人特征。先前的元学习方法为每个新用户微调所有参数,这在计算和存储上都非常昂贵。相比之下,我们的方法使所有用户模型共享用户不变的参数,从而节省了存储和适应时间。对生产数据进行的实验表明,与baseline相比,该方法收敛更快,性能更高。不进行在线微调的元训练将AUC从72.24%增加到74.72%(绝对改善2.48%)。我们的算法在在线元训练期间通过其他训练样本不断改进,与离线元训练相比,绝对改进的结果进一步提高了2.46%。在未来的工作中,我们将进一步研究本文所提出的方法如何在持续适应用户特定参数的同时,将用户不变参数与用户相关参数解耦,从而应对灾难性遗忘。

附录

灾难性遗忘(catastrophic forgetting):这个问题是从持续性学习的研究过程中发现的。目前大部分的神经网络都是针对特定任务学习的,最经典的例子就是alphaGo只会下围棋,对象棋一窍不通。这显然不符合人的学习过程。所以人持续学习的特性,我们在学会了围棋之后,再去学象棋,不会忘记围棋的下法。但是神经网络目前所谓的多任务也大都是使用所有的数据联合优化的,并不是持续的一个一个的学习。在这个学习的过程中,实验表明,神经网络在学习完针对A任务的参数之后,重新去学习B的时候,其实已经完全打乱了针对A学习到的参数,这称为灾难性遗忘。