返回介绍

数学基础

统计学习

深度学习

工具

Scala

二、DNN For YouTube [2016]

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

  1. YouTube 是全球最大的创建creating、分享sharing和发现discovering视频内容平台。YouTube 的推荐可以帮助超过十亿用户从不断增长的视频库video corpus 中发现个性化内容,是现有规模最大、最复杂的工业推荐系统之一。

    推荐 YouTube 视频在三个方面具有极大挑战:

    • 规模scale:实践证明,现有的很多推荐算法在小规模问题上都能很好地发挥作用,但是在 YouTube 规模的问题上无法应用。

      高度专业化的分布式学习算法highly specialized distributed learning algorithms 和高效的服务系统 efficient serving system 对于处理 YouTube 庞大的用户基数和视频库至关重要。

    • 新鲜性freshnessYouTube 视频库非常活跃 dynamic ,每秒钟都会上传大量的视频。推荐系统应该具有足够的响应能力responsive,从而建模新上传的内容、以及建模用户的最新行为action

      新内容和学习成熟的well-established 视频之间的平衡从某种角度可以视为探索和利用 exploration/exploitation

    • 噪音noise:由于稀疏性sparsity 和各种不可观察的外部因素,YouTube 上的用户历史行为固有地inherently 难以预测。

      我们几乎无法获取用户满意度的 ground truth,事实上我们是对带噪音的隐式反馈信号noisy implicit feedback signal进行建模。此外,内容关联的元数据 metadata 结构化较差,没有定义良好的本体ontology

      因此,我们的算法需要对训练数据的这些特点具有鲁棒性robust

    与谷歌的其它产品领域product areas相结合,YouTube 经历了根本性的范式paradigm 转变,转向使用深度学习作为几乎所有学习问题的通用解决方案。YouTube 的推荐系统建立在 Google Bran (其开源版本即著名的 TensorFlow )上。YouTube 推荐的深度学习模型大约包含 10 亿级参数,并且使用千亿级的训练样本。

    与被大量研究的矩阵分解方法相比,使用深度神经网络进行推荐系统的工作相对较少。

    • 神经网络在 《Personalized news recommendation using classi ed keywords to capture user preference》 中用于推荐新闻、在 《A neural probabilistic model for context based citation recommendation》 中用于推荐 ciatations 、在 《User modeling with neural network for review rating prediction》 中用于推荐评论的评分。
    • 协同过滤在 《Collaborative deep learning for recommender systems》 中被表述为深度神经网络,在 《Autoencoders meet collaborative fi ltering》 中被表述为自编码器。
    • 《A multi-view deep learning approach for cross domain user modeling in recommendation systems》 使用深度学习进行跨域的用户建模。
    • content-based 推荐中,《Deep content-based music recommendation》 使用深度神经网络进行音乐推荐。

    在论文 《Deep Neural Networks for YouTube Recommendations》 中,作者从从较高的视角high level 描述了该系统,并聚焦于深度学习带来的显著性能提升。论文根据经典的两阶段信息检索二分法retrieval dichotomy 分为两部分:首先论文详细介绍了一个深度候选生成Candidate Generation模型(即召回模型),然后论文详细介绍了一个独立的深度排序Ranking 模型。

    论文还提供了有关设计、迭代、维护一个庞大推荐系统的实践经验教训和洞察。

2.1 Overview

  1. 我们的推荐系统由两个神经网络组成:一个用于候选生成candidate generation 、一个用于排序 ranking 。总体架构如下图所示。

    • 候选生成网络:从用户的 YouTube 历史行为记录中获取事件 event 作为输入,并从大型视频库中检索一小部分(数百个)视频。这些候选视频倾向于和用户高度相关。

      候选生成网络仅通过协同过滤提供广泛broad 的个性化。用户之间的相似性是通过粗粒度coarse-level的特征来表示的,如观看视频video watchID、搜索querytoken、人口统计学特征demographic

    • 排序网络:根据一个细粒度fine-levelrepresentation 来区分召回的候选视频之间的相对重要性,从而提供一些 “最佳” 推荐最终构成推荐列表。

      排序网络通过使用描述视频和用户的一组丰富的特征,并根据期望的目标函数desired objective function ,从而为每个视频分配一个 score 来完成该任务。候选视频根据它们的 score 进行排序,得分最高的候选视频被呈现给用户。

    这种两阶段方法允许我们从非常大的视频库(数百万)中进行推荐,同时仍然可以确保呈现给用户的少量视频对于用户来说是个性化的personalized 和吸引人的 engaging

    此外,这种设计能够融合其它来源生成的候选(other candidate sources,即其它召回通路)。

  2. 在开发过程中,我们广泛使用离线指标(精度precision、召回率recallranking loss 等)来指导系统的迭代改进。然后,为了最终确定算法或模型的有效性,我们依靠在线实验live experiment 进行 A/B test

    在在线实验中,我们可以衡量 click-through rate: CTR、观看时长watch time 、以及其它衡量用户互动user engagement 指标的细微变化。这一点很重要,因为在线 A/B test 结果并不总是和离线实验正相关。

