Yandex在《On Embeddings for Numerical Features in Tabular Deep Learning》中介绍了一种数值型特征建模embedding的方法:Periodic embedding。

摘要

最近,类似Transformer的深度架构在表格数据(tabular data)问题上表现出强大的性能。与传统模型(如MLP)不同,这些架构将数值特征(numerical features)的标量值映射到高维embedding中,然后将它们混合在主网络(backbone)中。在该工作中,我们认为数值特征的embedding在tabular DL中没有被充分探索,可以构建更强大的DL模型,并在一些对GBDT友好的基准测试中与GBDT竞争(即,在这些基准测试中,GBDT优于传统的DL模型)。我们首先描述了两种概念上不同的构建embedding模块的方法:

  • 第一种基于标量值的分段线性编码(piecewise linear encoding)
  • 第二种使用周期性激活(periodic activations)

然后,我们通过实验证明,与基于传统blocks(如线性层和ReLU激活)的embedding相比,这两种方法可以显著提高性能。重要的是,我们还表明,嵌入数值特征对许多主网络都有好处,不仅仅是对于Transformer。具体而言,在适当的嵌入后,简单的类MLP模型可以与attention-based的架构相媲美。总体而言,我们强调数值特征的embedding是一个重要的设计方向,在tabular DL中具有进一步改进的良好潜力。源代码可在https://github.com/yandex-research/tabular-dl-num-embeddings获得。

1.介绍

目前,表格数据(Tabular data)问题是深度学习(DL)研究的最后一道难关。虽然最近在自然语言处理、视觉和语音方面取得了深度模型的突破[12],但它们在表格领域的成功尚未令人信服。尽管已经提出了大量的表格DL架构[2、3、13、17、21、24、31、39、40],但它们与“浅层”决策树集成(如GBDT)之间的性能差距通常仍然显著[13、36]。

最近的一系列工作[13、24、39]通过成功将Transformer架构[45]调整为表格领域,缩小了这种性能差距。与传统模型(如MLP或ResNet)相比,提出的类Transformer架构具有一些特定方式来处理数据的数值特征。即:将多个数值特征的scalar values分别映射到高维embedding vectors中,接着通过self-attention模块被混合在一起。除了transformers,将数值特征映射到向量中也在点击率(CTR)预测问题中以不同形式被应用[8、14、40]。然而,文献大多集中在开发更强大的主网络(backbone),同时保持嵌入模块的设计相对简单。特别是,现有的架构[13、14、24、39、40]使用相当限制的参数映射(例如线性函数)构建数值特征的嵌入,这可能导致次优性能。在这项工作中,我们证明了嵌入步骤对模型的有效性有重大影响,其适当的设计可以显著提高表格DL模型的性能。

具体而言,我们描述了两种不同的构建块(building blocks),适用于数值特征的embeddings构建。

  • 第一种是分段线性编码( piecewise linear encoding):它为原始标量值产生了可备选的初始表示(intial representations),并且它采用的基于特征分箱(feature binning)的方式,这是一种长期存在的预处理技术[11]。
  • 第二种则依赖于周期性激活函数(periodic activation functions):这是受到隐式神经表示[28、38、42]、NLP[41、45]和CV任务[25]中使用的启发。

第一种方法简单、可解释且不可微,而第二种方法平均表现更好。我们观察到,配备我们的embedding方案的DL模型在GBDT友好的基准测试中成功地与GBDT竞争,并在表格DL上实现了新的最先进水平。作为另一个重要发现,我们证明了嵌入数值特征的步骤对于不同的深度架构普遍有益处,不仅仅适用于类Transformer的架构。特别地,我们展示了,在适当的嵌入后,简单的类MLP架构通常可以提供与最先进的attention-based的模型相媲美的性能。总体而言,我们的工作展示了数值特征的嵌入对表格DL性能的巨大影响,并展示了未来研究中探索更高级嵌入方案的潜力。

2.相关工作

表格深度学习(Tabular deep learning)。在过去几年中,社区提出了大量用于表格数据的深度模型[2、3、13、15、17、21、24、31、39、40、46]。然而,当系统地评估这些模型时,它们并没有始终优于决策树集成(ensembles of decision trees),如GBDT(梯度提升决策树)[7、19、32],这些决策树集成通常是各种机器学习竞赛的首选[13、36]。此外,一些最近的研究表明,提出的复杂架构并不比经过适当调整的简单模型(如MLP和ResNet)优越[13、18]。在这项工作中,与之前的文献不同,我们的目标不是提出一种新的主网络(backbone)架构。相反,我们专注于更准确地处理数值特征的方法,它可以潜在地与任何模型结合使用,包括传统的MLP和更近期的类Transformer的模型。

表格DL中的Transformer。由于Transformer在不同领域取得了巨大成功[10、45],因此一些最近的工作也将它们的self-attention设计适用于表格DL[13、17、24、39]。与现有的替代方案相比,将self-attention模块应用于表格数据的数值特征,需要将这些特征的标量值映射到高维嵌入向量中。到目前为止,现有的架构通过相对简单的计算块(computational blocks)执行这种“标量(scalar)”→“向量(vector)”映射,在实践中,这可能限制模型的表达能力。例如,最近的FT-Transformer架构[13]仅使用单个线性层。在我们的实验中,我们证明这种嵌入方案可以提供次优性能,而更高级的方案通常会带来巨大的收益。

点击率(CTR)预估。在CTR预估问题中,对象由数值和分类特征表示,这使得这个领域与表格数据问题高度相关。在一些工作中,数值特征以某种非平凡的方式处理,但并不是研究的核心[8、40]。最近,Guo等人提出了更高级的方案AutoDis[14]。然而,它仍然基于线性层和传统的激活函数,我们发现在我们的评估中这种方法是次优的。

特征分箱(Feature binning)。分箱是一种将数值特征(numerical features)转换为类别特征(categorical features)的离散化技术。即,对于给定的特征,其值范围(value range)被分成若干个bins(intervals),然后原始特征值被替换为对应bin的离散描述符(例如bin indices或one-hot向量)。我们指出Dougherty等人的工作[11],它对一些经典的分箱方法进行了概述,并可以作为相关文献的入口。然而,在我们的工作中,我们以不同的方式利用bins。具体而言,我们使用它们的边缘来构建原始标量值的无损分段线性表示。结果表明,在一些表格问题(tabular problems)上,这种简单且可解释的表示(representations),可以为深度模型提供实质性的收益。

周期性激活(Periodic activations)。最近,周期性激活函数已成为处理类似坐标输入的关键组成部分,这在许多应用中都是必需的。例如,自然语言处理[45]、计算机视觉[25]、隐式神经表示[28, 38, 42]等。在我们的工作中,我们展示了周期性激活函数可用于构建强大的embedding模块,用于解决表格数据问题中的数值特征。与一些前述论文不同的是,在将多维坐标的各个分量(例如,通过linear layers)传递给周期性函数之前,我们发现将每个特征单独嵌入并在主网络(backbone)中混合它们至关重要。

3.Embeddings for numerical features

在本节中,我们描述了所谓的“数值特征embedding”的一般框架以及实验比较中使用的主要构建模块。符号表示:对于给定的表格数据监督学习问题,我们将数据集表示为:

$\lbrace(x^j, y^j)\rbrace_{j=1}^n$

其中:

  • $y_j \in Y$:表示目标(object)的label
  • $x_j = (x^{j(num)}, x^{j(cat)}) \in X$:表示目标(object)的features(num:数值型特征,cat:类别型特征)
  • $x_i^{j(num)}$:则表示第 j 个目标(object)的第 i 个数值特征

根据上下文,可以省略 j 索引。数据集被分成三个不相交的部分:$\overline{1, n} = J_{train} \cup J_{val} \cup J_{test}$,其中:“train”部分用于训练,“validation”部分用于early stopping和hyperparameter tuning,“test”部分用于最终评估。

3.1 总框架

我们将“数值特征embedding”概念形式化为:

\[z_i = f_i(x_i^{(num)}) \in R^{d_i}\]

其中:

  • $f_i(x)$:是第i个数值特征的embedding函数
  • $z_i$:是第i个数值特征的embedding
  • $d_i$:是embedding的维度

重要的是,所提出的框架意味着所有特征的embedding都是独立计算的。请注意,函数 $f_i$ 可以依赖于作为整个模型的一部分或以其他方式训练的参数(例如,在主要优化之前)。在本工作中,我们仅考虑embedding方案,其中:所有特征的embedding函数具有相同的函数形式。我们【不共享】不同特征的嵌入函数的参数

embedding的后续使用取决于模型主网络(backbone)。对于类似 MLP 的架构,它们被拼接(concatenated)成一个flat向量(有关说明,请参见附录 A)。对于基于Transformer的结构,不会执行额外的步骤,embedding会直接传递,因此使用方式通过原始结构来定义。

3.2 Piecewise linear encoding

虽然vanilla MLP 被认为是通用逼近器(universal approximator) [9, 16],但在实践中,由于optimization的特殊性,它在学习能力方面有限制 [34]。然而,Tancik 等人最近的工作 [42] 发现了一种case,即改变输入空间可以缓解上述问题。这个观察结果启发我们检查改变数值特征的原始标量值的representations是否能够提高表格 DL 模型的学习能力

此时,我们尝试从简单的“经典”机器学习技术入手。具体而言,我们从one-hot encoding算法中获得灵感,该算法被广泛且成功地用于表示表格数据问题中的类别特征或NLP中的tokens等离散实体。我们注意到,从参数效率和表达能力之间的权衡角度来看,one-hot表示可以看作是scalar表示的反向解决方案。为了检查one-hot encoding类似方法是否有助于表格DL模型,我们设计了一种连续的替代方法来代替one-hot编码(因为普通的one-hot编码几乎不适用于数值特征)。

形式化地,对于第i个数值特征,我们将其值域分成不相交的$T_i$个区间 $B_i^1, \cdots, B_T^i$,我们称之为箱子:$B_t^i = [b_{t-1}^i, b_t^i)$。分割算法是一个重要的实现细节,我们稍后会讨论。从现在开始,为简单起见,我们省略特征索引i。一旦确定了bins,我们按照以下公式定义encoding scheme,详见公式1:

\[PLE(x) = [e_1, \cdots, e_T] \in R^T \\ e_t = \begin{cases} 0, & \text{$x < b_{t-1}$ AND $t>1$} \\ 1, & \text{$x \geq b_t$ AND $t<T$} \\ \frac{x-b_t-1}{b_t - b_{t-1}} \end{cases}\]

…(1)

其中,PLE表示“peicewise linear encoding”。我们在图1中提供可视化。

图片名称

图1

注意:

  • PLE为数值特征生成可替代的初始表示(representations),可以被看作是一种预处理策略。这些representations仅计算一次,然后在主要optimization过程中使用,代替原始的标量值。
  • 当 T=1 时,PLE表示实际上等效于scalar表示。
  • 与分类特征不同,数值特征是有序的;通过将对应于右边界小于给定feature value的bin的分量设置为1,我们来表示这一点(这种方法类似于如何在序数回归问题中编码标签)
  • 方案1也包括了 ($x < b_0$) 和 ($x ≥ b_T$)的case,它们分别产生 ($e_1 ≤ 0$) 和 ($e_T ≥ 1$)。
  • 将representation进行分段线性化(piecewise linear)的选择本身就是一个值得讨论的问题。我们在第 5.2 小节中分析了一些替代方案。
  • PLE 可以看作是特征预处理,这在第 5.3 小节中另外进行了讨论。

