返回介绍

数学基础

统计学习

深度学习

工具

Scala

1.4 实验

发布于 2023-07-17 23:38:23 字数 13176 浏览 0 评论 0 收藏 0

1.4.1 人工合成数据集

  1. 为了解MMoE 模型是否可以更好地处理任务相关性较低的情况,我们改变了人工合成数据的任务相关性,并观察了不同模型的行为如何变化。

    我们还进行了可训练性trainability 分析,并表明和Shared-Bottom 模型相比,MMoE 模型更易于训练。

  2. 配置:

    • 输入维度为 100

    • 所有 MoE based 模型都有 8 个专家,每个专家都实现为一个隐层维度为 16 的单层网络。tower 网络实现为一个隐层维度为 8 的单层网络。

      我们注意到,共享的专家和 tower 中所有参数的总量是 $ 100 \times 16 \times 8 + 16\times 8\times 2 = 13056 $ 。

    • 对于baselineShared-Bottom 模型,我们仍然将 tower 网络实现为一个隐层维度为 8 的单层网络。我们设置单层的 shared-bottom network,其隐层维度为 $ 13056/(100 + 8 \times 2)\simeq 113 $ 。

    • 所有模型都使用 Adam 优化器训练,学习率在 [0.0001, 0.001, 0.01] 中进行网格搜索。

    注意:由于两个回归任务是对称的,因此只需报告一个任务的loss 值即可。

  3. 对于每种模型配置,我们重复 200 次独立运行,每次使用随机生成的数据和随机的模型初始化。平均结果如下图所示。可以看到:

    • 对于所有模型,具有较高相关性的数据,其性能要优于具有较低相关性的数据。其中性能以损失函数loss 来衡量。

    • 在具有不同相关性的数据上,MMoE 模型的性能差距要远小于 OMoE 模型和Shared-Bottom 模型。当我们将 MMoE 模型和 OMoE 模型进行比较时,这种趋势尤为明显:

      • 在两个任务相同的极端情况下,MMoE 模型和 OMoE 模型的性能几乎没有区别。
      • 当两个任务之间的相关性降低时,OMoE 模型的性能就会明显降低,而 MMoE 模型的影响很小。

      因此,在低关联性的情况下,具有 task-specific gate 对任务差异建模至关重要。

    • 就平均性能而言,两种 MoE 模型在所有情况下都优于Shared-Bottom 模型。这表明MoE 结构本身带来了额外的好处。根据这一观察,我们在后续展示了 MoE 模型比Shared-Bottom 模型具有更好的可训练性trainability

  4. 对于大型神经网络模型,我们非常关心它们的可训练性trainability,即模型在一系列超参数设置和模型初始化的鲁棒性。

    最近,Collins 等人发现,某些门控 RNN 模型(如 LSTMGRU),这些模型我们认为比普通 RNN 性能更好,更容易训练,而不是具有更好的模型容量。

    虽然我们已经证明 MMoE 可以更好地处理任务相关性较低的情况,但是我们也希望更深入地了解它在可训练性方面的表现。利用我们的人工合成数据,我们可以自然地研究我们的模型对于数据和模型初始化中的随机性的鲁棒性。

    我们在每种配置下重复实验多次。每次数据都是在相同的分布、但是不同的随机种子生成的,模型的初始化也不同。我们在下图中绘制了重复运行的最终 loss 值的直方图。在直方图中有三个有趣的观察结果:

    • 首先,在所有配置中,Shared-Bottom 模型的性能差异要比 MoE-based 模型大得多。这意味着Shared-Bottom 模型通常比 MoE-based 模型具有更差质量的局部极小值。

    • 其次,当任务相关度为 1 时,OMoE 模型的性能方差与 MMoE 模型的性能方差具有相似的鲁棒性。而当任务相关性降低到 0.5 时,OMoE 模型的鲁棒性有显著的下降。

      注意到 MMoEOMoE 唯一的区别在于是否采用多门结构。这验证了多门结构在解决由任务差异导致的冲突conflict ,从而带来的不良局部极小值方面的有效性。

    • 最后,值得观察的是:所有三种模型的最低loss 是可比的。这并不奇怪,因为神经网络在理论上是通用的函数逼近器approximator 。只要有足够的模型容量,就应该存在一个 “正确的” Shared-Bottom 模型来很好地学习这两个任务。

      但是请注意:这是 200 个独立实验的分布。而且我们怀疑,对于更大、更复杂的模型(例如,当 shared-bottom networkRNN 时),获得任务关系的 “正确” 模型的机会可能更低。因此,显式建模任务关系仍然是可取的。