2.2 Candidate Generation

  1. 在候选生成candidate generation 过程中,我们从庞大的 YouTube 视频库中筛选可能与用户有关的数百个视频。

    这里描述的推荐器 recommender 的前身 predecessor 是在 rank loss 下训练的矩阵分解matrix factorization 方法。我们神经网络模型的早期迭代通过浅层网络模仿了这种分解行为,该浅层网络仅嵌入了用户历史观看的视频。从这个角度来看,我们的方法可以视为矩阵分解技术的非线性推广。

  2. 作为分类任务的推荐Recommendation as Classification:我们提出将推荐视作极端的多分类任务,其中预测问题变为:基于用户 $ U $ 和上下文 $ C $ 在时刻 $ t $ 从视频库 $ \mathbb V $ 的数百万个视频(类别)中准确地分类特定的视频观看 video watch $ w_t $ 为类别 $ i $ (即视频库 $ \mathbb V $ 中的第 $ i $ 个视频)的概率。 即:

    $ P(w_t=i\mid U,C) = \frac{ \exp\left(\mathbf{\vec v}_i\cdot \mathbf{\vec u}\right)}{\sum_{j\in \mathbb V} \exp\left(\mathbf{\vec v}_j\cdot \mathbf{\vec u}\right)} $

    其中: $ \mathbf{\vec u}\in \mathbb R^d $ 为 (user,context) pair 对的 embedding 向量; $ \mathbf{\vec v}_j\in \mathbb R^d $ 为每个候选视频的 embedding 向量; $ d $ 为 embedding 维度。

    在这种 setting 下,embedding 只是将稀疏实体(单个视频、用户等)映射到 $ \mathbb R^d $ 中的稠密向量。深度神经网络的任务是学习用户 embedding $ \mathbf{\vec u} $ 作为用户历史行为和上下文的函数,这对于使用 softmax 分类器在视频之间进行区分discriminating 是很有用的。

    尽管 YouTube 存在明确的反馈机制(加赞thumbs up、减赞thumbs down、产品内调查等),但是我们使用视频观看video watch 的隐式反馈implicit feedback来训练模型,其中用户完成视频观看就是一个正样本。这种选择是基于大规模可用的隐式用户行为历史记录,从而允许我们可以在显式反馈explicit feedback 极其稀疏的长尾提供推荐。

    为了有效地训练具有数百万个类别的模型,我们依靠负采样技术从背景分布background distribution 中采样负样本(候选采样 candidate sampling),然后通过重要性加权对这些负样本进行校正。对于每个正样本,我们最小化 true label 和采样的负类之间的交叉熵。

    • 在实践中,我们对每个正样本随机采样几千个负样本,这相当于传统 softmax100 多倍的加速。
    • 一种流行的替代方法是分层 softmaxhierarchical softmax),但是它无法达到相当的准确性。在分层 softmax 中涉及把原本可能不相关的样本归结到同一个中间节点,这使得分类问题更加困难并降低了性能。

    serving 阶段,我们需要计算最有可能的 N 个类别(视频),以便选择要呈现给用户的 top-N 个类别。在数十毫秒的严格 serving 延迟时间下对数百万个item 进行打分,需要一种近似的、与类别数量亚线性的评分方案。YouTube 以前的系统依赖于哈希,而这里的分类器使用类似的方法。由于在 serving 时不需要来自 softmax 输出层的、经过校准的likelihood ,因此评分问题简化为内积空间中的最近邻检索nearest neighbor search 问题,而这可以通过通用的 library 来解决。我们发现 A/B test 结果对于最近邻检索算法的选择不是特别敏感。

  3. 模型架构:受连续的 bag-of-word 语言模型的启发,我们在固定的词典vocabulary中学习每个视频的 embedding,并将这些 embedding 馈入前馈神经网络。

    用户的观看历史由可变长度的视频ID 序列来表示,该序列通过 embedding 映射为稠密的向量 representation 。由于前馈神经网络需要固定尺寸的稠密输入,因此我们对 embedding 序列进行均值池化从而聚合为固定尺寸的向量。在所有聚合策略中(sum 池化、最大池化、均值池化),均值池化效果最好。

    重要的是,embedding 与所有其它模型参数是通过常规的梯度下降来联合学习的。

    下图给出了candidate generation 网络的架构:特征被拼接称宽wide 的第一层,接着是几层带 ReLU 激活函数的全连接层FC layer。其中:

    • 嵌入的稀疏特征和稠密特征进行拼接。 特征拼接之前先对 embedding 序列进行均值池化,从而将可变大小的稀疏ID 序列转换为适合输入到隐层 hidden layer 的固定尺寸的向量。
    • 所有隐层都使用全连接。
    • 训练过程中,通过对 softmax 输出进行负采样来进行梯度下降,从而最小化交叉熵损失。
    • serving 过程中,执行近似的最近邻检索从而生成数百个候选视频。

  4. 特征体系:深度神经网络作为矩阵分解的推广的一个关键优势是,可以轻松地将任意连续特征和离散特征添加到模型中。

    • 搜索历史记录search history 和观看历史记录watch history 的处理方式相似:每个 querytokenizeunigrambigram,并且每个 token 都被嵌入。然后我们将所有的 tokenembedding 均值池化。池化后的稠密向量就代表了用户的搜索历史记录。

    • 人口统计特征demographic feature 对于提供先验知识prior 很重要,这样对新用户的推荐就能合理地进行。

    • 用户的地理区域 geographic region 和设备分别被嵌入,然后进行拼接。

    • 简单的二元特征和连续特征(如用户性别、登录状态、用户年龄)将被直接输入到网络,其中实数值将被标准化为 [0.0, 1.0] 之间。

    • example age 特征:每秒都有大量的视频上传到 YouTube。因此对于 YouTube 产品而言,推荐最新上传(fresh) 的内容非常重要。

      我们始终观察到:在不牺牲相关性的前提下,用户更喜欢新鲜的内容fresh content。除了简单地推荐用户想看的新视频这个一阶效应first-order effect之外,还有一个关键的次级现象:自举和传播病毒内容bootstrapping and propagating viral content

      机器学习系统经常表现出对过去past 的隐性bias,因为它们被训练为通过历史样本来预测未来的行为。视频热度 popularity 的分布非常不稳定,但是我们推荐器 recommender 产生的视频库上的多项式分布将反映几周训练窗口中的平均观看可能性 likelihood

      即:我们模型学到的是过去一段时间平均的热度,而不是当前时刻的热度。而平均热度和当前热度差异很大。

      为解决这个问题,我们在训练过程中以训练样本的age 作为特征,它是训练时刻减去创建日志的时刻。在 serving 阶段,这个特征被设为零(或者略微为负),从而表示采用最近的热度。

      一种朴素的方法是,将训练样本根据发生时刻进行加权:距离训练时刻越近则权重越大、距离训练时刻越久则权重越小。这种方式使得近期发生的模式更重要。这种方式的缺点是:难以确定合适的时间衰减加权方式。而 YouTube DNN 中的方法是:将样本 age 作为特征,由模型自动根据该特征来学习模式随时间变化的规律。

      下图给出了这种方法在任意挑选的一个视频上的效果。可以看到:

      • 添加了样本 age 特征之后,模型能够准确地表示数据中观察到的上传时间和依赖于时间的热度。
      • 如果没有该特征,则模型将预估为:近似于训练窗口内的平均观看可能性 likelihood

  5. 需要强调的是,推荐通常涉及解决一个代理问题surrogate problem,然后将结果迁移到特定的上下文context 。一个经典的例子是,我们假设准确地预估收视率会带来有效的电影推荐。我们已经发现,这个代理学习问题的选择对 A/B test 的性能有着极其重要的影响,但是很难用离线实现来衡量。

    例如,离线优化的是点击率,但是在线需要优化的是 GMV ,二者之间存在一定的 gap

  6. 训练样本是从所有 YouTube 观看记录(甚至是从其它网站内嵌的观看记录)生成的,而不仅仅是我们产生的推荐结果的观看记录。否则,新内容将很难出现,推荐器将过度倾向于利用exploitation 。如果用户通过我们推荐以外的方式发现视频,我们希望能够通过协同过滤将这一发现快速传播给其他人。

    提升实时metric 的另一个关键洞察是:为每个用户生成固定数量的训练样本,这等效于在损失函数中认为所有用户同等重要。这防止了一小批高度活跃的用户来统治了损失函数。

    这里值得商榷:a. 是否活跃的用户更重要?这个问题不同的场景有不同的答案。 b. 每个用户生成固定数量的训练样本,必然会丢弃活跃用户的大量样本,这降低了训练数据量,降低模型效果。

  7. 虽然有点违背直觉,但是针对分类器的保留信息 withhold information (如 hold out 验证集或测试集)必须非常小心,从而防止模型利用网站的结构structure 从而对代理问题过拟合。

    考虑这样的一个例子,用户刚刚提交了对 taylor swift 的搜索 query 。由于我们的问题是预测下一个观看的视频,给定该搜索信息的分类器将预测最可能观看的视频是那些出现在 taylor swift 搜索结果页面上的视频。毫不意外的是,将用户上一次搜索页重新作为主页推荐列表,效果很差。

    通过丢弃序列信息,并用无序的bag of token 来表示搜索query,分类器将不再直接感知label 的来源。

  8. 视频的自然消费模式通常会导致非常不对称的 co-watch 概率。例如:

    • 情景剧系列episodic series 通常是按顺序观看的。用户先看第一集、再看第二集的概率,远大于先看第二集、再看第一集。
    • 用户通常会发现最流行流派genre的艺术家,然后再关注较小的领域,而不是相反。

    因此,我们发现预测用户的下一个观看next watch要比预测一个随机 hold-out (即,留一法)观看hold-out watch表现好得多。而很多协同过滤系统通过 hold out 一个随机 item,然后从用户剩余的历史行为的其它item 来预测这个item,从而隐式地选择 label 和上下文,如下图 (a) 所示。这会泄露未来的信息,并且会忽略任何非对称的消费模式asymmetric consumption pattern

    相比值下,我们通过随机选择一个观看watch,并且仅选择用户在这个hold out label 之前的用户行为作为输入,从而 rollback 用户的历史行为记录。如下图(b) 所示。

    如下图所示,选择模型的labelinput context 对于离线评估具有挑战性,并且对于在线性能有很大影响。这里,实心事件event $ \bullet $ 是网络的输入特征,而空心事件 $ \circ $ 不是网络的输入特征。我们发现:预测未来的观看(b) 在 A/B test 中表现更好。 b 中的 example age 表示为 $ t_{\max} - t_N $ ,其中 $ t_\max $ 为训练数据中观察到的最大时刻。

  9. 实验结果:添加更多特征、加深模型深度显著提升了 hold out 预估的精度precision ,如下图所示。

    所谓 hold out 预估指的是:labelhold out 数据,特征为 label 之前的历史数据(如上图的 b 图所示)。

    • 实验中,包含 100 万视频和 100 万搜索token 的词典vocabulary 被嵌入为 256 维的 embedding 向量。每个用户样本最多 50 个最近的观看,以及最多 50 个最近的搜索。

    • softmax 层输出在相同的 100 万个视频类别上的多项式分布,output 向量的维度为 256 维(这可以被认为是一个独立的 output video embedding )。

    • 这些模型在所有 YouTube 用户上训练若干个 epoch,直到收敛。

    • 网络结构遵循常见的 tower 模式,其中网络的底部最宽、然后每个连续的隐层将神经元数量减半。我们进行了四组实验,深度不断增加,直到增加的收益减少并且收敛变得困难。

      • depth 0:一个线性层,它仅仅转换这个concatenation layer 来匹配 softmax 的维度 256 维。

        零深度的网络实际上是一种线性分解方案,它和先前predecessor 的系统非常相似。

      • depth 1256 ReLU

      • depth 2512 ReLU --> 256 ReLU

      • depth 31024 ReLU --> 512 ReLU --> 256 ReLU

      • depth 42048 ReLU --> 1024 ReLU --> 512 ReLU --> 256 ReLU

    可以看到:特征越多,holdout 预估的 Mean Average Precision: MAP 越高;层的深度越深,MAP 越高。因为更深的模型提升了表达能力,使得模型能够有效建模特征之间的交互。

    $ \text{AP@k} = \frac{\sum_{i=1}^k \text{precision-k}}{k} $

    precision-ktop-k 列表的推荐精准度,MAP@k 为所有用户 AP@k 的平均。由于这里是留一法评估,因此 k=1