关于attention-based的模型的说明。虽然所描述的PLE表示可以直接传递给类似MLP的模型,但attention-based的模型本质上是不受 input embeddings顺序影响的,因此需要一个额外的步骤:在所获得的encodings中添加关于特征indices的信息。从技术上讲,我们观察到:只需要在PLE之后放置一个linear layer(不共享特征之间的权重)即可。然而,从概念上讲,该解决方案具有明确的语义解释。也就是说,它等价于:为每个bin $B_t$分配一个trainable embedding $v_t \in R_d$,并通过以 $e_t$ 为权重将它的bins的embedding进行聚合、并再加上偏移$v_0$,来获得最终feature embedding。具体地:

\[f_i(x) = v_0 + \sum\limits_{t=1}^T e_t \cdot v_t = Linear(PLE(x))\]

在接下来的两个部分中,我们描述了两种简单的算法来构建适合PLE的bins。具体而言,我们依赖于经典的分箱算法 [11],其中一个算法是无监督的,另一个算法利用标签来构建箱子。

3.2.1 从分位数中获取bins

一种自然的baseline方法是:根据相应的单个特征分布的经验分位数,将值范围进行分割来构建PLE的箱子。具体而言,对于第i个特征:

\[b_t = Q_{\frac{t}{T}} (\lbrace x_i^{j(num)} \rbrace_{j \in J_{train}})\]

其中 Q 是经验分位数函数。

size为0的无意义bins将被删除。在第 D.1 小节中,我们展示了所提出方案在 Gorishniy 等人 [13] 中描述的合成 GBDT 友好数据集上的有用性。

3.2.2 构建 target-aware bins

实际上,还有一些利用training labels来构建bins的监督方法 [11]。直观地说,这些目标感知(target-aware)的算法,目标是在产生与可能目标值在相对较窄范围内相对应的bins。我们工作中使用的监督方法在精神上与 Kohavi 和 Sahami [23] 的“C4.5 离散化”算法相同。简而言之,对于每个特征,我们使用目标值(target)作为指导,以贪心方式递归地将值范围(value range)进行分割,这相当于构建一棵决策树(仅使用此特征和目标值进行生长),并将其叶子对应的区域作为PLE的bins(请参见图4中的说明)。此外,我们定义$b_i^0 = min_{j \in J_{train}} x_i^j$ 和 $b_T^i = max_{j \in J_{train}} x_i^j$ 。

3.3 周期性激活函数(Periodic activation functions)

回顾第 3.2 小节中提到的 Tancik 等人 [42] 的工作被用作我们开发 PLE 的动机起点。因此,我们也尝试将原始工作本身适应于表格数据问题。我们的变化有两个方面的不同。首先,我们考虑到子节 3.1 中描述的嵌入框架在嵌入过程中禁止混合特征(请参见子节 D.2 进行额外讨论)。其次,我们训练预激活系数而不是保持它们固定。因此,我们的方法与 Li 等人 [25] 非常接近,其中“组”的数量等于数值特征的数量。我们在公式 2 中形式化描述所述方案,

\[f_i(x) = Periodic(x) = concat[sin(v), cos(v)], v = [2 \pi c_1 x, \cdots, 2 \pi c_k x]\]

…(2)

其中:

  • $c_i$是可训练参数,从N(0, σ)初始化。

我们观察到 σ 是一个重要的超参数。σ 和 k 都使用验证集进行调整。

3.4 简单可微层(Simple differentiable layers)

在深度学习的背景下,使用传统的可微分层(例如线性层、ReLU 激活等)对数值特征进行嵌入是一种自然的方法。事实上,这种技术已经在最近提出的attention-based的架构 [13、24、39] 、以及在一些用CTR预测问题的模型 [14、40] 中单独使用。但是,我们也注意到这样的传统模块可以在子节3.2和子节3.3中描述的组件之上使用。在第4节中,我们发现这样的组合通常会导致更好的结果。

4.实验

在本节中,我们对第 3 节中讨论的技术进行了实证评估,并将它们与GBDT进行比较,以检查“DL vs GBDT”竞争的现状。

我们使用了来自以前的表格 DL 和 Kaggle 竞赛的 11 个公共数据集。重要的是,我们专注于中大规模的任务,并且我们的基准测试偏向于 GBDT 友好的问题,因为目前,在这些任务上缩小与 GBDT 模型之间的差距是表格 DL 的主要挑战之一。主要数据集属性总结在表 1 中,使用的来源和其他细节在附录 C 中提供。

图片名称

表1

4.2 实现细节

我们在超参数调整、训练和评估协议方面主要遵循 Gorishniy 等人 [13]。然而,为了完整起见,我们在附录 E 中列出了所有细节。在下一段中,我们描述了特定于数值特征嵌入的实现细节。

数值特征嵌入(Embeddings for numerical features)。如果使用线性层(linear layers),则调整其输出维度。对于所有特征,PLE的超参数是相同的。

  • 对于quantile-based PLE,我们会调整分位数的数量
  • 对于target-aware PLE,我们调整以下决策树的参数:叶子的最大数量、每个叶子的最小items数、以及在生长树时做出一个split所需要的最小信息增益。
  • 对于Periodic module(参见公式 2),我们调整 σ 和 k(这些超参数对于所有特征都是相同的)。

4.3 模块名

在实验中,我们考虑了不同的骨干网和嵌入组合。为方便起见,我们使用“骨干网-嵌入”模式来命名模型,其中“骨干网”表示骨干网(例如 MLP、ResNet、Transformer),而“嵌入”表示嵌入类型。请参见表 2,了解所有考虑的嵌入模块。请注意:

  • Periodic在公式 2 中定义。
  • $PLE_q$表示quantile-based PLE
  • $PLE_t$表示target-aware PLE
  • Linear_ 表示无偏线性层(bias-free linear layer),LReLU 表示leaky ReLU,AutoDis 是 Guo 等人 [14] 提出的。
  • “Transformer-L” 等价于 FT-Transformer [13]。

图片名称

表2

4.4 简单可微embedding模块

我们首先评估由“传统”可微分层(线性层、ReLU 激活等)组成的嵌入模块。结果总结在表 3 中。 主要观点:

  • 首先&最重要的,结果表明 MLP 可以从embeddings模块中受益。因此,我们得出结论,在评估embedding模块时,该backbone值得关注。
  • 当应用于MLP时,简单的LR模块可以导致保守、但一致的提升。

有趣的是,“冗余(redundant)”的 MLP-L配置也倾向于优于vanilla MLP。虽然改进并不显著,但这种架构的特殊属性是,linear embedding模块可以在训练后,与 MLP的第一个线性层融合在一起,从而完全消除了开销。至于 LRLR 和 AutoDis,我们观察到这些重型模块(heavy modules)不值得额外的成本(请参见附录 F 中的结果)。

图片名称

表3

4.5 Piecewise linear encoding

在本节中,我们评估子节 3.2 中描述的编码方案。结果总结在表 4 中。

主要结论:

  • 分段线性编码对两种类型的架构(MLP 和 Transformer)通常有益,并且收益可能很显著(例如,参见 CA 和 AD 数据集)。
  • 在PLE顶部添加可微组件可以改善性能。尽管如此,最昂贵的修改(如 Q-LRLR 和 T-LRLR)不值得这样做(请参见附录 F)。

请注意,基准测试偏向于 GBDT 友好的问题,因此在表 4 中观察到的基于树的箱通常优于基于分位数的箱,可能不适用于更适合 DL 的数据集。因此,我们在这里不对两种方案的相对优势做任何一般性的声明。

图片名称

表4

Periodic activation functions

在本节中,我们评估基于周期性激活函数的嵌入模块,如子节 3.3 中所述。结果报告在表5 中。

图片名称

表5

主要结论:平均而言,MLP-P 优于普通的 MLP。然而,在周期性模块的顶部添加可微分组件应该是默认策略(这与 Li 等人 [25] 的观点一致)。事实上,MLP-PLR 和 MLP-PL 在 MLP-P 的基础上提供了有意义的改进(例如,参见 GE、CA、HO),甚至在 MLP-P 不如 MLP 的情况下“修复”了 MLP-P(OT、FB)。

虽然 MLP-PLR 通常优于 MLP-PL,但我们注意到,在后一种情况下,嵌入模块的最后一个线性层在表达能力上是“冗余”的,并且可以在训练后与骨干网的第一个线性层融合在一起,这理论上可以导致更轻量级的模型。最后,我们观察到 MLP-PLRLR 和 MLP-PLR 之间的差异不足以证明 PLRLR 模块的额外成本(请参见附录 F)。

4.7 Comparing DL models and GBDT

在本节中,我们进行了不同方法的大比较,以确定最佳的embedding模块和主网络(backbone),并检查数值特征embedding是否使 DL 模型能够在更多任务上与 GBDT 竞争。重要的是,我们比较 DL 模型的集合与 GBDT 的集合,因为梯度提升本质上是一种集成技术,因此这样的比较将更加公平。请注意,我们只关注最佳指标值,而不考虑效率,因此我们只检查 DL 模型是否在概念上准备好与 GBDT 竞争。

我们考虑三个主网络(backbone):MLP、ResNet 和 Transformer,因为据报道它们代表了基线 DL 骨干网目前的能力 [13、18、24、39]。请注意,我们不包括也在对象级别上应用注意力的attention-based的模型 [24、35、39],因为这个非参数组件与我们工作的核心主题不相关。结果总结在表6 中。

图片名称

表6

DL 模型的主要结论:

  • 对于大多数数据集,数值特征的嵌入可以为三种不同的骨干网提供显著的改进。虽然平均排名不是制定微妙结论的好指标,但我们强调 MLP 和 MLP-PLR 模型之间平均排名的巨大差异。
  • 最简单的 LR 嵌入是一个很好的基准解决方案:虽然性能提升并不显著,但它的主要优点是一致性(例如,参见 MLP vs MLP-LR)。
  • PLR 模块提供了最好的平均性能。根据经验,我们观察到 σ(见公式 2)是一个重要的超参数,应该进行调整。
  • 分段线性编码(PLE)允许构建表现良好的嵌入(例如,T-LR、Q-LR)。除此之外,PLE 本身也值得关注,因为它具有简单性、可解释性和效率(没有计算昂贵的周期函数)。
  • 重要的是,将类似 MLP 的架构与集成学习相结合之后,它们可以在许多任务上与 GBDT 竞争。这是一个重要的结果,因为它表明 DL 模型可以作为集成学习中 GBDT 的替代方案。

“DL vs GBDT” 竞争的主要结论:数值特征的嵌入是一个重要的设计方面,具有极大的潜力来改进 DL 模型,并在 GBDT 友好的任务上缩小与 GBDT 之间的差距。让我们通过几个观察来说明这个说法:

  • benchmark最初偏向于GBDT友好的问题,这可以通过比较GBDT解决方案与vanilla DL模型(MLP、ResNet、Transformer-L)来观察。
  • 然而,对于绝大多数“主网络&数据集”对,合适的embedding是缩小与GBDT之间差距的唯一方法。例外(相当正式)包括:MI数据集以及以下配对:“ResNet & GE”、“Transformer & FB”、“Transformer & GE”、“Transformer & OT”。
  • 另外,据我们所知,在众所周知的California Housing和Adult数据集上,DL模型的表现与GBDT相当,这是第一次。

