数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
五、GBDT-LR 模型 [2014]
数字广告
didital advertising
是一个价值数十亿美元的产业,并且每年都在急剧增长。在大多数在线广告平台中,广告的投放是动态的,根据用户的兴趣来个性化投放。机器学习在计算候选广告对用户的预期效用expected utility
方面发挥着核心作用,并以这种方式提高了市场效率。Varian
(论文《Position auctions》
)和Edelman
等人(论文《 Internet advertising and the generalized second price auction: Selling billions of dollars worth of keywords》
)在2007
年发表的开创性论文描述了由Google
和Yahoo!
开创的点击出价bid per click
、点击扣费pay per click
。同年,微软也在建立一个基于相同拍卖模型(论文《Predicting clicks: Estimating the click-through rate for new ads》
)的sponsored search
市场。广告拍卖auction
的效率取决于点击率预估的准确性accuracy
和校准calibration
。点击率预估系统需要健壮性robust
和适应性adaptive
,并且能够从大量数据中学习。点击率预估系统是大多数在线广告系统的核心。Facebook
拥有超过7.5
亿的日活用户、超过100
万的活跃广告主,因此预估广告的点击率是一项具有挑战性的机器学习任务。论文《Practical Lessons from Predicting Clicks on Ads at Facebook》
分享了满足这些要求的、从真实世界数据执行的实验中得出的洞察insight
。在
sponsored search
广告中,user query
用于检索和query
显式或者隐式匹配的候选广告。在Facebook
中,广告不是与query
相关,而是指定人口统计特性和兴趣的定向targeting
。因此,当用户访问Facebook
时,合格eligible
的广告数量可能超过sponsored search
搜索量。为了处理每个请求的大量候选广告(每当用户访问Facebook
时都会触发广告请求),Facebook
将首先构建一系列计算代价递增的、级联cascade
的classifiers
(即matching
、ranking
等一系列模型)。在本文中,论文关注级联分类器最后阶段的点击率预估模型,即为最终候选广告集合生成预测的模型。论文发现:将决策树与逻辑回归相结合的混合模型比这两种方法中的任何一个都高出
3%
以上。这种提升对于整体系统性能有重大影响。许多基础的超参数会影响系统的最终预测性能。毫不意外,最重要的是拥有正确的特征:比其它特征,那些捕获有关用户历史信息和广告历史信息的特征占统治地位。一旦有了正确的特征和正确的模型(决策树加逻辑回归),其它因素就发挥了很小的作用(即使是很小的改进,在如此规模的任务中也很重要)。针对数据新鲜度freshness
、学习率模式schema
、数据采样而选择最佳处理方式会稍微改善模型,尽管改善的幅度远不如添加高价值特征、或者选择正确的模型。论文从实验设置概述开始,然后评估不同的概率线性分类器
probabilistic linear classifiers
以及不同的在线学习算法。在线性分类的背景下,论文继续评估特征变换和数据新鲜度的影响。受到实际经验教训的启发,尤其是在数据新鲜度和在线学习方面,论文提出了一个模型架构,该架构包含一个在线学习层
online learning layer
,同时生成相当紧凑的模型。接下来描述了在线学习层所需的一个关键组件,即online joiner
,它是一种实验性的基础设施,可以生成实时训练数据real-time training data
的实时流live stream
。最后,论文提出了用内存、计算时间、处理大量数据和准确性进行
tradeoff
的方法。包括为大规模application
优化内存和延迟的使用方法,以及训练数据规模和准确性之间权衡的研究。
5.1 实验配置
为了实现严格可控的实验,我们选取了
2013
年第四季度的任意一周,从而作为离线训练数据。我们将离线数据划分为训练集和测试集,并使用它们来模拟流式数据streaming data
,从而进行在线训练和预估。论文中的所有实验都使用相同的训练集/测试集。评估指标:由于我们最关心的是各个因素
factors
对于机器学习模型的影响,因此我们使用预估的准确性来评估,而不是与利润和收入直接相关的指标。在这里我们使用归一化熵Normalized Entropy: NE
和校正calibration
作为我们的主要评估指标。归一化熵(更准确地讲,归一化交叉熵
Normalized Cross- Entropy
)等于每次曝光的平均对数损失除以背景熵background entropy
。假设样本集合有 $ N $ 个样本,样本集合的经验
CTR
为 $ \bar p $ (它等于所有正类样本数量除以总样本数量)。假设第 $ i $ 个样本预测为正类的概率为 $ p_i $ ,其真实标签为 $ y_i\in \{-1,+1\} $ 。定义背景点击率
$ H_{bg} = - \bar p\log \bar p - (1-\bar p)\log(1-\bar p) $background CTR
为样本集合经验CTR
,它的熵定义为背景熵:背景熵衡量了样本集合的类别不平衡程度,也间接的衡量了样本集合的预测难度。
类别越不均衡预测难度越简单,因为只需要将所有样本预测为最大的类别即可取得非常高的准确率。
定义模型在样本集合熵的损失函数为:
$ \mathcal L = - \sum_{i=1}^N\left(\frac{1+y_i}{2}\log p_i + \frac{1-y_i}{2}\log (1-p_i)\right) $每个样本的损失为交叉熵。
定义归一化熵
$ \text{NE} = \frac{\mathcal L /N}{H_{bg}} $NE
为:模型在所有样本的平均损失函数除以背景熵。需要除以 $ N $ 是为了剔除样本集合大小的影响。
NE
相对损失函数的优势在于:NE
考虑了样本集预测的难易程度。在平均损失相同的情况下,样本集越不均衡则越容易预测,此时NE
越低。归一化熵可以用于计算相对信息增益
Relative Information Gain: RIG
,其中RIG = 1 - NE
。校正
Calibration
是平均预估点击率和经验点击率的比值。换句话讲,它是期望点击次数和实际观察到点击次数的比值。calibration
是一个非常重要的指标,因为准确且校准良好的CTR
预估对于在线竞价和拍卖的成功至关重要。calibration
和1.0
的差异越小,模型越好。
注意,
AUC
也是评估模型能力的一个很好的指标,但是AUC
反应的模型对样本的排序能力:auc=0.8
表示80%
的情况下,模型将正样本预测为正类的概率大于模型将负样本预测为正类的概率。在现实环境中,我们期待预测是准确的,而不仅仅是获得最佳的排序,从而避免潜在的投放不足
under-delivery
、以及投放过度over-delivery
。NE
衡量的预估好坏并不隐式地反映calibration
。例如,如果模型高估了2
倍,然后我们使用一个全局的因子0.5
来固定地校准:- 因为校准不改变模型的排序能力,所以
AUC
保持不变。 - 因为校准后的
pCTR
分布与样本的标签分布距离更近,所以NE
会得到改善。
有关这些指标的深入研究,可以参考
《Predictive model performance: Offline and online evaluations》
。- 因为校准不改变模型的排序能力,所以
5.2 预估模型结构
这里我们展示了一个混合模型结构:
boosted decision trees: BDT
和概率稀疏线性分类器probabilistic sparse linear classifier
的拼接,如下图所示。其中输入特征通过BDT
进行变换,每棵子树的输出都被视为稀疏线性分类器的离散输入特征。BDT
已经被证明是非常强大的特征变换。- 我们首先展示了决策树是非常强大的输入特征变换,可以显著提高概率线性分类器。
- 然后我们展示了更新鲜
fresher
的训练数据如何导致更准确的预估,这激发了使用在线学习方法来训练线性分类器的思想。 - 最后我们比较了两个概率线性分类器家族的许多在线学习变体。
5.2.1 决策树特征变换
有两种最简单的特征转换方式:
连续特征离散化:将连续特征的取值映射到一个个分散的分桶里,从而离散化。这里桶的数量和边界难以确定,通常有两种方法:
- 通过人工根据经验来设定分桶规则。
利用后续的分类器来显式的学习这个非线性映射,从而学习出有意义的分桶数量和边界。
离散特征交叉:类似
FM
模型采用二路特征交叉(或者更高阶)来学习高阶非线性特征。对于连续特征可以先离散化之后再执行特征交叉,如
kd
树就是典型的代表。
Boosted decisition tree:BDT
就是结合了上述两种方式的一个强大的特征提取器。对于BDT
,我们将每棵子树视为一个离散特征,其叶结点的编号为特征的取值并执行one-hot
编码。假设
BDT
有两棵子树,第一棵有3
个叶结点,第二棵有2
个叶结点。则样本提取后有两个特征:第一个特征取值为{1,2,3}
,第二个特征取值为{1,2}
。假设某个样本被划分到第一棵子树的叶结点2
,被划分到第二棵子树的叶结点1
,则它被转换后的特征为:[0,1,0,1,0]
。其中:前三项对应于第一个离散特征的one-hot
,后两项对应于第二个离散特征的one-hot
。我们使用的
BDT
为梯度提升树Gradient Boosting Machine:GBM
,其中使用了经典的L2-TreeBoost
算法。在每次学习迭代中,都会创建一棵子树对残差进行建模。我们可以将基于BDT
的变换理解为一种监督特征编码:- 它将一组实值向量
real-valued vector
转换为一组二元向量binary-valued vector
。 - 每棵子树从根节点到叶节点的遍历表示某些特征转换规则。
- 在转换后的二元向量上拟合线性分类器本质上是学习每个规则的权重。
- 它将一组实值向量
我们进行了实验以显示将树特征作为线性模型输入的效果。我们对比了两种逻辑回归模型:一种具有树特征变换,另一种具有普通特征(未变换的)。我们还对比了一个
BDT
模型。对比结果如下表所示,可以看到:- 树特征变换有助于将归一化熵降低
3.4%
以上。这是一个非常显著的提升。 - 有意思的是,单独使用
LR
和单独使用Tree
模型具有相差无几的预测准确性(实际上LR
稍微好一点),但是它们的组合使得准确性大幅上升。
- 树特征变换有助于将归一化熵降低
5.2.2 数据新鲜度
点击率预估系统通常部署在数据分布随时间变化的动态环境中。我们研究了训练数据新鲜度
freshness
对于预测性能的影响。为此,我们在某一天训练一个模型并在连续几天内对其进行测试。我们为BDT
模型、带tree-transformed
的逻辑回归模型进行实验。实验中,我们训练一天的数据,并评估连续六天中每一天的归一化熵。结果如下图所示,指标是相对于最差的
NE
的比例(最差的NE
发生在Trees only
模型延迟6
天时)。可以看到:- 随着训练集和测试集之间延迟的增加,两种模型的预估准确性显著下降。
- 通过将每周训练改为每天训练,
NE
可以减少大约1%
。
这些发现表明:每天进行重新训练是值得的。
考虑数据新鲜度,我们需要用最新的样本更新模型。有两种更新策略:
- 每天用最新的数据重新训练模型。重新训练模型所需的时间各不相同,取决于训练样本的数量、子树的数量、每棵子树的叶节点数量、
cpu
、内存等因素。通常在大规模集群中可以在几个小时内完成训练。 - 每天或者每隔几天来训练特征提取器
BDT
,但是用最新的数据在线近乎实时地训练LR
线性分类器。
- 每天用最新的数据重新训练模型。重新训练模型所需的时间各不相同,取决于训练样本的数量、子树的数量、每棵子树的叶节点数量、
5.2.3 学习率
为了最大限度地提高数据新鲜度,一种选择是在线训练线性分类器,即在带
label
的曝光信息到达时直接训练。这里我们评估了几种为基于SGD
的逻辑在线学习设置学习率的方法。
$ \eta_{t,i} = \frac{\alpha}{\beta +\sqrt{\sum_{j=1}^t (\mathbf{\vec g}_j)_i^2}} $per-coordinate
基于特征的学习率:在第 $ t $ 次迭代特征 $ i $ 的学习率为:其中: $ \alpha,\beta $ 为模型的超参数; $ (\mathbf{\vec g}_j)_i $ 为第 $ j $ 次迭代的梯度在特征 $ i $ 的分量。
- 特征 $ i $ 的梯度越大,说明该特征方向波动较大,则学习率越小,学习速度放慢。
- 特征 $ i $ 的梯度越小,说明该特征方向波动较小,则学习率越大,学习速度加快。
$ \eta_{t,i} = \frac{\alpha}{ {n_{t,i}}} $per-weight
维度加权学习率:在第 $ t $ 次迭代特征 $ i $ 的学习率为:其中: $ \alpha $ 为模型的超参数, $ n_{t,i} $ 为截至到第 $ t $ 次迭代特征 $ i $ 上有取值的所有样本数量。
在广告场景中,这些特征在大多数情况下都没有取值,因此对应的权重很难有更新机会。
- 特征 $ i $ 上有取值的样本越多,则可供学习的样本也多,则学习率越小,学习速度放慢。
- 特征 $ i $ 上有取值的样本越少,则可用学习的样本也少,则学习率越大,学习速度加快。
$ \eta_{t,i} = \frac{\alpha}{\sqrt{n_{t,i}}} $per-weight square root
基于权重开方的学习率:在第 $ t $ 次迭代特征 $ i $ 的学习率为:
$ \eta_{t,i} = \frac{\alpha}{\sqrt t} $global
全局学习率:在第 $ t $ 次迭代所有特征的学习率都为:
$ \eta_{t,i} = \alpha $constant
常量学习率:在第 $ t $ 次迭代所有特征的学习率都为:
前三种方式针对每个特征都有不同的学习率,最后两种方式对所有特征采用相同的学习率。所有超参数都通过网格搜索来调优,最优值如下表所示。
我们将学习率下限设定为
0.00001
从而用于在线的continuous learning
。我们使用上述学习率方案在相同数据集上训练和测试LR
模型,实验结果如下图所示。可以看到:per-coordinate
方法获得最好的表现,而per-weight
效果最差。per-weight square root
和constant
方案具有相似、但是稍差的效果。全局学习率表现不佳,其主要原因是:每个特征上训练样本数量不平衡。
一些高频特征上(如:“是否男性” 特征)的样本数量较多,而另一些低频特征(如:“是否明星” )上的样本数量较少。在全局学习率策略下,低频特征学习率太快降低到很小的值,使得最优化难以收敛到最优点。
虽然
per-weight
策略解决了该问题,但是它仍然表现不佳。主要原因是:虽然它对低频特征的学习率控制较好,但是它对高频特征的学习率控制较差。它对所有特征的学习率都下降得太快,在算法收敛到最优点之前训练就过早终止了。这解释了为什么该方案是所有学习率方案中最差的。
5.3 ONLINE DATA JOINER
如前所述,更新鲜的训练数据会提高预估准确性。这里我们介绍一个实验系统,该系统生成用于在线学习训练线性分类器的实时训练数据。我们将这个系统称作
online joiner
,因为它的关键操作是以在线方式将label
(是否点击)和训练数据(广告曝光)进行关联。在线训练框架最重要的是为模型提供在线学习的标注样本。点击行为比较好标记,但是“不点击”行为难以标记。因为广告并没有一个“不点击”按钮来获取不点击的信息。因此,如果一个曝光在一个时间窗内未发生点击行为,则我们标记该次曝光是未点击的。
之所以要设定一个时间窗,是因为广告曝光和用户点击之间存在时间差。这里有两个原因:
给用户曝光一个广告后,用户不会立即点击。如:用户会简单浏览广告的内容再决定是否点击。对于视频类广告,用户甚至会观看完整视频之后再决定是否点击。
因此曝光事件和点击事件这两个事件存在时间差。
广告系统的曝光日志和点击日志通常都是分开的、独立的实时数据流。这两个数据流回传到在线训练系统可能并不是同步的,存在数据回传时间差。
这个等待时间窗口需要仔细调优:
- 如果窗口太长,那么会延迟实时训练数据,数据
freshness
较差。同时为了存储更长时间的曝光数据内存代价也较高。 - 如果窗口太短,那么会导致部分点击丢失,因为相应的曝光可能已经被标记为
no click
并移出内存。这会对点击覆盖率click coverage
产生不利影响。其中点击覆盖率指的是成功关联曝光的点击占所有点击的比例。
因此,
online joiner
必须在新近程度recency
和点击覆盖率之间取得平衡。点击覆盖率低意味着实时训练集会有bias
:经验CTR
略低于ground truth
。这是因为如果等待时间足够长,那么标记为no click
的部分曝光会被标记为click
。通过挑选合适的时长,可以降低经验的CTR
偏差到百分之一以下,同时内存代价也可以接受。Facebook
在线训练框架如下图所示:- 用户浏览
Facebook
时向Ranker
模块发送一个广告请求,请求中包含request ID
。 Ranker
模块根据在线模型的预测结果,向用户返回一个广告,同时在曝光实时数据流中增加一条曝光日志。- 如果用户点击广告,则前端打点系统上报点击事件,在后台点击实时数据流中增加一条点击日志。
- 通过
Oneline Joiner
模块实时获取最近一个时间窗的曝光、点击日志,并拼接样本特征来构造训练集。 Trainer
模块根据构造的训练集执行在线训练,训练好的模型部署到线上供Ranker
模块使用。
这会形成一个数据闭环,使得模型能够捕捉到最新的数据分布。
- 用户浏览
在线训练需要增加对实时训练数据的异常保护。假设实时训练数据出现问题(如:前端打点上报出现异常、
Online Joiner
工作异常等),导致大量的点击数据丢失。那么这批实时训练样本存在缺陷,它们的经验CTR
非常低甚至为0
。如果模型去学习这样一批样本,则模型会被带偏:对任何测试样本,模型都会预测出非常低、甚至为零的点击率。根据广告点击价值
eCPM = BID x pCTR
,一旦预估点击率pCTR
为零则广告的eCPM
为零。那么这些广告几乎没有竞争力,竞争失败也就得不到曝光机会。因此需要增加实时训练数据的异常检测机制。如:一旦检测到实时训练数据的分布突然改变,则自动断开online trainer
和online joiner
的连接。
5.4 优化技巧
子树的数量:在
GBDT-LR
模型中子树的数量越大模型表现越好,但是计算代价、内存代价越高。随着子树的增多,每增加一棵子树获得的效益是递减的。这就存在平衡:新增子树的代价和效益的平衡。我们将子树的数量从
1
增加到2000
,并使用一整天的数据训练模型、第二天的数据测试模型性能。我们限制每棵子树的叶子不超过12
个。和之前的实验类似,我们使用归一化熵NE
作为评估指标。实验如下图所示,其中
NE submodel0, NE submodel1
使用全量训练数据、不同的超参数来训练,而NE submodel2
使用1/4
的训练数据。可以看到:NE
随着子树数量的增加而下降,但是最后增加的1000
棵子树获得的效益很低。几乎所有的NE
改善都来自于前500
棵子树,最后1000
棵子树得到的NE
下降不足0.1%
。NE submodel2
由于训练数据更少,使得模型在1000
棵子树之后出现过拟合(NE
增加)。
特征的数量:特征数量是另一个模型属性,可以影响到估计准确性和计算性能之间的
tradeoff
。特征越多模型表现越好,但是计算代价、内存代价越高。但是随着特征的增多,尤其是无效特征的增多,每增加一个特征获得的效益是递减的。这就存在平衡:新增特征的代价和效益的平衡。为了更好地理解特征数量的影响,我们首先评估特征重要性。我们使用统计的
Boosting Feature Importance
,有三种统计方法(如XGBoolst/LightGBM
):weight
:特征在所有子树中作为分裂点的总次数。gain
:特征在所有子树中作为分裂点带来的损失函数降低总数。cover
:特征在所有子树中作为分裂点包含的总样本数。
通常情况下,少数特征贡献了大部分解释,而剩余特征仅具有微小的贡献。如下图所示,
top 10
特征贡献了大于一半的重要性,最后300
个特征贡献了不到1%
的重要性。下图中,左轴给出了对数尺度的特征重要性,右轴给出了累计特征重要性。基于这一发现,我们进一步试验仅保留
top10,top20,top50,top100,top200
重要性的特征,并评估模型性能的影响。实验结果如下,可以看到:归一化熵随着我们包含更多特征而具有类似的收益递减特性。接下来我们将对历史特征
historica features
和上下文特征contextual features
进行研究。出于数据敏感性和公司政策,我们无法透露我们使用的实际特征的详细信息。上下文特征可以是本地时间、星期几等,历史特征可以是广告累计的点击量等。历史特征和上下文特征:
BDT
模型中用到的特征分类两类:上下文特征和历史统计特征。- 上下文特征:曝光广告的当前上下文信息。如:用户设备、用户所在页面的信息等等。
- 历史统计特征:广告的历史统计行为,或者用户的历史统计行为。如:广告的上周平均点击率,用户的历史平均点击率。
这里我们研究这两种类型的特征如何影响系统性能。
首先我们检查这两类特征的相对重要性。我们通过按重要性对所有特征进行排序,然后计算
top k
个重要特征中历史特征的百分比。结果如下所示,其中Y
轴表示在top k
特征中历史特征的占比。可以看到:历史特征比上下文特征提供了更多的解释。按照重要性排序的
top 10
特征都是历史特征。在所有top 20
特征中,只有2
个上下文特征,而历史特征占据了75%
。为了更好地比较这两类特征,我们训练了两个仅包含上下文特征和历史特征的
BDT
模型,然后将这两个模型与所有特征的完整模型进行比较,结果如下表所示。我们再次验证,总体而言,历史特征比上下文特征发挥更大的作用。在仅有上下文特征的情况下,我们的NE
损失了4.5%
。相反,在仅有历史特征的情况下,我们的NE
损失小于1%
。应该注意的是:上下文特征对于处理冷启动问题非常重要。对于新用户和新广告,上下文特征对于合理的点击率预估是必不可少的。
最后,我们在连续几周内评估仅有历史特征或仅有上下文特征的训练模型,以测试这两种类型特征对数据新鲜度的依赖性。实验结果如下图所示。可以看到:具有上下文特征的模型比具有历史特征的模型更依赖于数据新鲜度。这符合我们的直觉,因为历史特征描述了长期累计的用户行为,这比上下文特征要稳定得多。
5.5 训练大量数据
Facebook
每天的广告曝光量非常大。即使是每个小时,数据样本也可能上亿。用于控制训练成本的常用技术是减少训练数据量。本节中,我们评估两种降采样技术,均匀降采样和负降采样。在每种情况下,我们训练一组包含600
棵树的boosted tree model
,并是使用calibration
和 归一化熵来评估这些模型。均匀降采样:所有样本都以同一个概率 $ p_{sample} $ 来随机采样。该方法容易实现,且采样后的样本分布和采样前保持不变。这样使得训练数据集的分布基本和线上保持一致。
我们评估了
0.001,0.01,0.1,0.5,1
这几种采样率。结果表明:更多的数据带来更好的模型。但是采用10%
的训练样本相对于全量样本仅仅损失了1%
的预测能力,而训练代价降低一个量级。在该采样率下的calibration
甚至没有性能下降。注意:calibration
越接近1.0
越好。负降采样:保留所有的正样本,仅负样本以概率 $ p_{sample} $ 来随机采样。该方法可以缓解类别不平衡问题。但是,采样后的样本分布和采样前不再相同,导致训练集的分布和线上不再保持一致。因此需要对模型进行校准。
我们评估了
0.0001, 0.001, 0.01, 0.1
这几种采样率。可以看到:负采样率对训练模型的性能有显著影响。将负采样率设置为0.025
可以实现最佳性能。Re-Calibration
:负降采样可以加快训练速度,改善模型能力。但是负采样中的训练数据分布和线上数据分布不一致,因此必须对模型进行校准。假设采样之前样本集的平均
$ \hat y_{new} = \frac{\hat y}{\hat y + (1-\hat y)/s} $CTR
为0.1%
。当执行采样率为0.01
的负降采样之后,由于正样本数量不变、负样本数量降低到之前的0.01
,因此采样后的样本集的平均CTR
为10%
。此时需要校准模型,使得模型的预估平均CTR
尽可能与线上的平均CTR
一致。假设模型预估的结果为 $ \hat y $ ,则校准后的预估结果为:其中 $ s $ 为负采样比例。
5.6 总结
我们从
Facebook
广告数据的实验中提出了一些实践经验教训,这激发了用于点击率预估的有前途的混合模型架构。- 数据新鲜度很重要,至少每天都值得重新训练。在本文中,我们进一步讨论了各种在线学习方案。我们还展示了允许生成实时训练数据的基础设施。
- 使用
BDT
转换实值输入特征显著提高概率线性分类器的预测准确性。这激发了一种混合模型架构,该架构将BDT
和稀疏线性分类器拼接起来。 - 具有
per-coordinate
学习率的LR
模型比其它正在研究的LR SGD
学习率方案表现更好。
同时我们还描述了在大规模机器学习中优化内存和延迟的技巧:
- 我们提出了
BDT
的子树数量和准确性之间的trade-off
。保持较少的子树数量从而减少内存和计算量是有利的。 BDT
提供了一种通过特征重要性进行特征选择的便捷方法。可以激进地减少使用特征的数量,同时预测准确性只会略微下降。- 我们分析了上下文特征和历史特征的效果。对于有历史特征的广告和用户,这些特征提供了比上下文特征更出色的预测性能。
- 最后,我们讨论了对训练数据进行降采样的方法,如均匀采样和负采样。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论