2.3 Ranking

  1. Ranking 的主要作用是使用曝光数据impression data 来专门化specialize 和校准calibrate 特定用户界面 particular user interface 的候选预测。例如,用户通常可能以高概率观看给定的视频,但是由于缩略图thumbnail image 的选择 ,因此不太可能点击给定的首页曝光homepage impression

    ranking 期间,我们可以访问更多的特征来描述视频、以及用户和视频之间的关系。因为只有数百个视频被评分,而不是对数百万个视频进行评分(在 candidate generation 中才需要对数百万个视频进行评分)。

    此外,ranking 对于集成ensembling来自不同候选源(每个候选源代表了一路召回通路)也至关重要,这些候选源之间的score 不能直接比较(跨召回通路之间的召回score 不是直接可比较的,但是召回通路内部的 score 是可以直接比较的)。

  2. 我们使用和candidate generation 模型类似的深层神经网络,使用逻辑回归为每个视频曝光分配一个独立的score ,如下图所示。然后视频列表根据这个分数排序并返回 top-n 视频给到用户。

    我们最终的ranking 目标是根据在线 A/B test 结果不断调整的, 但是通常是每个曝光的期望观看时长的简单函数。按点击率排名通常会鼓励用户观看一些未完成的欺骗性deceptive 视频(点击诱饵clickbait),而观看时长可以更好地捕获用户的互动engagement

    下图为 Ranking 的深度网络体系架构,它描述了具有共享 embedding 的离散特征(单值univalent 和多值multivalent),以及幂次power 的归一化连续特征。所有的 layer 都是全连接的。实际上,数以百计的特征被馈入到网络中。

  3. 我们的特征与传统的离散特征、连续/常规特征这种分类体系不同。我们使用的离散特征的基数 cardinality 差异很大:有些离散特征是二元的(如用户是否已登录),而另一些离散特征则具有数百万个可能的值(如用户上一次的搜索query)。

    • 我们将特征根据是仅贡献单个值(单值univalent 特征)、还是贡献一组值(多值multivalent 特征)来进一步细分。

      单值离散特征的典型例子是被评分的曝光impressionvideo ID 。而相应的一个多值特征是用户最近观看的 N 个视频的 video ID 列表。

    • 我们还根据特征是描述item (曝光impression)的属性,还是描述用户/上下文(query)的属性,来对特征进行分类。

      query 特征针对每次请求request 执行计算(即请求粒度),而曝光impression 特征对每个被评分的 item 进行计算(即 item 粒度)。

  4. 特征工程:我们通常在 ranking 模型中使用数百个特征,其中离散特征和连续特征大体上各占一半。

    尽管深度学习有望缓解手工特征工程的负担,但是原始数据的特性nature不容易直接输入到前馈神经网络。我们仍然花费大量的工程资源将用户和视频数据转换为有用的特征。主要挑战在于如何表达用户行为的时间序列a temporal sequence of user action ,以及这些行为如何与被评分的视频曝光 video impression 相关联。

    • 我们观察到,最重要的信号是那些描述用户之前与 item 本身、以及其它类似 item 之间的交互interaction 。这借鉴了其它工作在广告ranking 上的经验。

      例如,考虑用户和需要评分的视频的频道channel 的历史记录:用户在这个频道观看了多少视频?用户最近一次看这个频道的视频是什么时候?

      这些描述用户过去在相关item 上的行为的连续特征是特别强大的,因为它们可以很好地在不同的 item 之间进行泛化。

    • 我们还发现:以特征的形式将candidate generation中的信息传播到 ranking 过程中,这至关重要。

      例如,这个候选视频从哪个通路召回?这个候选视频的召回分是多少?

    • 描述过去视频曝光impression 频率的特征对于在推荐中引入 “变动”churn 也是至关重要的(连续的请求不会返回相同的推荐列表)。

      如果一个用户最近被推荐了一个视频,但是没有看,那么模型自然会在下一次页面加载page load 时剔除这个曝光impression

      即剔除已经曝光过的 item (新鲜度过滤)。

      serving 最新的曝光 impression 和观看历史是一个工程问题,这超出了本文的范围,但是对于产生响应性responsive 推荐至关重要。

  5. 离散特征 embedding:和 candidate generation 模型类似,我们使用 emebdding 将稀疏离散特征映射到适用于神经网络的稠密representation

    • 每个uniqueID 空间(vocabulary)都有一个独立的、待学习的 embedding,其维度大约是和 unique 值数量的对数成正比。这些词典是简单的 look-up table,通过在训练之前将数据传输一次来建立。

    • 非常大cardinalityID 空间(如视频ID、搜索queryterm )根据点击频次对 top N 进行截断。out-of-vocabulary 取值简单地映射到全零的 embedding

      截断的原因是低频ID 出现次数太少,导致 embedding 学不好。实际上有更好的做法:进行 hash 映射。一方面hash 映射不会对结果产生太大影响,另一方面它能自适应低频ID 出现增量更新的情况。

    • candidate generation 一样,在多值离散特征 embedding 馈入网络之前,先对它们均值池化。

    • 重要的是,相同ID 空间中的离散特征共享底层的 embedding

      例如,我们有一个全局的视频IDembedding ,所有用到视频ID 的特征都将使用它(如曝光impression 的视频ID、用户最近观看视频的视频ID 等等)。

      尽管是共享的 embedding,但是每个特征都被独立地馈入到网络中,因此后续的layer 可以学到每个特征的专门的representation

      embedding 共享对于提高泛化能力、加快训练速度、降低内存需求非常重要。

    绝大多数模型参数都位于这些高基数 high-cardinalityembedding 空间中。例如,一百万个ID 映射到 32 维空间中,这比 2048 个神经元的全连接层的参数多 7 倍。

  6. 归一化连续特征:众所周知,神经网络对于输入的缩放scaling 和分布distribution 非常敏感,而诸如决策树集成ensemble 模型之类的替代方法则对于特征的scaling 是不变的。

    我们发现连续特征的适当归一化对于模型收敛至关重要。假设连续特征 $ x $ 的分布为 $ f $ ,我们使用累积分布 cumulative distribution $ \tilde x = \int_{-\infty}^x df $ ,通过缩放取值从而将该特征转换为 $ \tilde x $ ,其中 $ \tilde x $ 在 [0~1] 之间均匀分布。在训练开始之前,通过对数据进行单次遍历来对特征取值的分位数进行线性插值,可以近似得到该积分。

    这种归一化实际上是 ranking 归一化:即某个特征 X 的取值 $ x^* $ 在所有样本中 X 的所有取值的排名。实际上还有更简单的做法:在 input 层之后紧跟着一个 BatchNormalization 层。

    除了原始归一化特征 $ \tilde x $ 之外,我们还输入了幂次特征 $ \tilde x^2,\sqrt{\tilde x} $ ,使得网络能够轻松地构成特征的超线性函数、亚线性函数,从而赋予网络更强的表达能力。实验发现,向模型馈入幂次特征可以提高离线准确率。

  7. 建模期望观看时长Expected Watch Time:我们的优化目标是在给定的训练样本(要么是点击样本、要么是未被点击)的情况下,预估期望观看时长expected watch time 。其中,正样本带有用户观看视频所花费的时长。

    为了预估期望观看时长,我们使用了专门为该目标而开发的加权逻辑回归 weighted logistic regression 。该模型以交叉熵损失为目标函数来训练逻辑回归,但是正样本(点击样本)会根据视频上的观看时长来加权,而所有的负样本(未点击样本)都采用单位权重。

    假设样本 $ i $ 的点击率为 $ p $ ,则逻辑回归学到的几率为:

    $ \text{odds}(i) = \frac{p_i}{1-p_i} $

    由于这里对正样本进行加权,则加权逻辑回归学到的几率为:

    $ \text{odds}(i) = \frac{p_i\times T_i}{1-p _i\times T_i} $

    其中 $ T_i $ 为正样本的观看时长。考虑到 $ p_i $ 通常是一个很小的值,使得 $ p_iT_i\ll 1 $ ,因此有:

    $ \text{odds}(i) \simeq T_ip_i = \mathbb E[T_i] $

    注:样本加权的方式有两种:

    • 采样加权:对一条样本重复 $ w $ 次,其中 $ w $ 为加权的权重。
    • 梯度加权:对样本的梯度乘以 $ w $ 。

    从效率上看,第二种方式的计算量更小、计算效率更高。

    从效果上看,如果没有随机混洗则二者效果相同(都是基于当前梯度之上的 $ w $ 个梯度的累加),否则二者效果不同(第一种方式中,每个样本的当前梯度都不同)。

    在推断期间,我们有:

    $ p = \frac{1}{1+\exp\left(-\mathbf{\vec \theta}^\top\mathbf{\vec x}\right)}\\ \log (\text{odds}) = \log \left(\frac{p}{1-p}\right) = \mathbf{\vec \theta}^\top\mathbf{\vec x}\\ \text{odds} = \exp\left(\mathbf{\vec \theta}^\top\mathbf{\vec x}\right) $

    因此推断期我们使用指数函数 $ \exp(x) $ 作为最终的激活函数,从而产生接近于预估的期望观看时长的几率。然后我们根据预估期望观看时长来进行排序。

    注:由于 $ \exp(\cdot) $ 为单调递增函数,因此根据 $ \exp\left(\mathbf{\vec \theta}^\top\mathbf{\vec x}\right) $ 排序等价于根据 $ \mathbf{\vec \theta}^\top\mathbf{\vec x} $ 排序。

    表面上看,推断时没有进行样本加权,但是观看时长更长的视频预估的 $ p $ 更大。

  8. 实验结果:下表展示了我们在具有不同隐层配置下的、next-day holdout 数据上的实验结果。每个配置的取值(weighted, per-user loss)通过考虑为单个用户在单个页面上同时考虑正样本(点击的)、负样本(未点击的)的曝光 impression 来获取的。

    首先通过我们的模型来为这两种曝光impression 打分。如果负样本得分高于正样本,则我们认为正样本的观看时长是错误预测的观看时长。weighted per-user loss 是在 heldout 数据上,所有错误预测的观看时长占总观看时长上的比例。

    可以看到:

    • 增加隐层的宽度和深度都可以改善结果,但是代价就是推断期间所需的服务器CPU 时间。

    • 1024ReLU-512ReLU-256ReLU 的配置获得了最佳的效果,同时使得我们能够保持在 servingCPU 预算之内。

      • 对于1024ReLU-512ReLU-256ReLU 模型,我们尝试仅提供归一化的连续特征,而没有幂次特征,这会使得 loss 增加 0.2%
      • 对于1024ReLU-512ReLU-256ReLU 模型,我们也尝试将正样本和负样本都是相等权重(相当于无加权)。毫无意外地,这使得观看时长的 weighted loss 显著增加了 4.1%