尽管如此,与GBDT模型相比,对于DL架构,效率仍然可能是一个问题。在任何情况下,tradeoff完全取决于具体的使用情况和需求。

5.分析

5.1 model size对比

为了量化数字特征嵌入对模型大小的影响,我们在表7中报告了参数量。总的来说,引入数值特征embeddings可能会导致不可忽视的模型大小方面的开销。重要的是,在训练时间和吞吐量方面,size的开销并没有转化为相同的影响。例如,在CH数据集上,MLP-LR的参数计数几乎增加了2000倍,但训练时间仅增加了1.5倍。最后,在实践中,我们发现将MLP和ResNet与embeddings模块结合,产生了仍然比Transformer-based的模型更快的架构。

表7

5.2 消融研究

图片名称

表8

在本节中,我们比较了两种基于分箱的编码方案(binning-based encoding:

  • 一种是“温度计(thermometer)”([6]):会设置值为1,取代掉piecewise linear term;
  • 另一种是one-blob encoding的泛化版本([29];见第E.1节了解更多细节)。tuning和evaluation协议与第4.2节相同。表8中的结果表明,让基于分箱的编码(binning-based encoding)进行分段线性化(piecewise linear)是一个很好的默认策略。

5.3 Piecewise linear encoding作为特征预处理技术

众所周知,标准化(standardization)或分位数变换(quantile transformation)等数据预处理,对于DL模型达到好效果来说至关重要。而且,不同类型的预处理之间的效果可能会有显著差异。同时,PLE-representations仅包含[0,1]中的值,并且它们对于平移(shifting)和缩放(scaling)是不变的,这使得PLE本身成为一种通用特征预处理技术,通用适用于DL模型,无需首先使用传统预处理。

为了说明这一点,在第4节中使用了分位数变换(quantile transformation)来评估数据集。我们使用不同的预处理策略重新评估了MLP、MLP-Q和MLP-T的已调整配置,并在表9中报告了结果(注意,对于具有PLE的模型,标准化等同于无预处理)。

图片名称

表9

首先,如果没有预处理,vanilla MLP往往变得无法使用。其次,对于vanilla MLP,选择特定类型的预处理(CA、HO、FB、MI)是很重要的,而对于MLP-Q则不那么明显,对于MLP-T则不是(尽管这种特定观察可能是基准测试的特性,而不是MLP-T的特性)。总的来说,结果表明使用PLE模型相对于vanilla MLP对预处理的敏感性较低。这对于实践者来说是一个额外的好处,因为使用PLE后,预处理方面变得不那么重要。

5.4 “feature engineering”的角度

乍一看,特征嵌入(feature embeddings)可能类似于特征工程(feature engineering),并且应该适用于所有类型的模型。然而,所提出的embedding schemes是受基于DL-specific方面训练的启发(请参见第3.2节和第3.3节的动机部分)。虽然我们的方法可能会很好地迁移到具有相似训练属性的模型上(例如,对于线性模型,它们是深度模型的特例),但通常并非如此。为了说明这一点,我们尝试采用周期性模块来调整XGBoost的随机系数,同时保持原始特征而不是丢弃它们。调整和评估协议与第4.2节相同。表10中的结果表明,尽管这种技术对于深度学习模型很有用,但它并不能为XGBoost提供任何好处。

图片名称

表10

#

google在《Learning from Negative User Feedback and Measuring Responsiveness for Sequential Recommenders》提出了一种将负反馈用于召回的方法。我们来看下相关实现:

2.negative user feedback的训练目标

以下我们描述了将negative user feedback纳入sequential recommenders的训练目标中的方法,特别是针对在大型语料库中预测下一个推荐items set的检索任务。

图片名称

图1

Loss Function.

顺序检索模型(Sequential retrieval models)通常用于预测postive交互的任务,使用的训练目标包括:cross-entropy loss或REINFORCE policy gradient[2,5]。在这里,我们从一个baseline模型开始,该模型会使用cross-entropy loss,并使用正反馈作为训练label。给定一个训练样例i,其中包含user $u_i$与label item $y_i$的postive交互,loss function是负对数似然:

\[L_i=−log(p(y_i \mid s_i))\]

其中:

  • $s_i$:表示由神经网络计算的用户状态向量,该向量汇总了用户的交互历史。

该损失函数优化了在给定用户状态$s_i$的情况下,从大型语料库中推荐出label项$y_i$的条件概率$p(y_i \mid s_i)$。概率项表示为softmax:

\[p(y_i|s_i)= \frac{ exp(s_i^T v_{y_i}) } {\sum\limits_{y_i' \in A} exp(s_i^T v_{y_i'}) }\]

其中:

  • A:是item空间
  • $v_{y_i}$:表示item embedding vector

在实践中,训练中使用sampled softmax,serving中使用最近邻搜索(NNS)来处理极大的item空间。

为了从负反馈中学习,我们引入了一个“不推荐(not-to-recommend)”损失函数,即不推荐一个item的负对数似然,即:

\[L_i=−log(1−p(y_i \mid s_i))\]

该目标允许模型直接利用negative user feedback作为negative labels,并与positive labels的现有损失函数一起工作。对于每个postive label添加权重$r_i$,对于每个negative label添加权重$w_i$,我们得到整体损失函数:

\[L = − \sum\limits_{i \in D_{pos}} (r_i \cdot log(p(y_i | s_i))) − \sum\limits_{i \in D_{neg}} (w_i \cdot log(1−p(y_i | s_i)))\]

…(1)

其中:

  • $𝐷_{pos}$和$𝐷_{neg}$分别是postive和negative label(如图1所示)。最小化该loss相当于:最大化推荐具有postive feedback的items和不推荐具有negative feedback的items的联合概率。与仅用positive label相比,它会强化与用户兴趣的更强的一致性。

“不推荐(not-to-recommend)”损失函数解决了在training objective中建模negative user feedback的几个实际问题。例如,使用cross-entropy loss $L_i=−log(p(y_i \mid s_i))$和负值label weights可能会减少不想要物品的推荐概率,但当$p(y_i \mid s_i) \rightarrow 0$时,会导致梯度爆炸。原则上,强化学习目标支持为negative training labels分配negative reward values。实际上,我们可以用REINFORCE目标[5]替换positive labels的loss项。但是,对于negative labels,在REINFORCE推荐器中使用负回报(negative rewards)面临一个实际的挑战,在工业环境中,即使经过off-policy correction,由于极大的item空间,当$p(𝑦_𝑖 \mid s_𝑖)\rightarrow 0$时,梯度仍可能爆炸。“not-to-recommend”损失函数规避了这些问题,因为当$𝑝(y_i \mid s_i) \rightarrow 0$时,梯度的保证是有限的

另一种方法是:在相邻postive label的softmax负样本中包含并加权负反馈项( upweight negative feedback items)。与这种方法相比,我们所提出的方法将postive和negative用户反馈的loss项解耦,并且梯度允许更有针对性地从negative labels中学习。

Negative Training Labels和Input Features

显式和隐式的negative用户反馈都可以作为negative训练label。label权重可以根据反馈强度、信号密度以及相对于postive标签的loss值大小进行调整。在我们的平台上,我们将明确的dislike操作和隐式的跳过(skip)信号视为负面训练标签。为了在模型输入中表示用户过去的negative交互,模型输入序列中的每个物品都通过二元特征(binary feature)编码dislikes,而skip则作为停留时间特征( dwell time feature)的一部分。

3.真实环境

我们将“不推荐(not-to-recommend)”损失函数引入基于RNN的顺序推荐器[2,5],该推荐器服务于数十亿用户的短内容平台,并进行实时实验以评估建模”negative user feedback”的真实世界影响。在我们的系统中,顺序推荐器是检索阶段的一部分,从庞大语料库中推荐数百个item,在进行ranking阶段[8]后,最佳的物品会被展示给用户。在实践中,negative user feedback也由下游组件(如ranking模型和启发式算法[1,18,24])决定。即便如此,我们仍然从模型变化中看到了有意义的端到端结果。我们证明,从检索中negative user feedback可以通过:

  • (1)减少不想要的推荐通过系统的机会
  • (2)增强模型与用户兴趣的一致性对齐从而生成更好的推荐

下面报告的指标变化在95%置信区间下是显著的。

建模显式的负面反馈

在这个实验中,我们将显式dislike反馈纳入模型的训练目标中。与不使用dislike信号的模型基线(图2a)相比,在产品主页上使用dislike信号作为输入特征和训练label的实验模型,可以将dislike率降低了2.44%。这种效果比仅使用dislike作为输入特征而不是训练label(-0.34%,不显著)、或排除dislike物品的启发式解决方案(-0.84%)要大得多。同一创作者的重复dislike率下降了9.60%,表明模型在负面反馈后减少了类似的推荐。实验模型将拒绝用户数(Dismissing)降低了2.05%,而观看者仅下降了0.14%。在我们的处理中,拒绝(Dismissals)并没有被显式建模,这种变化表明用户体验确实获得了改善。在我们产品的沉浸式反馈中,这种效果尤为显著。实验模型将dislike率降低了1.10%,同一创作者的重复dislike率降低了7.10%。使用基于模型的满意度指标[7],满意的消费保持不变(+0.00%),不满意的消费减少了0.35%。

图片名称

图2

建模隐式负面反馈

隐式跳过(skip)信号的密度比显式的dislike信号要高得多。我们假设更高的负面用户兴趣覆盖率可以提高整体推荐质量。在这个实验中,我们将skip item作为negative training labels纳入到沉浸式反馈上。我们观察到:整体用户享受度(enjoyment)增加了0.40%(图2b),每天至少有1小时活动的活跃用户增加了0.61%。此外,我们看到同一创作者的重复跳过率降低了1.44%,多样性增加了0.88%。

综合来看,结果表明,将显式负反馈(explicit negative feedback)纳入训练目标可以降低负面用户体验,而建模隐式负反馈(implicit negative feedback)可以提高整体用户享受度。

衡量反应能力(RESPONSIVENESS)的反事实模拟(COUNTERFACTUAL SIMULATION)

真实实验显示了建模负面反馈的整体好处,但没有直接衡量推荐器对这种反馈信号的响应能力(responsive)。我们的目标是衡量响应能力(responsiveness),即当用户对某个物品做出负面反应时,推荐器可以减少多少类似的推荐。然而,由于复杂的用户-推荐器交互,这种推荐器行为无法通过离线模型准确性、在线用户指标或相关的日志数据分析来评估。为了直接衡量推荐器的响应能力,我们需要排除混淆的用户行为,并比较反事实用户行为(counterfactual user actions)对推荐器响应的因果效应(causal effects)。

在这里,我们开发了一个框架,使用模拟用户[21]来衡量对用户反馈的响应能力(图3a)。每个用户按照随机行为轨迹来消费一系列𝑘-1个推荐物品。在第𝑘个物品上,我们在相同的交互历史下模拟多个反事实行为(例如,对其做出负面反应或不这样做)。在每个反事实分支中,我们观察推荐器输出的(𝑘+1)步并计算它们与上一个交互物品的相似度。使用基于内容和基于创作者的相似度的独立度量,我们将相似度得分定义为:推荐与上一个交互物品相同内容簇或创作者的比例。然后,推荐器响应能力被计算为:【提供负反馈 vs. 不提供负反馈】两者间相似度得分的相对变化。这告诉我们推荐器在负反馈时减少了多少类似的推荐,可以用于评估建模变化。

图片名称

图3