1.4.2 真实数据集

  1. baseline 方法:除了 Shared-Bottom 多任务模型之外,我们还比较了几种 state-of-the-art 多任务深度神经网络模型。

    • L2-Constrained:该方法是为一个拥有两个任务的跨语言问题cross-lingual problem 设计的。在该方法中,不同任务的参数由 L2 约束软性共享shared softly

      假设任务 $ k,k=1,2 $ 的 ground truth label 为 $ y_k $ ,任务 $ k $ 的预估结果为 $ \hat y_k=f\left(\mathbf{\vec x};\theta_k\right) $ ,其中 $ \theta_k $ 为模型参数。该方法的目标函数为:

      $ \mathcal J = \mathbb E\left[L\left(y_1,f\left(\mathbf{\vec x};\theta_1\right)\right)\right] + \mathbb E\left[L\left(y_2,f\left(\mathbf{\vec x};\theta_2\right)\right)\right] +\alpha \left\|\theta_1-\theta_2\right\|_2^2 $

      其中:

      • $ y_1 $ 为任务1ground truth label , $ y_2 $ 为任务2ground truth label
      • $ L(\cdot,\cdot) $ 为损失函数。
      • $ \alpha $ 为超参数。该方法使用 $ \alpha $ 的大小来建模任务相关性。
    • Cross-Stitch:该方法通过引入一个 Cross-Stitch 单元,从而在两个任务之间共享知识。Cross-Stitch 单元从任务 1 和任务 2 中获取隔离separated 的隐层 $ \mathbf{\vec x}_1,\mathbf{\vec x}_2 $ 作为输入,并通过以下等式分别输出 $ \tilde{\mathbf{\vec x}}_1^{(i)},\tilde{\mathbf{\vec x}}_2^{(i)} $ :

      $ \begin{bmatrix} \tilde{\mathbf{\vec x}}_1^{(i)}\\ \tilde{\mathbf{\vec x}}_2^{(i)} \end{bmatrix}=\begin{bmatrix} \alpha_{1,1}&\alpha_{1,2}\\ \alpha_{2,1}&\alpha_{2,2} \end{bmatrix}\begin{bmatrix} {\mathbf{\vec x}}_1^{(i)}\\ {\mathbf{\vec x}}_2^{(i)} \end{bmatrix} $

      其中:

      • $ \alpha_{j,k},j,k=1,2 $ 为可训练的参数,代表从任务 $ k $ 到任务 $ j $ 的交叉迁移cross transfer
      • $ \tilde{\mathbf{\vec x}}_1^{(i)},\tilde{\mathbf{\vec x}}_2^{(i)} $ 表示在任务 1 和任务 2 中被发送到更高的层的 representation 。 $ i $ 表示第 $ i $ 层。
    • Tensor-Factorization:在该方法中,将多个任务的权重张量进行张量分解从而用于跨任务的参数共享。为进行比较,我们实现了Tucker 分解以学习多任务模型,据报道该模型可以提供最可靠的结果。

      例如,给定输入隐层维度为 $ m $ 、输出隐层维度为 $ n $ 、任务数量 $ K $ 的情况下,权重 $ \mathbf W $ 是一个 $ m\times n\times K $ 的张量,它由以下等式得到:

      $ \mathbf W = \sum_{i_1}^{r_1}\sum_{i_2}^{r_2}\sum_{i_3}^{r_3}S(i_1,i_2,i_3)\times \mathbf U_1(:,i_1)\circ\mathbf U_2(:,i_2)\circ \mathbf U_3(:,i_3) $

      其中:

      • $ \mathbf S\in \mathbb R^{r_1\times r_2\times r_3} $ 为一个张量,它为可训练的参数。
      • $ \mathbf U_1\in \mathbb R^{m\times r_1},\mathbf U_2\in \mathbb R^{n\times r_2},\mathbf U_3\in \mathbb R^{K\times r_3} $ 为矩阵。它们都是可训练的参数。
      • $ \circ $ 为向量的外积。
      • $ r_1,r_2,r_3 $ 为超参数。
  2. 配置:

    • 我们采用了一种超参数调优器hyper-parameter tuner 为所有模型搜索最佳超参数,调优算法是一个高斯过程模型Gaussian Process model

      除了调优所有方法的学习率和训练step 的数量之外,我们还调优了一些model-specific的超参数:

      • MMoE:专家的数量、每个专家的隐层维度。
      • L2-Constrained:隐层维度、 $ \alpha $ 系数。
      • Cross-Stitch:隐层维度、Cross-Stitch layer 的维度。
      • Tensor-Factorization:系数 $ r_1,r_2,r_3 $ 、隐层维度。
    • 为使得公平地比较,我们通过为每层隐单元数量设置相同的上限来限制所有方法的最大模型大小,即 2048 。对于 MMoE ,它就是 “专家数量” 乘以 “每个专家的隐层维度” 。

    • 我们的方法和所有 baseline 方法都是使用 Tensorflow 来实现的。

