【论文笔记】LambdaOpt:Learn to Regularize Recommender Models in Finer Levels

github大法好!

最近调研自动调参相关技术的时候发现了这篇今年KDD的文章,论文提出了一种细粒度自动化调整正则化参数的方法,在此记录一下学习笔记。


背景

在推荐系统相关技术中,类别型往往比连续性变量更常见,对于这种类别型变量,通常我们将其通过one-hot方式表示,来接入后续的LR、MF等模型。然而在工业场景中,这种类型的变量通常都对模型很不友好,比如高维、长尾分布等,这些特性会带来严重的数据稀疏性问题。为了避免数据稀疏性对模型效果的影响,产业界中大部分的线上模型都加入了正则化,来压制数据的稀疏性问题。

引入正则化就带来头疼的正则化参数调整的问题,很多推荐模型都会对正则化参数非常敏感,作者给出了一个例子来说明,在矩阵分解模型中,lambda的调整会对模型效果产生较大影响:

简单来说,作者认为传统结构下对正则化系数进行调参十分困难,主要导致其困难的主要原因是因为:

  1. 全局统一的lambda不能兼顾训练的前后阶段。(lambda较大能照顾到出现频率高的样本特征,忽视较低的样本特征)
  2. 若使用更为细粒度的正则化参数,则超参太多不易调整。(grid search这些方法,不适合推荐系统这种实时性较高、数据规模较大的应用场景)

因此,这篇文章核心关注的问题,就是如何自动化地调教正则系数

文章总结了自动化正则化地相关工作:

  1. SGDA模型
  2. 网格搜索(grid-search)、贝叶斯优化、架构搜索(Neural Architecture Search)
  3. embedding正则化

以上的方法都存在着一定的问题导致不是特别适用于推荐系统中。

实现

带正则化的MF-BPR模型

文章主要针对矩阵分解(MF)为基础模型,loss函数为BPR(Bayesian Personalized Ranking)进行讨论。带正则化参数的MF模型,损失函数可以看作两部分,一部分是模型本身的BPR损失,另一部分为正则化损失。如下图所示,总的loss fuction由两部分组成,一部分是没有正则化的MF-BPR损失,另一部分为在得到当前参数时,正则化系数为lambda的正则化损失。下图是采用全局固定lambda参数时损失函数的表示情况:

Lambda OPT方法

MF-BPR模型动态正则化方法

既然传统的方法中,lambda在训练阶段时全局固定的,那么原始问题的就是一个简单的loss函数最小化问题。但文章中说明了,采用动态的lambda能够兼顾训练的不同阶段,因此loss最小化就不是一个简单的单参数最小化问题,相当于除了模型参数$\theta$外,模型还引入了正则化参数$\Lambda$,在训练的过程中对这两个参数都要进行学习。模型整体结构如下,即不再采用全局统一的lambda,而单独针对不同的部分选择不同的lambda。

双层优化问题

如何在训练阶段同时对这两个参数都进行优化呢?作者将改问题看作一个双层优化问题。既然loss函数可以分为两部分,那么原始loss最小化问题,可以表示为如下所示的MinMin问题,具体公式如下所示:

对如上公式进行优化,文章设计了一种交替优化的策略。首先固定$\Lambda_t$,在训练集上优化一步$\theta$。接着固定此时的$\theta_t$,优化$\Lambda$。在优化$\Lambda$阶段,文章采取了一种贪婪的策略,即让新的$\Lambda$能够使模型下一步的validation loss比较小。具体流程如下:

  1. 首先首先固定$\Lambda_t$,在训练集上sample一个batch,计算梯度,更新后得到下一步的$\theta_{t+1}$
  2. 得到$\theta_{t+1}$后,优化 $\min \limits_{\Lambda} l_{S_v}\left ( \overline{\theta}{t+1} \right )$ (此时要求$\Lambda$非负),在测试集上sample一个batch,固定$\theta{t+1}$,更新$\Lambda_{t+1}$

其中$\min \limits_{\Lambda} l_{S_v}\left ( \overline{\theta}_{t+1} \right )$要保证$\Lambda \geq 0$。文章也进行了推导,给出了KKT条件。

实验结果

实验在Amazon Food数据集和MovieLenss 10M数据集上做的,通过作者的分析可以看出,这些数据集具有很明显的长尾分布。从paper上来看,效果提升还是很明显的:

总结

文章中重要的部分都在这里了,其他的关于实验和一些推导就不再赘述了。文章实际想解决的问题是如果在训练的过程中,在不同阶段自动化地采取不同地正则化系数,来保证正则化地惩罚项能够兼顾训练地前后阶段。文章为了解决这个问题,首先将$\Lambda$看做是一个参数,然后对模型参数$\theta$和$\Lambda$采用交替训练的策略。个人感觉,这个思路还是挺直接粗暴的,我最近工作也涉及到了一些自动化调参相关的工作,也基本上采用的是类似的方法,但是作者的一些小trick,比如在训练集上训练$\theta$而在验证集上调整$\Lambda$,再比如模拟前进一步$\theta$的贪婪方法来调整$\Lambda$,还是很有借鉴价值的。

引用

  1. 论文地址
  2. λ优化——学习细粒度正则化推荐模型 – yich 知乎
  3. 作者本人在bilibili上的直播分享:KDD 2019论文分享丨 LambdaOpt:Learn to Regularize Recommender Models in Finer Levels