我们使用这种方法来衡量推荐器对dislike操作的响应能力,由于其稀疏性这很难进行评估。对于反事实行为(counterfactual actions),我们考虑一个postive交互baseline(长停留时间)与在其上添加不喜欢操作。我们运行了2000次模拟,其中𝑘=50。不使用dislike信号的baseline模型没有响应能力,需要依赖下游系统组件来响应dislike。仅添加dislike输入特征会导致类似的推荐在dislike后显著但有限地减少(-22.7%/-22.8%按内容/创作者相似度),表明dislike操作代表了内在的用户不满意。当在训练label和输入特征中都使用dislike时,模型在dislike后减少了更多类似的推荐(按内容/创作者相似度分别为-60.8%/-64.1%)(图3b)。这些结果表明,将显式负反馈纳入训练目标可以提高模型对这种反馈的响应能力

#

Yixuan Su等人在《A Contrastive Framework for Neural Text Generation》中提出了Contrastive Search的方法:

摘要

文本生成(Text generation)对许多自然语言处理应用非常重要。然而,自然语言模型中基于maximization-based decoding 方法(例如:Beam Search)经常导致退化的解决方案——生成的文本不自然并且包含不良重复。现有的一些方法通过抽样引入随机性、或修改训练目标以减少某些tokens的概率(例如,不可能性训练)。但是,它们经常导致相应的解决方案缺乏连贯性。在这项工作中,我们展示了模型退化的一个潜在原因是:token representations的非各向同性分布。我们提出了一个对比解决方案:

  • (i)SimCTG:一种对比训练目标,用于校准模型的表示空间;
  • (ii)一种解码方法——对比搜索(contrastive search):以便在生成的文本中鼓励多样性同时保持连贯性。

对两种语言的三个基准测试进行的广泛实验和分析表明,我们提出的方法在人工和自动指标评估下显着优于SOTA的文本生成方法。

1.介绍

使用Transformer进行开放式神经网络文本生成(Open-ended neural text generation)[52]是各种自然语言应用中不可或缺的组成部分,例如故事生成[11,43]、上下文文本补全[36]和对话系统[48]。然而,使用极大似然估计(MLE)训练语言模型并解码最可能的序列的传统方法往往不够的[14,54]。具体而言,这种建模方法通常会导致退化问题,即从语言模型生成的文本往往会在不同级别(例如token级别、短语级别和句子级别)上变得乏味并包含不良重复[8]。为了缓解这个问题,先前的解决方案通过从低可能性的词汇表中进行抽样来修改解码策略[11,14]。虽然减少了生成的重复,但这些抽样方法引入了另一个关键问题(语义不一致)——抽样文本往往会偏离或甚至与人类编写的前缀定义的原始语义相矛盾[3]。另一种方法通过使用unlikelihood training来修改模型的输出词汇表分布来解决退化问题[54]。

图片名称

图1 (a) GPT的token余弦相似度矩阵 (b)SimCTG的余弦相似度矩阵(详见颜色)

在本工作中,我们认为神经语言模型的退化源于token representations的非各向同性分布(anisotropic distribution),即它们的representations存在于整个空间的一个狭窄子集中[10,9,44]。在图1(a)中,我们展示了GPT-2生成的token表示(来自Transformer的输出层)的余弦相似度矩阵。我们看到,句子内token之间的余弦相似度超过0.95,这意味着这些表示彼此接近。这种高相似性是不可取的,因为它可能会自然地导致模型在不同步骤生成重复token。在理想情况下,token representations应该遵循各向同性分布:即token相似性矩阵应该是稀疏的,并且不同token的representations应该具有区分性,如图1(b)所示。此外,在解码过程中,生成的文本的标记相似性矩阵的稀疏性应该被保留以避免模型退化。

基于上述动机,我们提出了SimCTG(神经文本生成的简单对比框架),以鼓励模型学习具有区分性和各向同性的token表示。我们还提出了一种新的解码策略,以补充SimCTG,即对比搜索(contrastive search)。对比搜索(contrastive search)的核心意图是:

  • (i)在每个解码步骤中,应该从模型预测的最可能候选集合中选择output,以更好地保持生成文本与人类编写的前缀之间的语义连贯性
  • (ii)应该保留生成文本的token相似性矩阵的稀疏性以避免退化。

我们在三个广泛使用的基准测试上进行了全面的实验。我们展示了我们的方法适用于不同的任务和不同的语言(§4和§5),以及不同的模型大小(§4.3和附录D)。具体而言,实验结果验证了SimCTG通过困惑度(perplexity)和token预测准确性的评估来提高语言模型的内在质量(§4.2和附录D)。此外,我们证明了所提出的对比搜索(contrastive search)在人工和自动评估中都要优于SOTA的解码方法(§4和§5)。此外,我们提供了深入的分析,以更好地了解我们提出的方法的内部运作机制(§6)。

2.背景

语言建模的目标是:学习一个变长文本序列 $ x = \lbrace x1,…,x_{\mid x \mid} \rbrace$ 上的概率分布$p_{\theta}(x)$,其中$\theta$表示模型参数。通常,使用极大似然估计(MLE)目标来训练语言模型,该目标定义为:

\[L_{MLE} = − \frac{1}{|x|} \sum\limits_{i=1}^{|x|} log p_{\theta}(x_i | x_{<i})\]

…(1)

然而,正如许多最近的研究所观察到的[10,9,44],使用极大似然估计目标进行训练,往往会产生模型表示(representations)的非各向同性分布(特别是对于基于Transformer的模型),这会削弱模型的能力。

2.2 开放式文本生成(Open-ended Text Generation)

在本工作中,我们专注于研究开放式文本生成任务,因为它在各种应用中具有广泛的适用性,例如故事生成[11,43]、上下文文本补全[36]、诗歌生成[23]和对话系统[48]。形式上,给定人类编写的前缀(即context)x,该任务是从语言模型中解码出一个连续的$\hat{x}$,生成的文本为:

\[{x1,..,x_{|x|},\hat{x}_{|x|+1},\cdots,\hat{x}_{|x|+|\hat{x}|}}\]

通常,有两类方法用于解码,即(1)确定性方法(Deteriminstic methods)和(2)随机方法(Stochastic methods)。

  • Deteriminstic方法。两种广泛使用的Deteriminstic方法是贪心搜索(greedy search)和束搜索(beam search),旨在基于模型的概率分布$p_θ$选择具有最高概率的文本延续(text continuation)。然而,仅仅最大化输出概率往往会导致生成的文本变得乏味[22]并且出现退化问题[11,14]
  • Stochastic方法:为了解决Deteriminstic解码的问题,已经提出了几种从$p_θ$中进行采样的方法。为了避免从分布的不可靠尾部进行采样,Fan等人[11]提出了top-k采样,该方法从最大化$\sum_{v \in V^{(k)}} p_θ(v\mid x)$的词汇子集V(k)中抽取样本。这里,$\mid V(k) \mid=k$,x是前缀上下文。与之不同的是,当前SOTA的核心采样(nucleus sampling)[14]从具有总概率大于阈值$p \in [0,1]$的最小词汇子集U中抽取样本;即,U是最小的词汇子集,使得$\sum_{v \in U} p_θ(v \mid x)≥p$。虽然采样方法有助于缓解模型退化,但这些方法中的内在随机性可能会导致采样文本的语义含义与人类编写的前缀发生分歧甚至矛盾[3]。

3.方法

在本节中,我们首先介绍如何将对比学习应用于校准语言模型的表示空间。然后,我们介绍我们提出的对比搜索(contrastive search decoding)解码算法。

3.1 Contrastive Training

我们的目标是:鼓励语言模型学习具有区分性(discriminative)和各向同性(isotropic)的token representations。为此,我们在语言模型的训练中引入了对比目标$L_{CL}$。具体而言,给定一个变长序列$ x = \lbrace x1,\cdots,x_{\mid x \mid} \rbrace $,$L_{CL}$定义为:

\[L_{CL} = \frac{1}{|x| \times (|x|−1)} \sum\limits_{i=1} \sum\limits_{j=1,j \neq i}^{|x|} max \lbrace 0, \rho − s(h_{x_i} , h_{x_i}) + s(h_{x_i} , h_{x_j}) \rbrace\]

…(2)

其中:

  • $\rho \in [−1,1]$ 是预定义的边界
  • $h_{x_i}$:是模型生成的token $x_i$的表示
  • 相似性函数s:计算标记表示之间的余弦相似度,如下所示:
\[s(h_{x_i}, h_{x_j}) = \frac{h_{x_i}^T h_{x_j}} { \| h_{x_i} \| \cdot \| h_{x_j} \|}\]

…(3)

直观地说,通过使用$L_{CL}$进行训练,模型学习将不同token的表示之间的距离拉开。因此,可以获得具有区分性和各向同性的模型表示空间。总体训练目标$L_{SimCTG}$定义为:

\[L_{SimCTG} = L_{MLE} + L_{CL}\]

…(4)

其中:

  • 最大似然估计(MLE)目标$L_{MLE}$的定义如公式(1)所示。

请注意,当$L_{CL}$中的边界ρ等于0时,$L_{SimCTG}$会退化为普通的MLE目标$L_{MLE}$。

我们提出了一种新的解码(decoding)方法,对比搜索(contrastive search)。在每个解码步骤中,对比搜索(contrastive search)的关键思想是:

  • (i)生成的输出(generated output)应该从模型预测的最可能的候选集合中选择;
  • (ii)生成的输出(generated output)应该足够具有区分性,以便与前文(previous context)相关。通过这种方式,生成的文本可以更好地保持与前缀的语义连贯性,同时避免模型退化(model degeneration)。

形式上,给定在timestep t时的上文 $x_{<t}$,输出$x_t$的选择遵循以下过程:

\[x_t = \underset{v \in V^{(k)}}{argmax} \lbrace (1-\alpha) \times \underbrace{p_{\theta}(v | x_{<t})}_{model \ confidence} - \alpha \times \underbrace{(max \lbrace s(h_v, h_{x_j}): 1 \leq j \leq t-1 \rbrace)}_{degeneration \ penalty} \rbrace\]

…(5)

其中:

  • $V(k)$是模型的概率分布$p_\theta(\cdot \mid x_{<t})$中top-k个预测的集合,k通常设置为3∼10。

在公式(5)中,

  • 第一项“模型置信度(model confidence)”是模型预测的候选项v的概率
  • 第二项“退化惩罚(degeneration penalty)”衡量候选项v相对于前文$x_{<t}$的区分性,s在公式(3)中定义。具体而言,它被定义为候选项v的表示与$x_{<t}$中所有token的表示之间的最大余弦相似度。在这里,候选项的表示$h_v$是由模型给出的,给定x<t和v的连接。

直观地说,较大的退化惩罚意味着候选项与上下文更相似,因此更有可能导致模型退化。超参数$\alpha \in [0,1]$调节了这两个组成部分的重要性。当α=0时,对比搜索退化为贪心搜索方法。

其它

#

摘要

工作界推荐系统通常会存在高度倾斜的长尾item分布,一小部分的items会接受到大量的用户反馈。这种倾斜会伤害推荐系统质量,特别是:那些具有较少用户反馈的item。学术界的许多研究,很难部署到真实生产环境中,并且提升很小。这些方法的一个挑战是:通常伤害整体效果;另外,训练和服务通常是复杂和昂贵的。

在本工作中,我们的目标是:提升长尾item推荐,并维持整体效果具有更少的训练和服务开销。我们首先发现:用户偏好的预估在长尾分布下会是有偏的。这种bias来自于training和serving数据间的两个差异:

  • 1)item分布
  • 2)用户对于某一给定item的偏好