a. Census-income 数据集

  1. UCI census-income 数据集:从 1994 年人口普查数据库中抽取的,包含 299285 个美国成年人的人口信息,每个样本有 40 个特征。

    通过将某些特征设置为预测目标,我们从该数据集中构造了两个多任务学习问题,并计算了 10000 个随机样本中任务标签的皮尔逊相关系数的绝对值:

    • 任务1:预测收入是否超过5 万美元;任务2:预测他/她是否从未结婚。绝对皮尔逊相关系数为 0.1768
    • 任务1:预测教育程度是否至少为大学;任务2:预测他/她是否从未结婚。绝对皮尔逊相关系数为 0.2373

    数据集中有 199523 个训练样本和 99762 个测试样本。我们进一步按 1:1 的比例将测试样本随机划分为验证集和测试集。注意:我们从输入特征中删除教育和婚姻状况,因为这些特征被视为标签。

  2. 配置:

    • 由于这两组任务都是二元分类问题,因此我们将 AUC 分数作为评估指标。在这两组中,我们都将婚姻状况任务作为辅助任务,而将第一组中的收入任务、第二组中的教育任务视为主要任务。我们关注主要任务的 AUC

    • 对于超参数调优,我们使用验证集上主要任务的 AUC 作为目标。

    • 对于每种方法,我们使用超参数调优器进行数千次实验,以找到最佳的超参数配置。

      在找到最佳超参数之后,我们使用随机参数初始化在训练集上对每种方法进行 400 次训练,并在测试集上报告结果(主要任务的平均 AUC)。

  3. 下表给出了两组任务的实验结果,可以看到:

    • 由于这两组中的任务相关性(大致由label 的皮尔逊相关系数来衡量)都不是很强,因此Shared-Bottom 模型在多任务模型中几乎总是最差的(Tensor-Factorization 除外)。

    • L2-ConstrainedCross-Stitch 都为每个任务提供了单独的模型参数,并增加了如何学习这些参数的约束,因此它们的性能要比Shared-Bottom 模型更好。

      但是,对模型参数学习的约束很大程度上依赖于任务关系的假设,这不如 MMoE 使用的参数调制机制parameter modulation mechanism 灵活。因此MMoE 在第二组任务中的所有方面都超越其他多任务模型。

    • Tensor-Factorization 方法在两组中效果都是最差的。这是因为它倾向于对所有任务的隐层权重进行低秩张量和低秩矩阵的泛化。该方法对于任务相关性可能非常敏感,因为当任务之间的相关性较低时,它倾向于过度泛化over-generalize ,并且需要更多的数据和更长的训练时间。

    • 多任务模型未针对验证集上的婚姻状况辅助任务进行调优,而单任务模型则针对辅助任务进行了调优。因此,单任务模型在辅助任务上获得最佳性能是合理的。