2.4 总结

  1. 我们描述了推荐 YouTube 视频的深度神经网络架构,分为两个不同的问题:candidate generationranking

    • candidate generation:我们的深度协同过滤deep collaborative filtering 模型能够有效地吸收很多信号,并用深度网络对它们的交互进行建模,这优于以前在 YouTube 上使用的矩阵分解方法。

      • 在选择推荐的代理问题 surrogate problem方面,艺术多于科学。我们发现通过捕获不对称的 co-watch 行为和防止未来信息泄露,对未来观看 future watch 进行分类可以在在线指标上表现良好。
      • 分类器中的 withholding discrimative signal (即 label)对于获得好的结果也至关重要--否则模型会过拟合代理问题,并且不能很好地迁移到主页上。
      • 我们证明了使用训练样本的 age 作为输入特征消除了对过去past的固有偏见,并允许模型表示流行视频的时间依赖行为。这提高了离线 holdout precision 结果,并在 A/B test 中显著增加了最近上传的视频的观看时长。
    • rankingranking 是一个更经典的机器学习问题,但是我们的深度学习方法优于以前的、用于观看时长预测的线性模型和基于树的模型。

      • 推荐系统尤其受益于历史用户行为(用户在 item 上的行为)的专门特征。深度神经网络需要离散和连续特征的特殊表示,其中我们分别用 embedding 和分位数归一化来转换它们。深度的 layer 被证明能够有效地建模数百个特征之间的非线性相互作用。
      • 逻辑回归被修改为通过正样本的观看时长来加权,而负样本的加权系数固定为单位权重。这允许我们学习与期望观看时长接近的几率odds 模型 。和直接预估点击率CTR 相比,这种方法在观看时长加权的 ranking 评估指标上表现更好。

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

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

发布评论

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