大多数已经存在的方法,主要尝试减少来自item分布角度上的bias,忽略了对于给定某一item的用户偏好差异。这会导致一个严重的遗忘问题(forgetting issues),并导致次优的效果。

为了解决该问题,我们设计了一个新的CDN(Cross Decoupling Network)来减少这两个不同点。特别的,CDN会:

  • (i) 通过一个MoE结构(mixture-of-expert)来解耦记忆(memorization)和泛化(generalization)的学习过程
  • (ii)通过一个正则双边分支网络(regularized bilateral branch network)来解耦来自不同分布的用户样本

最终,一个新的adapter会被引入进来对decoupled vectors进行聚合,并且将training attention柔和地转移到长尾items上。大量实验结果表明:CDN要好于SOTA方法。我们也展示了在google大规模推荐系统中的有效性。

1.介绍

。。。

2.在推荐中的长尾与动机

。。。

3.CDN(Cross Decoupling Network)

基于上述分析,我们提出了一个可扩展的cross decoupling network(CDN)来解决在item和user侧的两个差异。主要结构如图2所示。

图片名称

图2 Cross Decoupling Network (CDN)

  • 在item侧,我们提出:对头部item和长尾item的represation learning的memorization和generalization进行解耦。为了这么做,我们会使用一个gated MoE结构。在我们的MoE版本中,我们会将memorization相关的features输入到expert子网络中来关注memorization。相似的,我们会将content相关的features输入到expert子网络中来关注generalization。一个gate(通常:是一个learnable function)会被引入进来描述:该模型需要放置多少weight到一个item representation的memorization和generalization上。增强的item representation learning可以将item分布差异进行融合。

  • 在user侧,我们可以通过一个regularized bilateral branch network来将user sampling策略进行解耦,来减少用户偏好差异。该网络包含了:一个主分支用于通用的用户偏好学习,一个正则分支来补偿在长尾items上的用户反馈的稀疏性。在两个branch间的一个共享塔会用来扩展到生产环境中。

最终,我们会将user和item learning进行交叉组合,使用一个\(\gamma\)-adapter来学习用户在长尾分布中的头部和尾部items上的多样偏好。

3.1 Item Memorization 和 Generalization Decoupling

我们引入memorization features 和generalization features的概念,接着,描述了通过一个gated MoE结构来解耦它们的方法。

3.1.1 用于memorization和generalization的features

工业界推荐系统通常会考虑成百上千个features作为model inputs。除了使用相同方式编码这些features之外,我们考虑将这些features进行划分成两组:memorization features和generalization features。

Memorization features

这些features(比如:item ID)会帮助记住在训练数据中user和item间的交叉(协同信号)。正式的,这些features通常是categorical features,满足:

  • 唯一性(Uniqueness):对于它的feature space V,存在 \(\exists f_{in}\)满足 \(f_{in}\)是一个injective function,并且有:\(f_{in}: I \rightarrow V\)
  • 独立性(Independence):对于\(\forall v_1, v_2 \in V\),\(v_1\)的变化不会影响到\(v_2\)

在生产环境推荐系统中,这些features通常由embeddings表示。这些embedding参数可能只会通过对应的item来被更新(唯一性),并且不会与其它items的任何信息共享(独立性)。因而,它们只会记住对于一个特定item的信息,不会泛化到其它已经存在或未见过的items上。同时,由于唯一性,这些features也展示了一个长尾分布。因此:

  • 对于那些对应于头部items的features来说,它们的embedding更新通常会生成一个显著的记忆效果
  • 对于那些尾部items的features,它们的embeddings可能会有噪音,因为缺少梯度更新

Generalization features

泛化features可以学到在user偏好与item features间的相关性,并且可以泛化到其它items上。这些features即可以跨多个不同items共享(例如:item类别、标签等),或者是continuous features。因而,可以泛化到其它已存在或未见过的items上,对于提升尾部item的representation learning来说很重要。

3.1.2 Item representation learning

我们采用带有一个frequency-based gating的MoE结构来解耦memorization features和generation features。该结图如图2的左侧所示。

也就是说,对于一个训练样本(u, i),item embedding可以表示成:

\[y = \sum\limits_{k=1}^{n_1} G(i)_k E_k^{mm} (i_{mm}) + \sum\limits_{k=n_1 + 1}^{n_1 + n_2} G(i)_k E_k^{gen}(i_{gen})\]

…(3)

其中:

  • \(E_k^{mm}(\cdot)\):表示memorization-focused expert,它会将所有memorization features \(i_{mm}\)(例如:item ID)的embeddings进行concat作为input;
  • \(E_k^{gen}(\cdot)\):表示generalization-focused expert,它会将所有generalization features \(i_{gen}\)(例如:item类别)的embeddings进行concat作为input
  • \(G(\cdot)\):是gating function,其中:\(G(i)_k\)表示第k个element,\(\sum\limits_{k=1}^{n_1+n_2} G(i)=1\)

这里的gating很重要,可以对头部items和尾部items的memorization和generalization进行动态平衡。直觉上,gate可以将item frequency作为input,并且通过一个non-linear layer对它进行transform:\(g(i) = softmax(W_{i}_{freq})\),其中,W是一个可学习的weight matrix。它也可以将来自其它features作为input,我们发现:item popularity作为输入效果很好

这种机制可以以一个简单、优雅的方式来发现长尾分布的items间的差异,用来增强item representation learning。通过将memorization和generalization进行解耦,头部items可以达到更好的memorization能力、尾部items也可以同时得到更多的泛化。如【12】所示,增强的item representation可以补偿在\(P(u \mid i)\)和\(\hat{p}(u \mid i)\)间的条件分布的一致性。另外,通过使用 frequency-based gates的experts对memorization和generazation进行解耦,当learning attention偏向于尾部items时,我们可以缓和遗忘问题(forgetting issue)。也就是说,有了decoupling,当training attention偏向于尾部items,来自尾部items的gradients(知识)会主要更新在generalization-focused expert中的模型参数,从而保持着来自 head items的well-learned memorization expert。

3.2 User Sample Decoupling

如图2的右侧user所示,受【13,20,29】的启发,我们提出了一个regularized bilateral branch network ,它包含了两个分支:

  • “main” branch:它会在原始的高度倾斜的长尾分布\(\Omiga_m\)上进行训练;
  • “regularizer” branch:它会在一个相对平衡的数据分布\(\Omiga_r\)上进行训练

\(\Omega_m\)包含了来自头部items和尾部items的所有user feedback,\(\Omega_r\)则包含了对于尾部items的所有user feedback

其中,对头部items的user feedback进行down-sampling,以使得它与最流行的尾部items一样的频次。在两个branch间会使用一个共享的tower来增加扩展性(scalability)。该方法可以温和地对尾部items的用户偏好的学习进行上加权(up-weight)。因此,这会纠正对尾部items的用户偏好的欠估计(under-estimation),并能缓和用户偏好估计的popularity bias。

在每个step中,一个训练样本:\((u_m, i_m) \in \Omega_m\)、以及\((u_r, i_r) \in \Omega_r\)会分别feed到main branch、以及 regularizer branch中。接着 user representation vectors会通过如下进行计算:

\[x_m = h_m(f(u_m)), x_r = h_r(f(u_r))\]

…(4)

其中:

  • \(f(\cdot)\)是一个由两个branch共享的sub-network
  • \(h_m(\cdot)\)和\(h_r(\cdot)\)是 branch-specific sub-networks

共享的network会帮助对来自两个分布的学到知识进行交流,并且能大大减少计算复杂度。branch-specific subnetwork可以为每个数据分布(头部和尾部items)学习唯一的知识。因此,\(\Omega_m\)和\(\Omega_r\)可以被联合学习用来逼近\(\hat{p}(i)\)到\(p(i)\),并减少先验视角的一致性。

main branch的目标是,学习高质量的user representations,并维持着原始分布的特性,是支持进一步学习regularizer branch的基石。如【13】所示,在原始分布上的训练可以学习最好、最泛化的representations。regularizer branch被设计是用来:

  • (1) 添加尾部信息到模型中,并缓和在尾部items上的高IF影响;
  • (2) 通过一个regularized adapter来阻止尾部items的过拟合(over-fitting)

在应用到生产环境时,两个branches可以同时训练。因此,不需要额外的训练开销。注意,在inference时,只会使用main branch,因此没有额外的serving开销。

3.3 Cross Learning

为了桥接在head items和tail items上的gap,我们会通过一个\(\gamma\)-adapter将来自user侧和item侧的信息进行解耦学习。

\(\gamma\)-adapter的设计是用来将学到的representations进行融合,并能柔和地朝着尾部items的学习进行偏移。特别的,

  • 对于\(x_m\)和\(x_r\),它们是从main branch和regularizer branch中学习到的user representations
  • 对于\(y_m\)和\(Y_R\),它对应于学到的item representations

predicted logit可以被公式化为:

\[s(i_m, i_r) = \alpha_t y_m^T x_m + (1 - \alpha_t) y_r^T x_r\]

…(5)

其中:

  • \(\alpha_t\)是\(\gamma\)-adapter,它是一个关于training epoch t的函数:
\[\alpha_t = 1 - (\frac{t}{ \gamma \times T})^2, \gamma > 1\]

…(6)

这里,T是epochs的总数目,\(\gamma\)是regularizer rate。我们看到:\(\alpha_t\)会随着训练过程衰减(随着t递增),这会让模型学习从原始分布朝着平衡后的数据分布偏移。在这种方式下,我们会首先学习通用模式,接着渐近地朝着tail items进行偏移来提升它们的效果。这种顺序对于获得一个高质量representation learning来说很重要,它可以进一步促进regularizier branch的学习,如【32】所示。约束条件\(\gamma > 1\)在推荐setting中也很重要,可以缓和forgetting issue:它可以确保通过训练主要关注点仍在main branch。这对于具有不同imbalanced factor IF的长尾分布来说是一个希望的feature,当IF很高时,更偏好于一个更大的\(\gamma\)。事实上,我们会经验性的发现:𝛾-adapter可以极大有益于在高度倾斜的长尾分布上的学习。

有了logit \(s(i_m, i_r)\),我们可以通过一个softmax来计算:user u对于不同items的偏好概率:

\[p(i | u ) = \frac{e^{s(i_m, i_r)}}{\sum_{j \in I} e^{s(j_m, j_r)}}\]

…(7)

在工作界应用中,出于可扩展性,常使用batch softmax。接着loss function可以被公式化为:

\[L = - \sum\limits_{u \in U, i \in I} \alpha_t \hat{d}(u_m, i_m) log p(i|u) + (1 - \alpha_t) \hat{d}(u_r, i_r) log p(i|u)\]

…(8)

其中:

  • \(\hat{d}(u_m, i_m)\)以及\(\hat{d}(u_r, i_r)\)分别是来自main branch和regularizer branch的user feedback。他们可以帮助学习用到对于items的高偏好得分。

对于inference,为了预估一个user对于一个item的偏好,我们只会使用main branch,并计算preference score:

\[s(u, i) = y_m^T x_m\]

…(9)

以便获得在softmax中的logits。

regularizer branch functions则作为一个regularizer用于训练。在prediction时,test data是长尾的,添加regularizer branch会引入在分布中的其它层的不匹配。