b. 大规模内容推荐数据集

  1. 我们在谷歌的大型内容推荐系统上进行实验,其中为数十亿用户推荐数十亿个item 。具体而言,给定用户当前消费item 的行为,推荐系统旨在向用户推荐接下来要消费的 item 列表。

    我们的推荐系统采用一些现有内容推荐框架,包括一个候选生成器candidate generator、以及一个深度排序模型。在我们的设置中,深度排序模型可以针对两种类型的排序目标进行优化:

    • 针对互动engagement 相关的目标进行优化,如点击率CTR、互动时长。
    • 针对满意度satisfaction 相关的目标进行优化,如喜欢率 like rate

    我们的训练数据包括数以千亿记的用户隐式反馈,如点击click 和喜欢like。如果单独训练,则每个任务的模型需要学习数十亿个参数。因此,和分别独立学习多个目标相比,Shared-Bottom 架构具有更小规模的优势。实际上,Shared-Bottom model 已经在生产环境中使用。

  2. 配置:

    • 我们通过为深度排序模型创建两个二元分类任务来评估多任务模型:预测用户互动相关的行为、预测用户满意度相关的行为。我们将这两个任务命名为engagement 子任务、satisfaction 子任务。
    • 推荐系统使用稀疏特征的 embedding ,并将所有稠密特征归一化为 [0.0,1.0] 之间。
    • 对于Shared-Bottom 模型,我们将 shared-bottom network 实现为一个前馈神经网络,它具有几个全连接层并使用 ReLU 激活函数。每个任务在shared-bottom network 之上构建全连接层作为 tower 网络。
    • 对于 MMoE ,我们只需要将 shared-bottom network 的顶层修改为 MMoE layer,并保持 MMoE layer的输出维度不变。因此,我们不会在模型训练和 serving 中增加额外的计算成本。
    • 我们还实现了其他baseline 方法,例如 L2-ConstrainedCross-Stitch 。由于它们的模型架构,与Shared-Bottom 模型相比,它们的参数数量大约翻了一倍。
    • 我们不和 Tensor-Factorization 进行比较,因为如果没有高效率的工程实现,Tucker 乘积的计算不能扩展到十亿级。
    • 所有模型均采用 batch size = 1024mini-batch 随机梯度下降法进行优化。
  3. 离线效果评估:对于离线评估,我们在固定的 300 亿条用户隐式反馈集合上训练模型,并在 100 万条数据的hold-out 数据集上进行评估。鉴于satisfaction 子任务的标签要比engagement 子任务的标签稀疏的多,离线结果噪音很大。因此我们只在下表中给出engagement 子任务的 AUC 得分和平方误差R-Squared 得分。

    我们分别展示了训练 200 万步(千亿级样本、batch size = 1024 )、400 万步、600 万步之后的结果。可以看到:

    • 在所有指标上,MMoE 均优于其它模型。

      这里 OMoE 效果并没有超越 Shared-Bottom,这不符合预期(OMoE 是集成模型)。

    • L2ConstrainedCross-StitchShared-Bottom 模型更差。这很可能是由于这两个模型是建立在两个独立的单任务模型上,并且有太多的模型参数使得难以很好地约束constrained

    注:这里用户隐式反馈数据 300 亿条,但是训练样本有千亿级,是因为还有些负采样的样本。

    为更好地理解门控gate 是如何工作的,我们在下图中显示了每个任务的 softmax gate 的分布。可以看到:

    • MMOE 学到了这两个任务之间的差异,并自动平衡balance了共享参数和非共享参数。
    • 由于satisfaction子任务的标签比engagement 子任务的标签更加稀疏,因此satisfaction子任务的gate 更多地聚焦于单个专家上。

  4. 在线效果评估:最后,我们在内容推荐系统上对我们的 MMoE 模型进行了在线实验。我们不进行 L2-ConstrainedCrossStitch 方法的在线实验,因为这两种模型通过引入更多的参数使得 serving 时间加倍。

    我们进行了两组实验:

    • 第一组实验是比较Shared-Bottom 模型和单任务Single-Task 模型。Shared-Bottom 模型在engagement子任务和satisfaction子任务上都进行了训练。单任务模型仅在engagement子任务上进行训练。

      注意:尽管没有在satisfaction子任务上进行训练,但是单任务模型在测试时用作排序模型,因此我们也可以计算它推荐结果的satisfaction指标。

    • 第二组实验是将我们的 MMoE 模型和第一个实验中的Shared-Bottom模型进行比较。

    这两组实验都是使用相同数量的在线流量完成的。下表给出了在线实验的结果,可以看到:

    • 首先,和单任务模型相比,通过使用Shared-Bottom模型,我们看到在线satisfaction指标大幅提升了 19.72% 、在线engagement 指标略有下降(-0.22% )。
    • 其次,和Shared-Bottom模型相比,通过使用 MMoE 模型,我们同时提升了这两个指标。

    注意:在该推荐系统中,engagement 指标的原始值比satisfaction指标的原始值大得多。并且在提高satisfaction指标的同时,希望没有engagement指标的下降、甚至是能够有engagement指标的提升。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文