数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
四十一、NIS [2020]
大多数现代神经网络模型可以被认为是由两个组件组成的:
- 一个是将原始(可能是
categorical
的)输入数据转换为浮点值的输入组件。 - 另一个是将输入组件的输出结合起来并计算出模型的最终输出的
representation learning
组件。
自
《Neural Architecture Search with Reinforcement Learning》
发表以来,以自动化的、数据驱动的方式设计神经网络架构(AutoML
)最近吸引了很多研究兴趣。然而,该领域以前的研究主要集中在representation learning
组件的自动化设计上,而对输入组件的关注很少。这是因为大多数研究都是在图像理解问题上进行的,其中representation learning
组件对模型性能非常重要,而输入组件是微不足道的,因为图像像素已经是浮点形式。对于工业界经常遇到的大规模推荐问题,情况则完全不同。虽然
representation learning
组件很重要,但输入组件在模型中起着更关键的作用。这是因为许多推荐问题涉及到具有大cardinality
的categorical
特征,而输入组件为这些离散特征的每一项分配embedding
向量。这就导致了输入组件中有大量的embedding
参数,这些参数在模型大小和模型归纳偏置inductive bias
上都占主导地位。例如,
YouTube
视频推荐模型使用了一个规模为1M
的video ID vocabulary
,每个video ID
有256
维的embedding
向量。这意味着仅video ID
特征就使用了256M
个参数,而且随着更多离散特征的加入,这个数字还会迅速增长。 相比之下,representation learning
组件只包括三个全连接层。因此,模型参数的数量主要集中在输入组件,这自然对模型性能有很高的影响。在实践中,尽管categorical
特征的vocabulary size
和embedding size
很重要,但它们往往是通过尝试一些具有不同手工制作的配置的模型从而以启发式的方式选择的。由于这些模型通常体积大,训练成本高,这种方法计算量大,可能会导致次优的结果。在论文
《Neural Input Search for Large Scale Recommendation Models》
中,作者提出了Neural Input Search: NIS
,这是一种新颖的方法,为模型输入组件的每个离散特征自动寻找embedding size
和vocabulary size
。NIS
创建了一个由Embedding Blocks
集合组成的搜索空间,其中blocks
的每个组合代表不同的vocabulary and embedding
配置。最佳配置是通过像ENAS
这样的强化学习算法在单个training run
中搜索而来。此外,作者提出一种新的
embedding
类型,称之为Multi-size Embedding : ME
。ME
允许将较大尺寸(即,维度)的embedding
向量分配给更常见的、或更predictive
的feature item
,而将较小尺寸的embedding
向量分配给不常见的、或没有predictive
的feature item
。这与通常采用的方法相反,即在词表的所有item
中使用同样维度的embedding
,这称之为Single-size Embedding: SE
。作者认为,SE
是对模型容量和训练数据的低效利用。这是因为:- 对于频繁出现的、或高
predictive
的item
,我们需要一个大的embedding
维度来编码它们与其他item
的细微关系nuanced relation
。 - 但对于长尾
item
,由于它们在训练集中的稀有性rarity
,训练相同维度的good embedding
可能需要太多的epoch
。并且当训练数据有限时,对于rare item
采用大维度的embedding
可能会过拟合。
有了
ME
,在相同的模型容量下,我们可以覆盖词表中更多的item
,同时减少所需的训练数据规模和计算成本从而为长尾item
训练良好的embedding
。下图概览了基于
Embedding Blocks
的搜索空间、以及强化学习控制器如何对候选SE
和ME
进行采样。图
(a)
:Single-size Embedding
,其中仅保留top 2M
个item
,embedding
维度192
。图
(b)
:Multi-size Embedding
,其中top 2M
个item
的embedding
维度为192
、剩余7M
个item
的embedding
维度为64
。注意:这要求词表中的
id
是根据频次来降序排列。这对于频次分布的波动较大的field
而言,需要经常重新编码id
和重新训练。embedding table
包含两个超参数:emebdding size
、以及词表大小(即,保留高频的多少个item
)。这篇论文保留了所有的item
,并针对性地优化embedding size
。作者通过在两个广泛研究的推荐问题的公共数据集上的实验,证明了
NIS
在为SE
和ME
寻找良好的vocabulary size
和embedding size
配置方面的有效性。给定baseline
推荐模型,NIS
能够显著提高它们的性能,同时在所有实验中显著减少embedding
参数的数量(从而减少模型的规模)。此外,作者将NIS
应用于Google App store
中的一个真实世界的大规模App ranking
模型,并进行了离线实验和在线A/B test
,结果是+1.02%
的App Install
,而模型大小减少了30%
。这个新的NIS App ranking
模型已经部署在生产中。- 一个是将原始(可能是
相关工作:几乎所有以前的
NAS
研究工作都集中在为图像/视频理解问题寻找最佳的representation learning
组件。对于大规模的推荐问题,通过利用先进的representation learning
组件(如CNN, RNN
等)也取得了很大的成果。然而,尽管输入组件由于embedding
从而包含了很大一部分模型参数,但它在整个工业界中经常被启发式地设计,如YouTube, Google Play, Netflix
等。据我们所知,我们的工作首次将自动化的神经网络设计引入输入组件从而用于大规模推荐问题。
41.1 模型
- 假设模型的输入由一组
categorical
特征 $ \mathcal F $ 组成。对于每个特征 $ F\in \mathcal F $ ,我们有一个其可能取值的列表,这个列表中的元素按照在数据集中出现的频率递减的顺序排序。这个列表将每个特征取值隐式地映射为一个整数,我们把这个列表称为词表vocabulary
。 - 一个
embedding
变量 $ \mathbf E\in \mathbb R^{v\times d} $ 是一个可训练的矩阵,其中 $ v $ 为vocabulary size
, $ d $ 为embedding
维度。对于任何 $ 0\le i\lt v $ 的情况, $ \mathbf{\vec e}_i \in \mathbb R^d $ 表示 $ \mathbf E $ 的第 $ i $ 行,即词表内第 $ i $ 个item
的embedding
向量。 - 令
$ \mathcal B $ 为我们的"memory budget"
,它指的是模型的embedding
矩阵使用的浮点数的总数。对于一个 $ \mathbb R^{v\times d} $ 的embedding
矩阵,它的浮点数总数为 $ v\times d $ 。
41.1.1 Neural Input Search Problems
Single-size Embedding: SE
:single-size embedding
是一个形状为 $ v\times d $ 的规则的embedding
矩阵,其中词表中的每一个item
(共计 $ v $ 个item
)都表示为一个 $ d $ 维的embedding
向量。以前的工作大多使用SE
来表示离散的特征,每个特征的 $ v $ 和 $ d $ 的值是以启发式方式选择的,这可能是次优的。下面我们提出一个
Neural Input Search
问题从而自动寻找每个特征的最佳SE
,即NIS-SE
。解决这个问题的方法将在后面介绍。Problem NIS-SE
:为每个 $ F\in \mathcal F $ 找到vocabulary size
$ v_F $ 和embedding dimension
$ d_F $ 从而最大化结果模型的目标函数值,使得:该问题涉及两个
trade-off
:特征之间的
memory budget
:更有用的特征应该得到更多的预算。每个特征内部的
vocabulary size
和embedding dimension
之间的memory budget
。- 大的
vocabulary size
给了我们更高的覆盖率,让我们包括尾部item
作为输入信号。 - 大的
embedding dimension
可以提高我们对头部item
的预测,因为头部item
有更多的训练数据。此外,大的embedding dimension
可以编码更细微的信息。
- 大的
在
memory budget
内,SE
使得我们很难同时获得高覆盖率和高质量embedding
。为了克服这一困难,我们引入了一种新的embedding
类型,即Multi-size Embedding
。Multi-size Embedding: ME
:Multi-size Embedding
允许词表中的不同item
有不同维度的embedding
。它让我们对头部item
使用大维度的embedding
、对尾部item
使用小维度的embedding
。对尾部item
使用较少的参数是有意义的,因为它们的训练数据较少。现在,一个
embedding
变量(对应于一个特征)的vocabulary size
和embedding size
是由Multisize Embedding Spec: MES
给出的。MES
是pair
的列表: $ [(v_1,d_1),(v_2,d_2),\cdots,(v_M,d_M)] $ ,其中: $ v_m $ 是第 $ m $ 个pair
的vocabulary size
,满足 $ 1\le v_m\le v $ ,其中 $ v=\sum_{m=1}^M v_m $ 为这个categorical feature
的总的vocabulary size
。这相当于将单个词表划分为
$ M $ 块。 $ d_m $ 是第 $ m $ 个pair
的embedding size
,满足 $ d_1\gt d_2\gt\cdots\gt d_M \ge 1 $ 。
这可以解释为:最开始的
$ v_1 $ 个最高频的item
有embedding
维度 $ d_1 $ ,接下来的 $ v_2 $ 个频繁的item
有embedding
维度 $ d_2 $ ,等等。当 $ M=1 $ 时,ME
就等价于SE
。我们对于每个
$ 1\le m \le M $ ,创建了一个形状为 $ v_m\times d_m $ 的embedding
矩阵 $ \mathbf E^m $ ,而不是像SE
中那样只有一个embedding
矩阵 $ \mathbf E $ 。此外,还为每个 $ 1\le m\le M $ 创建了一个可训练的投影矩阵 $ \mathbf P^m $ ,它将一个 $ d_m $ 维的embedding
投影到 $ d_1 $ 维的空间。这有利于下游的reduction
操作在同一个 $ d_1 $ 维空间进行。定义 $ V_0 = 0 $ ,以及 $ V_m = \sum_{i=1}^m v_i $ 为前 $ m $ 个embedding
矩阵的累计vocabulary size
,则词表中第 $ k $ 个item
的ME
定义为:其中:
$ m_k\in \{1,\cdots,M\} $ ,并且 $ k\in [V_{m_k-1},V_{m_k}] $ ; $ \mathbf {\vec e}^{m_k}_{k-V_{m_k-1} } $ 为矩阵 $ \mathbf E^m $ 的第 $ k-V_{m_k-1} $ 行。 $ k-V_{m_k}-1 $ 是第 $ k $ 个item
在第 $ m_k $ 个block
内的相对编号。通过对每个特征的适当的
MES
,ME
能够同时实现对尾部item
的高覆盖率、以及头部item
的高质量representation
。然而,为所有特征手动寻找最佳MSE
是非常困难的,因此需要一个自动方法来搜索合适的MES
。下面我们介绍Multi-size Embedding
的Neural Input Search
问题,即NIS-ME
。解决这个问题的方法将在后面介绍。NIS-ME
:为每个 $ F\in \mathcal F $ 找到一个MES
$ [(v_1,d_1),(v_2,d_2),\cdots,(v_M,d_M)] $ 从而最大化结果模型的目标函数值,使得:在任何使用
embedding
的模型中,ME
都可以用来直接替代SE
。通常,给定一组vocabulary ID
$ \mathcal K $ , $ \mathcal K $ 中的每个元素被映射到其相应的SE
,然后对这些SE
进行一个或多个reduce
操作。例如,一个常用的reduce
操作是bag-of-words: BOW
,即对embedding
进行求和或求平均。为了了解在这种情况下ME
是如何直接替代SE
的,即BOW
的ME
版本(我们称之为MBOW
),由以下公式给出:其中
ME
是相加的。这在下图中得到了说明。请注意,对于那些 $ m_k $ 相等的 $ k $ ,在应用投影矩阵之前,对embedding
进行求和是更高效的。
41.1.2 Neural Input Search Approach
我们在模型的输入组件开发了一个新的搜索空间,它包含了我们想要搜索的
SE
或ME
。我们使用一个独立的controller
,从而在每一个step
中为每个离散特征挑选一个SE
或ME
。这些选中的SE
或ME
与主模型的其他部分(不包括控制器)一起被训练。此外,我们使用主模型的前向传播来计算控制器的选择的奖励(是准确率和内存成本的组合),并使用A3C
策略梯度方法将奖励用于训练控制器变量。正如论文在实验部分所述,
NIS
方法对具有大vocabulary size
的categorical
特征的影响更大。至于像性别、学历这种词典规模较小的categorical
特征,则NIS
方法的价值不大。搜索空间:
Embedding Blocks
:对于vocabulary size
为 $ v $ 的给定特征 $ F\in \mathcal F $ ,我们创建一组 $ S\times T $ 个矩阵,其中 $ S\gt 1, T\gt 1 $ 。第 $ (s,t) $ 个矩阵 $ \mathbf E^{s,t} $ 的尺寸为 $ \bar v_s\times \bar d_t $ ,其中 $ v=\sum_{s=1}^S \bar v_s, d = \sum_{t=1}^T \bar d_t $ , $ d $ 为vocabulary
中的item
允许的最大embedding size
。 我们称这些矩阵为Embedding Blocks
。这可以看作是将一个大小为 $ v\times d $ 的embedding
矩阵离散化为 $ S\times T $ 个子矩阵。例如,假设
v=10M
(M
代表一百万), $ d=256 $ ,我们可以把行离散成五块:[1M, 2M, 2M, 2M, 3M]
;可以把列离散成四块:[64, 64, 64, 64]
。这样就有20
个Embedding Blocks
,如Figure 1
所示。此外,对于每个
$ 1\le t\le T $ ,我们创建一个尺寸为 $ \bar d_t\times d $ 的投影矩阵 $ \bar {\mathbf P}^t $ ,以便将每个 $ \bar d_t $ 维的embedding
映射到一个共同的 $ d $ 维空间,从而方便下游的reduction
操作。 显然,对于所有的 $ s $ ,我们应该有 $ \bar v_s \gg d $ ,所以与embedding
中的参数数量相比,投影矩阵中的参数数量是可以忽略的。Embedding Blocks
是搜索空间的构建块,允许控制器在每个training step
中采样不同的SE
或ME
。Controller Choices
:controller
是一个神经网络,从softmax
概率中采样不同的SE
或ME
。它的确切行为取决于我们是对SE
还是ME
进行优化。下面我们将描述控制器在一个特征 $ F\in \mathcal F $ 上的行为,为方便描述,删除 $ F $ 下标。SE
:为了对SE
进行优化,在每个training step
中,控制器集合 $ \{(s,t)\mid 1\le s\le S, 1\le t\le T\} \cup \{(0,0)\} $ 中采样一个pair
$ (\bar s, \bar t) $ 。对于选中的 $ (\bar s, \bar t) $ ,只有Embedding Blocks
$ \left\{\mathbf E^{s,t}\mid 1\le s\le \bar s, 1\le t\le \bar t \right\} $ 参与到该特定的training step
。因此,控制器有效地挑选了一个SE
,如Figure 1(a)
中的红色矩形内的SE
,它代表了一个大小为 $ 5M\times 192 $ 的SE
。在这一步中,词表中第 $ k $ 个item
中的embedding
为:其中:
$ V_0 = 0, \bar V_s = \sum_{i=1}^s \bar v_i $ 为累计的vocabulary size
。 $ s_k\in \{1,s,\cdots,S\} $ ,且使得 $ \bar V_{s_k-1}\le k \lt \bar V_{s_k} $ 。 $ \mathbf{\vec e}^{s_k,t}_{k - \bar V_{s_k-1}} $ 为 $ \mathbf E^{s_k,t} $ 的第 $ k-\bar V_{s_k-1} $ 行。
定义
$ \bar D_t = \sum_{i=1}^t d_t $ 为累计的embedding size
,显然, $ \mathbf{\vec e}_k $ 相当于用一个 $ \bar D_t $ 维的embedding
表示第 $ k $ 个item
,然后将其投影到一个 $ d $ 维空间。这个投影矩阵 $ \mathbf P $ 是 $ \{\bar{\mathbf P}^1,\cdots,\bar{\mathbf P}^t\} $ 沿列的拼接。任何一个vocabulary ID
为 $ k\ge \bar V_{\bar s} $ 的item
都被认为是out-of-vocabulary
,要特别处理,通常采用的方法是使用零向量作为它们的embedding
。因此,这种SE
的选择带来的内存成本(参数数量)为: $ \mathcal C = \bar V_{\bar s}\times \bar D_{\bar t} $ ,其中投影矩阵的成本被忽略,因为 $ \bar v_s\gg d $ 。如果在
training step
中选择了(0, 0)
,就相当于从模型中去除该特征。因此,在这个training step
中,zero embedding
被用于这个特征的所有item
,相应的存储成本为0
。随着控制器探索不同的SE
,它根据每个choice
引起的奖励进行训练,并最终收敛到最佳选择。如果它收敛到(0, 0)
,意味着这个特征应该被删除。显然,对于一个给定的特征,搜索空间的大小是 $ (S\times T + 1) $ 。ME
:当对ME
进行优化时,控制器不是做出单个选择,而是做出一连串的 $ T $ 个选择,每个 $ 1\le t\le T $ 都有一个选择。每个选择为 $ \bar s_t\in \{1,\cdots,S\}\cup \{0\} $ 。- 如果
$ \bar s_t \gt 0 $ ,则只有Embedding Blocks
$ \left\{\mathbb E^{s,t}\mid 1\le s \le \bar s_t\right\} $ 参与到该特定的training step
。 - 如果
$ \bar s_t = 0 $ ,则对于词表内的所有item
,整个 $ \bar d_t $ 维的embedding
都将被移除。
因此,控制器选择了一个自定义的
Embedding Blocks
子集(而不仅仅是一个网格),它组成了一个MES
。如Figure 1(b)
所示:- 第一个
64-D embedding
被开头的3M
个item
所使用。 - 第二个
64-D embedding
被所有10M
个item
所利用。 - 第三个
64-D embedding
不被任何item
所使用。 - 最后一个
64-D embedding
被开头的3M
个item
所使用。
因此,词表中开头的
3M
个item
被分配了192
维的embedding
,而最后7M
个item
只被分配了64
维的embedding
。换句话说,在这个training step
中实现了MES [(3M, 192), (7M, 64)]
。数学上,令
$ \mathcal T_s = \{t\mid \mathbf E^{s,t} \text{ is selected}\} $ ,那么词表中第 $ k $ 个item
在当前training step
的embedding
为:如果
$ \mathcal T_{s_k} $ 为空,那么 $ \mathbf{\vec e}_k = \mathbf{\vec 0} $ 。SE
的emebdding
公式为: $ \mathbf{\vec e}_k = \sum_{t=1}^{\bar t} \bar {\mathbf P}^t \mathbf{\vec e}^{s_k,t}_{k - \bar V_{s_k-1}} $ 。可以看到,与SE
相比,ME
公式中的sum
不是从 $ 1 $ 到 $ \bar t $ ,而是被选中的那些维度。ME
的内存成本为: $ \mathcal C = \sum_{t=1}^T \bar d_t\times \bar V_{\bar s_t} $ 。对于一个给定的特征,搜索空间大小为 $ (S+1)^T $ 。- 如果
奖励:由于主模型是通过控制器对
SE
或ME
的选择来训练的,控制器是通过主模型对验证集样本的前向传播计算出来的奖励来训练的。我们将奖励定义为:其中:
$ R_Q $ 代表我们想要最大化的(潜在的不可微的)质量奖励, $ C_M $ 为内存成本用于惩罚控制器选择了超过预算的embedding
配置, $ \lambda $ 为一个系数用于平衡质量奖励和内存成本。质量奖励:一类常见的推荐问题是检索问题,其目的是给定模型的输入从而在一个可能非常大的
vocabulary
$ v $ 中找到 $ M $ 个最相关的item
。这类问题的objective
通常是实现high recall
,因此我们可以直接让Recall@N
( $ N\le M $ )指标作为质量奖励。当 $ v $ 太大时,计算Recall@N
变得太昂贵,我们可以通过采样一个小的negative set
(即,负采样),使用Sampled Recall@N
作为代理。另一类常见的问题是排序
ranking
问题。ranking
模型的质量通常由ROC-AUC
来衡量,他可以作为质量奖励。同样,对于回归问题,质量奖励可以设置为
prediction
和label
之间的L2-loss
的负值。内存成本:我们定义内存成本为:
注意:
$ C_F $ 是基于控制器选择的内存用量, $ \mathcal B $ 为预先定义的内存预算。 $ \lambda $ :显然, $ \lambda $ 代表值得付出 $ \mathcal B $ 的额外超预算的embedding
参数的代价所对应的质量奖励的增量。例如,如果质量奖励是ROC-AUC
, $ \lambda = 0.1 $ ,这意味着我们愿意承担额外的 $ \mathcal B $ 超预算的embedding
参数,如果它能使ROC-AUC
增加0.1
。这是因为额外的 $ \mathcal B $ 超预算参数会使奖励减少 $ \lambda $ ,所以只有当它能使质量奖励至少增加 $ \lambda $ 时才值得。
41.1.3 Training the Neural Input Search Model
Warm up
阶段:如前所述,训练NIS
模型涉及到主模型和控制器之间consecutive steps
的交替训练。如果我们从第0
步开始训练控制器,我们会得到一个恶性循环:没有被控制器选中的Embedding Blocks
没有得到充分的训练,因此给出了不好的奖励,导致它们在未来被选中的机会更少。为了防止这种情况,前几个
training steps
包括一个warm up
阶段,我们训练所有的Embedding Blocks
,并固定控制器参数。warm up
阶段确保所有Embedding Blocks
得到一些训练。在warm up
阶段之后,我们转向使用A3C
交替训练主模型和控制器。在预热阶段,控制器被固定为选择所有的
Embedding Blocks
。Baseline Network
:作为A3C
算法的一部分,我们使用一个baseline
网络来预测每个控制器(使用已经做出的选择)的期望奖励。baseline
网络的结构与控制器网络相同,但有自己的变量,这些变量与控制器变量一起使用验证集进行训练。然后,我们从每个step
的奖励中减去baseline
,计算出advantage
从而用于训练控制器。baseline
网络是主模型的拷贝,但是采用了不同的变量。每次更新主模型之后,就将主模型的参数拷贝给baseline
。总体训练流程为:
warm up
:通过训练集来更新主模型,此时选择所有的Embedding Blocks
。迭代:
- 在验证集上评估主模型的奖励,并通过奖励最大化来更新控制器参数。
- 通过新的控制器参数,在训练集上更新主模型。
41.2 实验
41.2.1 公共数据集
数据集:
MovieLens-1M
:包含了由6
千多个用户创建的1M
条电影评分记录。我们通过遵循一个广泛采用的实验设置来制定一个电影推荐问题。用户的评分被视为隐性反馈,也就是说,只要用户给电影打了分,就被认为是对该电影感兴趣。此外,对于每个用户,从电影词表中均匀地采样4
部随机电影作为用户的负样本(负采样策略,而不是在训练之前提前准备并固定了负样本)。意外的命中会被删除,即:负样本集合中包含了正样本,则把正样本从负样本集合中剔除。由于每条评分记录都有一个时间戳,我们把每个用户的最近一个评分记录拿出来进行测试。在测试阶段,对于每个正样本,我们随机采样
99
部电影作为负样本来计算评价指标。测试期间的采样策略与训练期间相同。KKBox
:来自WSDM KKBox
音乐推荐挑战赛,任务是预测用户在一个时间窗口内第一次可观察到的听歌事件后是否会重复听歌。数据集同时包含了正样本和负样本:正样本表示用户重复听了这首歌,负样本表示用户没有再听这首歌。因此,与MovieLens-1M
数据集不同的是,我们没有通过随机采样来手动构造负样本,而是使用数据集提供的负样本。由于该数据集没有与每条记录相关的时间戳,我们随机采样
80%
的记录用于训练、20%
的记录用于测试。
对于这两个数据集,我们进一步从训练集中随机采样
10%
的样本用于训练控制器的验证集。下表给出了我们应用
NIS
的特征的vocabulary size
(即,feature
的unique item
数量)。注意,原始的KKBox
数据集有更多的特征,这些特征要么是浮点特征(如 "歌曲长度")、要么是小vocabulary size
的categorical
特征(如 "流派")。由于NIS
对具有大vocabulary size
的categorical
特征的影响更大,在我们的实验中,为了简单起见,我们只使用下表中列出的特征。vocabulary
构建细节:以MovieLens-1M
为例,遍历每个user-movie
评分记录,并计算每个用户在整个数据集中出现的记录数量,根据计数结果给每个用户分配vocabulary ID
:最高频的用户分配ID 0
、最低频的用户分配最大的ID
。其它特征、其它数据集也以类似的方式构建vocabulary
。在生产环境中,特征的频次分布有变化,如何处理?如何处理新出现的
ID
,如新广告的ID
?这些论文都没有提到。读者猜测,NIS
仅适用于ID
分布变化不大的场景。对于新闻、广告等等ID
不断生成、消亡的领域,NIS
可能需要进行适配。实验配置:
NIS
方法实际上是模型结构无关的,可以应用于各种类型的模型。这里我们采用Neural Collaborative Filtering: NCF
模型。NCF
模型包括两个组件:Matrix Factorization: MF
组件、多层感知器MLP
组件,如下图所示。MF
组件中的user embedding
和item embedding
是 $ d $ 维的,其逐元素相乘产生了 $ d $ 维的MF embedding
。MLP
组件中的user embedding
和item embedding
是 $ 4d $ 维的,它们被拼接起来并馈入 $ 3 $ 个MLP layer
(ReLU
激活函数),其大小分别为 $ 4d, 2d, d $ 。top MLP layer
的输出被称作MLP embedding
。我们没有使用任何规范化技术,如
BatchNorm
、LayerNorm
等。这意味着
MLP
组件和MF
组件并没有共享embedding
,因此每个id
都有两套embedding
。
$ d $ 维的MF embedding
和 $ d $ 维的MLP embedding
拼接起来,然后被用于计算logit
(通过一个 $ 2d $ 的可学习的权重向量进行点乘)。模型使用交叉熵损失。所有权重(包括隐层权重和
embedding
矩阵)使用高斯分布随机初始化,高斯分布的均值为零、标准差为 $ 1/\sqrt n $ ,其中 $ n $ 为隐层或embedding
的维度。任何权重都没有使用正则化或dropout
。当一个特征有多个取值时(如,一首歌有多个作曲家),这些特征的取值的embedding
是均值池化。当某些训练样本中存在缺失的特征值时,使用全零的embedding
。对于
MovieLens-1M
数据集,item embedding
是简单的movie embedding
。于KKBox
数据集,由于每个item
(即歌曲)有多个特征,即song ID
、艺术家姓名、作曲家、作词人,item embedding
的计算方法如下:- 对于
MF
组件,四个特征中的每一个都表示为一个 $ d $ 维的embedding
,然后将它们拼接起来并通过一个 $ 4d\times d $ 的投影矩阵从而投影到一个 $ d $ 维向量。投影后的 $ d $ 维向量表示MF
组件中的item embedding
。 - 对于
MLP
组件,四个特征中的每一个都表示为一个 $ 4d $ 维的embedding
,然后将它们拼接起来并通过一个 $ 16d\times 4d $ 的投影矩阵从而投影到一个 $ 4d $ 维向量。投影后的 $ 4d $ 维向量表示MLP
组件中的item embedding
。
给出一个预先选择的
$ d $ ,从而形成一个具有 $ m_d $ 个embedding
参数的模型,我们首先将其作为baseline
,不应用NIS
。然后,我们将每个特征的embedding size
增加一倍,从而产生 $ 2m_d $ 个embedding
参数,并应用NIS
的内存预算 $ \mathcal B=m_d $ (即与baseline
模型相同)。我们预期NIS
通过更好地分配 $ m_d $ 个参数而表现得比baseline
更好。我们进一步用 $ \mathcal B = 0.5 m_d $ 推动NIS
的极限,看看它是否还能比baseline
模型表现更好。我们为
baseline
模型实验了 $ d=8 $ 和 $ d=16 $ ,因此相应的NIS
模型将有 $ d=16 $ 和 $ d=32 $ 。控制器:控制器用于在所有候选的
choice
上产生一个概率分布。我们在所有的实验中使用了一个简单的控制器:对于
SE settting
,控制器为每个特征分配一个 $ (S\times T+1) $ 维的向量,向量中的每个元素代表了多项式分布的logit
。该向量被初始化为零向量。控制器从这个多样式分布中采样不同的
SE
。注意:每个特征的搜索空间大小为 $ (S\times T+1) $ 。对一个具有 $ |\mathcal F| $ 个特征的模型,控制器只是由 $ |\mathcal F| $ 个独立的向量组成,因此不同特征的SE
是独立采样的。我们没有使用更复杂的控制器结构,如
RNN
,因为不清楚对一个特征做出的决策是否会影响其他特征,以及应该按照何种顺序做出决策。对于
SE setting
,控制器为每个特征从 $ \mathbb R^{(S\times T+1)} $ 向量中选择一个元素。对于
ME setting
,控制器为每个特征分配 $ T $ 个独立的 $ (S+1) $ 维的向量,因为需要做出 $ T $ 个独立的选择。对一个具有 $ |\mathcal F| $ 个特征的模型,控制器是由 $ T\times |\mathcal F| $ 个独立的向量组成。对于
ME setting
,控制器为每个特征从 $ T $ 个 $ \mathbb R^{(S+1)} $ 个向量中,分别在每个向量中选择一个元素。
每个特征构建了
20
个Embedding Blocks
,其中: $ \bar d_t $ 为 $ [0.25d, 0.25d, 0.25d, 0.25d] $ , $ \bar v_s $ 为 $ [0.2v,0.2v,0.2v,0.2v,0.2v ] $ ,其中 $ v $ 为该特征的total vocabulary size
。在实践中,我们发现这种配置在细粒度和搜索空间大小之间取得了良好的平衡。如前所述,控制器使用验证集进行训练。对于
MovieLens-1M
数据集,我们使用Recall@1
(也称作HitRate@1
)作为质量奖励 $ R_Q $ ,然后我们报告测试集上的多个指标:Recall, MRR, NDCG
。对于KKBox
数据集,我们使用ROC-AUC
作为质量奖励 ,并报告测试集上的ROC-AUC
。在所有的实验中,我们设定 $ \lambda=0.01 $ 。训练细节:
- 主模型:
batch size = 256
,应用梯度裁剪(梯度范数阈值为1.0
),学习率为0.1
,使用Adagrad
优化器。在开始A3C
算法之前,进行了100K
步的预热阶段。 - 控制器:使用
Adagrad
优化器,学习率为0.1
,不使用梯度裁剪(因为一个低概率但高回报的行动应该得到一个非常高的梯度,以显著提高其概率)。每个控制器的决策都由验证集的64
个样本所共享,从中计算出一个奖励值。
在预热阶段结束后,控制器和主模型每隔一个
mini-batch step
进行交替训练。在所有的实验中,我们在主模型和控制器都收敛后停止训练(而不是仅有一个收敛)。我们使用了分布式训练,其中
5
个worker
独立地进行并行训练。- 主模型:
Table 2
和Table 3
分别报告了MovieLens-1M
数据集和KKBox
数据集的实验结果。注意, $ \mathcal B $ 代表NIS
模型的内存预算。可以看到:NIS
能够持续取得比baseline
模型更好的性能,很多时候参数明显减少,证明了我们方法的有效性。- 在相同的条件下,
NIS-ME
模型总是优于NIS-SE
,而且通常参数比NIS-SE
更少。 - 即使
$ \mathcal B $ 是baseline
模型大小的一半,NIS
模型也几乎总是优于baseline
。这不仅证明了我们方法的有效性,而且还表明在重度约束条件下有可能实现卓越的性能。 - 一些
NIS
模型通过超出内存预算获得了卓越的性能。这种模型质量和模型规模之间的tradeoff
反映在奖励函数的设计中。当内存预算只是一个指导方针而不严格时,这一点特别有用。
41.2.2 真实世界大型数据集
这里我们描述如何将
NIS
应用到Google Play App store
的ranking model
。该模型的目标是:根据App
被安装的可能性对一组App
进行排序。数据集由(Context, App, Label)
组成,其中Label=0
表示App
未被安装、Label=1
表示App
被安装。总共有20
个离散特征被用来表示Context
和App
,如App ID
、Developer ID
、App Title
等。离散特征的vocabulary size
从数百到数百万不等。每个特征的embedding
维度和vocabulary size
经过几年的手工优化。实验配置:对于
Embedding Blocks
,我们设置 $ \bar v_s = [0.1v, 0.2v, 0.2v, 0.2v, 0.3v] $ ,其中 $ v $ 为特征的vocabulary size
。需要注意的是,对于每个特征,我们没有平均分割vocabulary
,而是给top-10%
的item
分配了一个Embedding Block
,因为数据集中的高频特征都是最重要的,也就是说,top-10%
的item
通常出现在大多数训练样本中。这进一步证明了Multi-size Embedding
在实践中的必要性。此外,我们设置
$ \bar d_t = [0.25D,0.25D,0.25D,0.25D ] $ ,其中 $ D=3d $ , $ d $ 为production model
的embedding size
(在不同特征上取值为8 ~ 32
)。在将embedding size
增加到三倍从而允许更高的模型容量的同时,我们设置内存预算 $ \mathcal B=0.5 \mathcal B_p $ ,其中 $ \mathcal B_p $ 为production model
的embedding
参数的总数。显然,这里的目标是提高模型的预测能力,同时减少模型的大小。我们使用
ROC-AUC
作为质量奖励,并设置 $ \lambda = 0.001 $ (即,为了0.001
的ROC-AUC
增长从而允许 $ 0.5\mathcal B_p $ 的参数增加)。离线实验:离线
ROC-AUC
指标如下表所示。可以看到:- 在
SE setting
和ME setting
中,NIS
能够以较少的参数数量改善production model
的ROC-AUC
性能。 NIS-ME
模型在参数数量更少的情况下也能取得比NIS-SE
更好的性能,因为Multi-size Embedding
可以通过给head items
更多的参数、给tail items
更少的参数来更好地利用内存预算。与production model
相比,NIS-ME
在ROC-AUC
上得到了0.4%
的改进,而模型大小减少了30%
。
- 在
在线
A/B test
:我们进一步用实时流量进行了A/B test
的在线实验。由于NIS-ME
模型优于NIS-SE
模型,A/B test
只在NIS-ME
模型上进行。我们监测了App Install
指标,并得出结论:NIS-ME
模型能够将App Install
增加1.02%
。NIS-ME
模型目前部署在100%
的流量上,取代了本实验中使用的production baseline model
。稳定性:当部署在生产中时,
NIS-ME
模型需要每天进行重新训练和刷新。了解模型的性能可以维持多久是很重要的。这是因为每个特征的数据分布可能会随着时间的推移而发生重大变化,所以MES
可能不再是最优的,在这种情况下,我们需要重新运行NIS
,找到更适合新数据分布的MES
。因为
NIS
的词表构建依赖于ID
频次分布,而在生产环境中,ID
频次分布可能随时间发生变化。我们进行了为期
2
个月的研究,监测原始production model
和NIS-ME
模型的ROC-AUC
,如下图所示。显然,NIS-ME
模型相对于production model
的优势在2
个月的时间里非常稳定,说明没有必要经常重新运行NIS
。在实践中,我们只在模型结构发生变化或要增加新特征时才运行NIS
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论