Training和serving开销:对比起标准的双塔模型,CDN对于训练来说具有很小的额外开销。在serving时,在双塔setting中,user side只会使用main branch,item side则具有相同数目的参数/FLOPS。在training时,在user侧的额外开销只有在regularizer branch的head上,它是可忽略的。

讨论:一个直接问题是:为什么我们要从不同角度去解耦user和item side呢?在本工作中,我们考虑来自item side的长尾分布(例如:长尾item分布),它会将users看成是在长尾分布中的样本。如果我们希望考虑来自user side的长尾分布,那么一个直接的方法是:在users和items间切换decoupling方法,如【29】。然而,我们会讨论long-tail用户分布是否也可以不同建模,因为user侧的IF通常要小于item side。另外,两个sides的长尾分布高度相关,可以在每个side上影响IF。这是个nontrivial问题,我们保留该问题,等后续进一步探索。

#

google在《Improving Training Stability for Multitask Ranking Models in Recommender Systems》提出了Clippy Adagrad方法。

摘要

推荐系统在许多内容平台上扮演着重要角色。虽然大多数推荐研究都致力于设计更好的模型以提升用户体验,我们发现对于这些模型训练稳定性方面的研究严重不足。随着推荐模型变得更加庞大和复杂,它们更容易遇到训练不稳定问题,即loss发散,这可能使模型无法使用,浪费大量资源并阻碍模型发展。在本文中,我们分享了我们在提高YouTube推荐多任务排序模型训练稳定性方面的发现和我们学到的最佳实践。我们展示了导致训练不稳定的模型的一些属性,并对其原因进行了推测。此外,基于我们在训练不稳定点附近的训练动态观察,我们假设现有解决方案为何会失败,并提出了一种新算法来减轻现有解决方案的局限性。我们在YouTube生产数据集上的实验表明,与几种常用的基线方法相比,所提出的算法可以显著提高训练稳定性,同时不损害收敛性。我们在 https://github.com/tensorflow/recommenders/ tree/main/tensorflow_recommenders/experimental/optimizers/clippy_adagrad.py 上开源了我们的实现。

1 引言

一个优秀的推荐系统对用户体验起着关键作用。它已成为许多网络应用的核心技术,甚至主要用户界面,包括YouTube,世界上最大的在线视频平台之一。因此,可以将许多组件整合到推荐模型中,以捕捉不同模态的上下文并提高推荐质量,包括音频信号[30]、视频信号[21]、用户历史序列[5, 28]等。此外,推荐模型的规模定律(scaling law)[3]表明,通过在数据丰富的应用中增加模型容量,可以显著提高质量。

随着推荐模型变得更大更复杂,它们更容易遇到训练不稳定问题[14],即loss发散(而不是收敛),导致模型“损坏(broken)”并完全无用。在工业界,提供这样一个“损坏”的模型会导致灾难性的用户体验(见第2.2节)。此外,如果我们不能确保推荐模型的可靠训练,就可能浪费大量资源并阻碍模型发展。因此,我们再怎么强调训练稳定性的重要性也不为过。然而,关于推荐模型的训练稳定性的研究非常少。

一方面,对于推荐模型为何容易出现训练不稳定问题缺乏基本理解。特别是,我们观察到,与具有单一目标的检索模型(例如,在大输出空间上的Softmax交叉熵)相比,具有多个目标的排序模型更有可能遇到问题。除了增加模型复杂性,我们发现简单地添加新的输入特征或输出任务也可能导致训练不稳定。为了解决这个问题,人们大多依赖经验解决方案,有时也依赖运气(当问题随机发生时)。发展对问题原因的基本理解将使人们能够更自信地导航这个过程。

另一方面,我们发现缺乏有效的方法来大幅减轻训练不稳定问题。有一些广泛使用的方法,如激活裁剪[20]、梯度裁剪[7, 24]、学习率预热[12, 14]和层归一化[4]。但在实践中,我们发现这些方法都是权宜之计,不能完全防止我们模型中的训练不稳定。开发一种能有效提高模型训练稳定性的有效方法,通过解决训练问题的担忧,加速模型改进。

本文的重点是要分享从解决YouTube推荐使用的多任务排序模型所经历的训练不稳定问题中学到的经验。

  • 在第2节中,我们将展示现实世界推荐系统中不稳定模型训练的影响和后果,强调显著提高模型训练稳定性的重要性和困难。
  • 在第3节中介绍了我们模型的一些初步基础知识后,我们将介绍一些导致更多训练不稳定问题的案例研究,并提供我们对问题根源的理解。然而,在实践中,我们发现知道根源和拥有有效解决方案之间存在很大差距。一些理应有效的方法在实证上并不奏效。
  • 接下来,在第4节中,我们将仔细检查我们模型的训练动态,这启发我们提出一种更有效的方法来克服现有方法的局限性。第5节中的YouTube数据集的实证证据揭示了所提出方法在提高模型训练稳定性方面的有效性,特别是当增加模型容量和使用大的学习率以更快地收敛时。我们希望这些发现可以帮助社区更好地理解训练不稳定问题并有效解决它。

2 背景和相关工作

2.1 症状

训练不稳定性是衡量模型训练不稳定性的一个属性。它有一个常见的症状,即loss发散(也称为loss爆炸)。根据我们的观察,我们进一步将loss发散分为两种类型:微发散(micro-divergence)和完全发散(full divergence)。当一个模型的loss微发散(见图1中的模型a作为例子),我们可以观察到训练loss突然跳跃和训练指标突然下降,尽管loss可能在训练继续时恢复正常(如例子所示)。通常,我们不需要太担心这种情况,因为恢复的模型可以与没有遭受loss发散的模型具有同等的质量。然而,如果一个模型的loss完全发散(见图1中的模型b作为例子),我们可以看到训练loss在几次训练步骤后变得非常高,所有训练指标变得极其糟糕。例如,二元分类AUC(我们整篇论文中主要关注的指标)在图1中下降到0.5,表明模型变得完全无用,实际上给出了随机结果。更糟糕的是,完全发散的loss无法在训练继续时恢复到发散前的值

图片名称

图1 在我们模型中的loss发散示例及其对训练loss(顶部)和AUC(底部)的影响。在这个例子中,模型a的loss发生了微发散然后恢复了,而模型b的loss完全发散了。

2.2 动机和挑战

我们从几个方面强调了训练稳定性研究的重要性,特别是工业界推荐系统的研究。首先,一旦发生loss发散问题,它可能影响几乎所有类型的模型开发。这包括但不限于:

  • (1) 增加模型复杂性:随着更多的建模技术被应用和更多的组件被添加到推荐模型中(以提高其质量),模型遭受loss发散问题的可能性就更大。即使仅仅增加模型容量也可能使模型处于危险状态,尽管当前的规模定律[3]建议在数据丰富的环境下有巨大的好处。
  • (2) 添加更多输入特征或任务:通常,推荐系统中的排序模型使用许多输入特征进行多项任务[36]。对所有任务的预测组合用来决定候选item的排序。我们发现,添加新的输入特征和添加新任务都可能导致训练不稳定,尽管它们是提高模型质量的常用方法。
  • (3) 提高收敛速度:我们发现,有助于模型收敛的超参数调整(如增加学习率)可以显著增加loss发散的可能性。这迫使模型设计者使用较小的学习率,这导致收敛速度变慢。

第二,由于训练复杂模型需要大量的资源,loss发散问题阻碍了模型完成训练,浪费了训练资源。此外,无意中部署一个“损坏(broken)”的模型提供服务也会导致灾难性的用户体验。

因此,我们看到了许多从工程角度缓解这个问题的努力,例如在提供服务之前确保模型质量。然而,鉴于工程努力无法防止训练不稳定性的发生,很明显,从长远来看,大幅提高模型训练稳定性是正确的追求路径

在处理模型不稳定性问题时,我们遇到了以下挑战。

  • 可复制性(Reproducibility):模型在训练期间的任何时候都可能遭受loss发散,然而,只有其中一些可以容易地复现(第3节中有更多讨论)。无法复现坏的情况使得理解模型在loss发散之前发生了什么变得困难。
  • 检测(Detection):在实践中,频繁地在训练期间评估模型并报告结果成本很高,否则训练可能会显著放缓。由于有时微发散可能发生,然后非常快地恢复,即使没有牺牲训练速度,也很难检测模型训练期间是否发生了任何微发散
  • 测量(Measurement):很少有研究对模型训练稳定性的定量测量先于训练。要知道(1)建模变更是否会增加loss发散的风险,或者(2)缓解措施是否有助于减少loss发散的风险,人们必须依赖经验评估(即,训练模型的多个副本,并检查其中有多少有问​​题),这是耗时且资源密集的。

2.3 相关工作

模型训练稳定性一直是一个研究不足的领域,不仅在推荐模型中如此,在通用机器学习中也是如此。幸运的是,随着大型模型的日益增加趋势[8, 11, 29],稳定模型训练已成为一个新兴的研究领域,并在近年来吸引了更多的关注。

从优化理论的角度来看,Wu等人[32]首次从学习率和loss曲率的“锐度”(通过lossHessian的最大特征值来衡量)理论上预测了二次模型的训练不稳定性。对于深度神经网络,Cohen等人[12],Gilmer等人[14]证实了这一预测仍然足够准确。

在技术方面,有一些方法在语言和视觉模型中得到了广泛应用,如激活裁剪[20]、梯度裁剪[24]、学习率预热[16]以及各种归一化技术[4, 18]。此外,You等人[34]提出了一种新的优化器,为大批量训练在收敛性和稳定性之间实现了更好的权衡。Brock等人[7]开发了自适应梯度裁剪,以提高没有批量归一化[18]的ResNet模型[17]的稳定性。

然而,从经验上,我们发现这些方法对于完全防止我们的模型训练不稳定性还不够有效(见第5节)。这可能是由于推荐模型的一些独特属性。正如下一节将讨论的,这些属性可能使多任务排序模型更容易出现训练不稳定性问题。

3 理解问题的原因

在本节中,我们首先描述本文要研究的模型及其特性。然后,我们分享了我们对发生在我们模型中的训练不稳定问题根本原因的理解。

3.1 模型定义

YouTube的视频推荐系统,首先使用多个候选生成算法检索几百个候选项。接着是一个排序系统,它从这些候选项中生成一个排序列表。本文主要关注YouTube推荐系统中的排序模型。与候选生成模型(即检索模型)不同,后者负责过滤掉大部分不相关item,排序模型旨在提供排序列表,以便对用户最有用的物品显示在顶部。因此,排序模型使用更先进的机器学习技术,使用更昂贵的特征,以获得足够的模型表达能力,学习特征及其与效用的关联。

图2展示了我们希望在整篇论文中研究的排序模型的一般架构。以下是我们排序模型的一些重要特性以及它的训练方式;详情可参考[36]。

图片名称

图2 推荐系统中使用的排序模型的一般示意图。该模型具有一个或多个层,这些层由多个任务(软共享或硬共享)共同使用。

  • 多任务(multitask):如图2所示,排序模型有多个任务,预测多个标签。这些预测被组合以形成最终的物品排序列表。不管不同的建模选择[9, 22],模型中间有一些隐藏层由这些任务共享(要么完全共享,要么软共享)。
  • 顺序训练(Sequential training):模型是顺序训练的,即,训练是按数据集合的顺序从旧到新完成的。不同于纯在线学习[6, 25](它会严格按顺序访问训练数据),我们定义了一个基于时间的移动窗口,并从这个窗口中的训练数据中随机采样数据batch进行并行训练。这种训练方案已被广泛使用,并且已知对许多推荐质量方面都有益[2, 23, 36]。
  • 优化(Optimization):众所周知,大批量训练(Large batch-size training)在梯度上噪声较小,因此optimization更多地受曲率驱动[2, 34]。我们采用大batch-size和高学习率以实现更快的收敛。我们发现Adagrad[13]在我们的情况下非常有效,尽管优化器有许多进步(例如,Adam[19],Adafactor[26])。

3.2 根本原因和案例研究

不管loss发散的类型如何,我们认为内在原因可以总结为“当loss曲率陡峭时,step-size太大”。一旦模型在给定状态下满足这两个条件,就容易发生发散。直观地说,步长应该在陡峭的loss表面上保守(通过lossHessian的最大特征值来测量),以确保loss减少而不是增加。

对于二次模型(quadratic models),Wu等人[32]从理论上证明了上述论点,并建议 \(\frac{2}{\eta} > \alpha_*\)

以使训练稳定,其中:

  • $\eta$:是学习率
  • $𝛼_*$:是lossHessian的最大特征值

Cohen等人[12]为证明提供了一个很好的直接例子(见图3)。对于神经网络,这一论点仍然大体成立[12, 14]。

图片名称

图3 来自[12, 图2]。在具有特征值$𝛼_1 = 20$和$𝛼_2 = 1$的二次模型上进行梯度下降。我们可以清楚地观察到,当学习率 $\eta > 2/𝛼_* = 2/𝛼_1 = 0.1$时,开始出现训练不稳定问题。

了解训练不稳定问题的根本原因,使我们能够回答以下研究问题:

  • RQ1:为什么一般的推荐模型比其他领域的模型有更差的训练稳定性?
  • RQ2:在推荐模型中,为什么排序模型通常比检索模型有更差的训练稳定性?

我们将这些问题的答案与我们模型的独特属性联系起来。请参阅补充材料第A.1节中的一些实证证据。

  • 数据分布变化(RQ1):与其他领域的模型相比,推荐模型使用的数量级更多的输入特征(数百到数千个)。更糟糕的是,随着顺序训练的进行,这些输入特征(和标签)的分布不断变化。我们认为,当数据分布发生突变时,可能会产生更陡峭的loss曲率,这在推荐系统中是常见的。此外,顺序训练的模型永远无法收敛,因为它必须适应新到来的数据点,这些数据点的分布已经改变。因此,需要较大的学习率来使适应足够高效。总结来说,与在固定数据集上训练的其他领域模型相比,训练数据分布的变化对稳定推荐模型的训练提出了更大的挑战。
  • 更大的模型大小和复杂性(RQ2):与用于候选生成的检索模型相比,排序模型通常具有更大的容量,以准确衡量候选item的作用。随着ML硬件(例如,TPU)的最近发展,我们能够显著增加模型大小以提高质量[3]。Gilmer等人[14]的实证研究表明,增加的模型容量和复杂性是导致loss曲率更陡峭的一个因素
  • 多目标与单目标(RQ2):与通常只有一个目标的检索模型(例如Softmax交叉熵)[33]相比,排序模型通常需要同时优化多个目标[36]。这导致排序模型更容易遭受loss发散。因为如果由于特定任务的不良预测导致出现虚假梯度,这些梯度可以在整个模型中反向传播,导致被多个任务共享的层表现得(略微)异常。但是,由于这些层被不同任务共享,其他任务往往会在之后预测出不规则的值,加强不稳定状态至不可恢复。换句话说,共享层(以及嵌入)可能是一把双刃剑——它们允许从不同任务中转移学习,但也可能加剧训练不稳定问题,使排序模型比检索模型更脆弱

尽管在理解发散问题的根本原因方面最近取得了进展,我们发现我们对问题原因的当前理解与拥有有效解决方案之间仍存在很大差距。我们尝试了许多临时解决方案。一些例子包括:

  • (1) 使用更慢的学习率的热启计划(warmup schedule)来通过初始模型状态( initial model state),此时loss曲率陡峭[14]。
  • (2) 扩大顺序训练移动窗口,使训练数据分布变化更平滑。

这些解决方案确实在一段时间内缓解了训练不稳定问题,但当我们的模型变得更复杂时,loss发散又发生了。在尝试了多种权宜之计后,我们相信开发一种可以显著提高模型稳定性的更有原则的方法是长期解决方案。

4 提高训练稳定性的有效方法

在本节中,我们首先介绍控制有效步长(当loss曲率陡峭时)的一般方向(梯度裁剪),通过介绍这个方向上的一些经典方法,及其符号和表示。尽管这些经典方法在其他领域应用时取得了成功,但我们发现这些经典方法在我们的模型中应用时效果不够好。基于对我们模型训练动态的一些观察,我们提出了一种新方法,并解释了为什么它在提高训练稳定性方面可能更有效。

Adagrad

我们首先描述Adagrad[13],这是我们模型中使用的优化器。在Adagrad中,模型参数$𝒘_𝑡$通过以下规则更新:

\[G_{t} = G_{t-1} + g_{t}^{2} \\ r_{t} = g_{t}{G_{t}^{-1/2}} \\ w_{t+1} = w_{t} - \eta_{t} \cdot r_{t}\]

…(1)

其中:

  • $\eta_𝑡$:表示第𝑡步的学习率
  • $𝒈_𝑡$:是模型参数的经验loss的标准化随机梯度,
  • $𝑮_𝑡$:被称为“累加器(accumulator)”,是一个向量,初始化为一个小常数值,通常为0.1。此外,所有幂运算都是逐元素计算的。

如第3节所述,我们希望采用更有原则的方法来控制loss曲率陡峭时的步长。然而,通过lossHessian的特征值测量的loss曲率在训练期间计算成本非常高。幸运的是,一阶梯度$𝒈_𝑡$可以用作Hessian的替代品(参见[35])。因此,基于梯度裁剪的算法变得非常流行,用于提高训练稳定性,并在许多大型模型中使用[8, 11, 29]。

梯度裁剪(Gradient Clipping)

由Pascanu等人[24]提出,梯度裁剪(GC)在将其应用于模型之前限制梯度的大小(通过其范数测量)。换句话说,当梯度大小变化(loss曲率变得更陡)时,梯度裁剪通过控制“有效步长”来稳定模型训练

正式地说,梯度裁剪算法在应用模型更新之前将梯度$𝒈_𝑡$裁剪为:

\[g \rightarrow \begin{cases} \lambda \frac{g}{\|g\|} & \text{if } \|g\| \geq \lambda, \\ g & \text{else.} \end{cases}\]

或者

\[g \rightarrow \sigma \cdot g\]

其中:

\[\sigma = \min\{\frac{\lambda }{\|g\|}, 1.0\}\]

…(2)

裁剪阈值𝜆是一个超参数,控制最大允许的梯度范数$∥𝒈∥$。换句话说,如果在第𝑡步模型梯度$𝒈_𝑡$的大小很大,GC将通过标量裁剪因子$𝜎 \in R^+$重新调整梯度,将其范数限制为𝜆。在实践中,Frobenius范数(或𝐿2范数)$∥.∥_2$是向量范数的常见选择,裁剪通常独立应用于每一层。

自适应梯度裁剪(Adaptive Gradient Clipping)

从经验上,尽管GC可以提高模型的训练稳定性,但训练稳定性对裁剪阈值𝜆的选择极其敏感,需要为不同层进行细粒度调整。更糟糕的是,当模型结构、批量大小或学习率发生变化时,阈值𝜆需要重新调整。

为了克服这个负担,Brock等人[7]提出了自适应梯度裁剪(AGC)。AGC的动机是观察到梯度的范数$∥𝒈_𝑡∥$与模型参数的范数$∥𝒘_𝑡∥$的比率不应该很大,否则训练预计会不稳定

具体来说,梯度𝒈通过以下方式裁剪:

\[g \rightarrow \begin{cases} \lambda \frac{\|w\|}{\|g\|} g & \text{if } \frac{\|g\|}{\|w\|} \geq \lambda, \\ g & \text{else.} \end{cases}\]

或者

\[g \rightarrow \sigma \cdot g,\]

其中:

\[\sigma = \min\{\lambda \frac{\|w\|}{\|g\|}, 1.0\} \quad(3)\]

直观地说,如果在第𝑡步梯度范数 $| 𝒈_𝑡 |$大于参数范数 $𝜆·| 𝒘_𝑡 |$的一个分数,AGC将通过标量裁剪因子$\sigma \in R^+$重新调整梯度,将其范数限制为$𝜆 | 𝒘_t |$。AGC可以被视为GC的一个特例,其中裁剪阈值𝜆GC是模型参数的函数$𝜆GC=𝜆 \cdot AGC | 𝒘 |$。所以当使用AGC时,我们不需要为不同的层微调𝜆,这就是“自适应性”的来源。

4.1 训练动态的观察

尽管GC和AGC在各个领域都取得了成功,我们发现当它们应用在我们的模型中时,并不足以防止loss发散。为了更好地理解GC/AGC的局限性并提出更好的解决方案,我们检查了不使用任何基于梯度裁剪技术的模型训练。

图片名称

图4 (a) 我们深入研究了模型训练中的三个典型时刻:在步骤a之前,模型健康地训练着。然后在步骤b,模型的损失引起波动,AUC下降。最后在步骤c,损失完全发散,AUC下降到了0.5。 (b) 当检查模型顶层隐藏层的一些统计数据时,我们发现GC和AGC未能提供足够小的裁剪因子。而Clippy的裁剪因子可以比GC和AGC小两个数量级。补充材料的B节有其他层的统计数据。

  • 图4a显示了一个特定二元分类任务的训练loss和AUC。为了简化说明,让我们主要看3个最重要的训练步骤:步骤a、步骤b和步骤c。如我们所见,此模型在步骤a之前健康地训练:loss被最小化,AUC迅速提高。然而,在步骤b,模型的训练loss开始发散,AUC开始下降,尽管相对不明显。最后,在步骤c,这个模型完全发散,loss变大,AUC下降到0.5。
  • 图4b(左),我们仔细查看了一些顶级共享层的统计数据,以了解loss发散时发生了什么。在模型健康的步骤a之前,梯度范数$∥𝒈∥_2$相当一致。然后在步骤b增长到一个很大的值,表明那一刻loss曲率非常陡。由于我们没有应用任何模型稳定性处理,模型在步骤c完全发散,梯度范数$∥𝒈∥_2$变成了一个小值。这意味着这一层的所有预激活(应用非线性激活之前的值)已经达到了梯度非常小的状态3,导致loss发散变得不可恢复

知道发生了什么,我们构想了GC/AGC在这种情况下将如何反应。

  • 图4b(左)绘制了用于确定GC和AGC中裁剪因子的$∥𝒈∥_2$(蓝色)和$\frac{∥𝒈∥_2}{∥𝒘∥_2}$(橙色)的测量值。不出所料,这两种测量在步骤b变得更大。然而,这些测量的变化相对规模是不同的。$\frac{∥𝒈∥_2}{∥𝒘∥_2}$(橙色)比$∥𝒈∥_2$(蓝色)对loss曲率变化更敏感。这些测量的敏感度差异可能导致不同的裁剪因子𝜎,这是不同方法中梯度的重新调整乘数
  • 图4b(右)给出了使用$\lambda^{GC}=10^{−1}$和$\lambda^{AGC}=10^{−3}$作为裁剪阈值时GC和AGC的裁剪因子𝜎。通过检查裁剪因子,我们假设:GC/AGC无效的原因是它们未能在梯度范数突然增加时(即loss曲率变陡),提供足够的梯度约束(即未能提供足够的“有效步长”控制),因为缺乏敏感性。更具体地说,这两种方法都依赖于𝐿2范数,这对于只有少数几个坐标中剧烈的梯度变化不敏感,特别是当层宽度很大时

4.2 提出解决方案:Clippy

为了缓解这一局限性,我们提出了一种名为Clippy的新算法。Clippy对GC/AGC有两个主要变化:首先,它使用$𝐿_∞$范数而不是$𝐿_2$范数,以增加对各个坐标变化的敏感性。其次,它基于更新$𝒓_𝑡=𝒈_𝑡·𝑮_t^{−1/2}$而不是梯度$𝒈_𝑡$进行裁剪,因为更新是模型参数的实际变化,在使用Adagrad优化器时,更新可能与梯度大不相同。

具体来说,Clippy控制

\[\|r_{t}\|_{\infty} = \|g_{t} \odot G_{t}^{-1/2}\|_{\infty} < \lambda, \quad(4)\]

当不等式被违反时重新调整更新。从图4b中,我们可以看到当loss发散时,这个测量在步骤b有更剧烈的变化。假设我们使用$𝜆^{Clippy}=10^−1$作为裁剪阈值,由于测量的更好敏感性,Clippy产生的裁剪因子𝜎比GC/AGC小两个数量级。换句话说,我们希望Clippy即使在少数几个坐标陡峭的loss曲率时,也能对实际更新施加更大的约束。

正式地,我们在算法1中展示了Clippy。如所见,与我们在等式4中描述的相比,算法的第8行有一些微小但重要的变化。

  • (1) 引入绝对阈值。在Clippy中,我们使用两个超参数:与GC/AGC相似的相对阈值$𝜆_{rel}$,以及另一个绝对阈值$𝜆_{abs}$。引入绝对阈值$𝜆_{abs}$后,我们可以避免在模型参数为零(例如,初始化为零的偏差)或具有非常小的值时进行激进的裁剪。如4.3.1节所讨论的,这允许Clippy在训练过程中从GC风格切换到AGC风格。
  • (2) 考虑学习率。在计算裁剪因子时,我们在分母上有学习率$𝜂_𝑡$,以适应不同的学习率计划。如果学习率缓慢增加,这将在初始训练时放宽裁剪阈值,避免在训练的初始阶段收敛速度过慢。

4.3 额外讨论

4.3.1 与其他方法的关系

Clippy与其他方法有有趣的联系。在基于梯度裁剪的算法中,如果我们用原始梯度(而不是裁剪后的梯度)累积累加器。然后,我们可以有一个通用的Adagrad更新形式,包含上述所有算法

\[r_{t} = g_{t} \odot G_{t}^{-1/2}, \\ w_{t+1} = w_{t} - (\mu_{t} \sigma_{t}) r_{t}. \quad(5)\]

也就是说,不同算法用不同的裁剪因子𝜎𝑡来降低学习率𝜂𝑡。不同算法选择裁剪因子的方式总结在下面的表格中。

Clippy是GC/AGC/LAMB的结合体

首先,Clippy在训练过程中从GC风格切换到AGC风格。在模型训练初期,当 𝒘 ≈ 0时,$𝜆_{abs}$主导裁剪阈值$𝜆_{rel} \mid 𝒘_𝑡 \mid +𝜆_{abs}$,使得Clippy接近GC。在后续训练中,当$𝜆_{rel} \mid 𝒘 \mid ≫ 𝜆_{abs}$时,Clippy表现得更像AGC。然而,与GC/AGC相比,Clippy依赖于更新而不是梯度。此外,尽管Clippy和LAMB都使用更新,Clippy并没有像LAMB那样完全忽略更新的幅度。最后,Clippy使用𝐿∞范数而不是𝐿2范数,以对少数坐标中的剧烈更新变化更敏感。

4.3.2 局部裁剪还是全局裁剪

使用Clippy时,我们对每一层的更新进行裁剪(即局部裁剪),而不是对所有模型参数作为一个整体进行裁剪(即全局裁剪),这与其他方法(如GC/AGC/LAMB)类似。这提供了更细粒度控制的灵活性,但会导致有偏的梯度更新。然而,在大批量设置中,可以证明这种偏差很小[34]。

4.3.3 适应其他优化器

通过使用优化器依赖的更新𝒓𝑡,人们可以轻松地将Clippy适应于Adagrad之外的其他优化器。从经验上,我们还观察到,在Adam[19]上应用Clippy时,在不损害收敛性的情况下,训练稳定性有明显好处。但我们将Clippy的理论收敛性分析留给未来的工作。

5 实证研究

在本节中进行的实验是基于YouTube生产数据集进行的,实验分为两部分。首先,我们将Clippy与其他基线进行比较,以验证其在提高模型稳定性方面的优势。然后,我们将展示对Clippy的一些进一步分析,以更好地理解它的优势。

5.1 实验设置

5.1.1 模型细节。除了在第3.1节中已经介绍的所有模型属性外,值得一提的是,我们通过以下方式简化了我们的排序模型:(1) 仅保留最重要的任务子集和输入特征;(2) 使用具有几个共享隐藏层的简单共享底部结构。尽管比生产模型简单得多,我们发现它是一个足够好的测试平台,用于研究训练稳定性问题,因为它允许我们更快地训练模型,更专注于研究视角而不是不相关的建模细节。该模型是使用TensorFlow2 [1]构建的,并在TPU上使用65k的大批量大小进行训练。

5.1.2 评估协议。不幸的是,没有可靠的度量标准来量化模型的训练稳定性。为了准确衡量更好的训练稳定性带来的好处,我们改变模型复杂性以及学习率,然后检查模型的离线质量,对于二元分类任务用AUC衡量,对于回归任务用RMSE衡量。可以合理假设,更复杂的模型提供更好的离线质量,但更有可能遭受loss发散问题。因此,如果一种算法能显著提高模型的训练稳定性,我们应该在使用它时观察到更好的离线指标。更具体地说,我们使用数据的前(𝑁−1)天来顺序训练模型,并持续评估模型在最后一天(第𝑁天)数据上的性能(AUC或RMSE)。如果模型在训练期间没有遭受任何loss发散问题,我们应该观察到评估指标不断变好,因为模型正在适应更接近第𝑁天数据的数据分布。而如果模型在训练期间loss发散,无论是完全发散还是持续微发散,评估指标将受到显著影响。

为了探索模型复杂性的影响,我们考虑了表1中总结的各种模型设置。Small和Large都使用简单的前馈网络作为共享底部,分别有两层512和四层4096。Large+DCN是在Large的基础上构建的,通过在输入上添加DCN-v2层[31],然后是标准的层归一化[4],进一步增加了复杂性。

图片名称

表1

5.1.3 基线

我们在非嵌入式模型参数上应用Clippy和其他基线,并比较它们的有效性。以下是这些基线和Clippy的更多细节。

  • 梯度裁剪(GC)[24]:我们使用了逐层(局部)梯度裁剪,裁剪阈值从𝜆GC∈{10−1, 10−2, 10−3}中搜索得出。
  • 自适应梯度裁剪(AGC)[7]:我们使用了论文中提供的官方实现,并从𝜆AGC∈{10−2, 10−3, 10−4}中搜索裁剪阈值。
  • LAMB(适应Adagrad)[34]:LAMB最初是基于Adam[19]提出的,而作者还提供了我们在4.3.1节中介绍的通用裁剪形式。我们选择𝜙(𝑥)=𝑥,如官方实现。由于LAMB使用参数𝐿2范数∥𝒘∥2作为更新幅度,与其他方法不同,我们必须通过𝜇缩放学习率,并搜索𝜇∈{10−1, 10−2, 10−3}。
  • Clippy:Clippy有两个超参数𝜆abs和𝜆rel,所以调整可能更不平凡,但我们发现简单地设置𝜆rel=0.5和𝜆abs=10−2在我们的实验中就能给出不错的性能。

5.2 整体性能

表2展示了Clippy与其他基线在不同模型设置上的总体比较。尽管模型是在六项任务上训练的,但由于空间限制,我们只展示了两个最具代表性任务的指标——一个用AUC(百分比)评估的二元分类任务和另一个用RMSE评估的回归任务。我们不仅使用原始学习率,还尝试加倍学习率,看看是否有任何方法能从中受益。在确定了最佳学习率后,我们在不同的随机种子下重复相同的设置3次,并报告了平均值和标准差。

图片名称

表2

**查看表2,我们可以看到没有任何训练稳定性处理的简单方法总是会遭受loss发散,即使是在小型模型上也是如此。如果我们大幅降低学习率,它有机会存活下来(见补充材料的A.1节),但我们在这里省略了它的结果,因为它们很差。GC可以在2倍学习率下存活并为小型和大型模型提供良好的结果。但在具有DCN的更复杂模型中,GC只能使用1倍学习率,否则它将遭受loss发散问题(见图5a右侧的蓝线)。AGC在1倍学习率下对小型和大型做了合理的工作,但在2倍学习率下表现变差。在Large+DCN上,AGC使用1倍或2倍学习率都显示出非常高的方差(见图5a中的橙色线),表明AGC在保持训练稳定性方面已经达到了它的极限。LAMB使用1倍学习率成功地训练了模型,没有遭受训练不稳定问题,但收敛性受到了负面影响。在图5a中,我们发现LAMB的结果总是比其他方法差。我们认为这是由于LAMB完全忽略了更新幅度,导致在参数𝐿2范数很小时,初始训练的收敛非常慢。令人惊讶的是,在所有设置中,GC在所有基线中表现最佳,这可能是因为模型相对简单,因此调整GC的裁剪阈值仍然很容易。

图片名称

图5

在表2的最后一列,我们可以看到Clippy在所有模型设置中使用2倍学习率。更重要的是,Clippy没有妥协收敛性,它在小型和大型模型上与GC(即最佳基线)具有可比的结果(见图5b),并且在Large+DCN模型上与GC相比有显著更好的AUC(请注意,在我们模型中0.1%的AUC改进被认为是非常显著的,并且可以导致实时度量增益)和RMSE。

我们想要强调的一个重要发现是,当模型更复杂并且使用更大的学习率训练时,Clippy提供了更大的增益。在图5b中,我们可以看到当使用更复杂的模型和2倍学习率时,Clippy和GC之间的差距正在扩大。所以我们不惊讶Clippy可以在比Large+DCN复杂得多的生产模型中提供帮助。

5.3 仔细看看Clippy的裁剪因子

图片名称

图6

图6显示了在训练Large+DCN模型过程中Clippy在不同层的裁剪因子。如第4节中介绍的,裁剪因子𝜎∈(0.0, 1.0]。较小的裁剪因子表示进行了更多的裁剪以降低学习率。由于裁剪是逐层应用的,我们为几个层绘制了裁剪因子,包括(1)DCN层的权重,在(2)共享底部的(3)顶层和(4)底层隐藏层,以及在(5)二元分类任务和(6)回归任务的输出层。有趣的是,我们看到模型的底层进行了更多的裁剪。我们认为这直观上是有意义的,因为底层通常有较小的参数范数,所以Clippy的裁剪阈值也会较小。另一方面,这可能有助于训练稳定性,因为我们知道底层权重的微小变化可能导致模型输出的很大差异。

#

#

https://arxiv.org/pdf/2302.09178