广告系统
广告竞价划分 #card
- ssp <-> adx(拍卖平台) <-> dsp
召回系统
- [[@Embedding-based Retrieval in Facebook Search]] 从 0 到 1 构建一个召回系统
精排,根据业务去挖掘特征
对模型效果比较重要的几部分
-
数据流
-
比较核心的目标是及时且准确地获取各种事件 (click,convert) 的 ground truth;“及时” 指的是 发生的事件需要尽可能快地喂给模型 ,“准确” 指的是 这些事件需要被正确打上 label。
-
数据流与转化归因 (conversion attribution)
-
归因可以理解为 label 的获取与拼接, 当前最常见的是 last touch 方式的归因,也有一些其他的归因方式如 multi-touch 归因等, 通常涉及到广告主的上报和实际的拼接两部分
-
-
[[CTR Bias]]
-
[[exposure bias]] 只有曝光的样本才能进入训练集,[[负样本]]选择问题
-
[[position bias]]
-
-
全渠道数据 [[全场景建模]]
- 核心 :-> 将被 cvr 被低估的用户通过全渠道数据捞回来
- 如何获得跨平台的样本? #card
-
一种是广告主将媒体 A 的数据归因后直接回传给媒体 B,
-
另一种则是媒体之间相互合作,如笔者做过的联邦学习在广告的落地应用就是属于这部分。
-
-
-
[[特征工程]] dnn 模型的特征选择
-
常用挖掘套路 #card
-
属性特征:用户 / 广告本身的一些属性,如用户的年龄、性别;广告的类别、样式等
-
统计特征:用户在特定时间范围 (如过去 7d、 3d、 12h、1h 等) 对当前广告的特定的维度 (如特定类别、特定位置、特定广告主等) 的广告进行了特定操作 (如点击、浏览等) 的次数;
-
序列特征:即用户在一段时间内的行为序列,如最近 30 个点击过的广告 / 商品;典型的应用可参考阿里的 DIN
-
-
[[特征筛选]]
-
最简单的做法是删除指定特征,然后重新训练模型并评估,但是这种做法在训练时长较长时开销是比较大的
-
在训练过程中便能得到每个特征的重要性
-
为每个 feature 增加一个 attention unit,如 DIN [[activation unit]] #card
- ,训练过程中通过这个 attention unit 输出的值来衡量每个特征重要性;其假设是对于重要特征,模型能够自动学习出其权重情况
-
embedding weight:#card
- 根据每个 feature 对应的 embedding 的值大小来判断重要性, 常见的有基于 embedding 的 L1 norm,L2 norm 等;其假设是对于重要特征,其对应的 embedding 的值越大,类比 lr,其实 nn 可以近似认为是多个 lr 组成的
-
回到最开始的想法,即删除指定特征,然后重新训练模型并评估,能否在训练过程中便达到这一目的呢?#card
- 其实是可以的,在训练过程中通过 mask 的方式近似将 embedding 全置为 0,近似当做 drop 掉这个特征,然后通过 multi-head 的方式计算这部分 auc 即可。
-
-
-
-
训练
-
模型结构可解释性
-
VC Dimension:#card
- VC Dimension 本质上是在描述数据量大小和模型大小的关系,即模型参数量应该与数据量大小成正比关系,否则容易出现过拟合或欠拟合的问题
-
attention:#card
-
attention 用最直白的话来说就是动态加权,而这也很符合直觉,如每个特征的重要性不一样,应该对重要性高的给予更高的权重;在 NN 模型中,attention 常用在两个地方: embedding 和 hidden unit;
-
embedding 的 attention 策略可参考这篇文章 SENet 双塔模型:在推荐领域召回粗排的应用及其它;
-
而针对 hidden unit 的 attention 则可参考这篇 paper,Learning Hidden Unit Contributions for Unsupervised Acoustic Model Adaptation [[LHUC]]
-
-
-
multitask: multitask 结构有两个常见的用处,#card
-
第一种认为多个 task 之间有关联,联合训练能增加数据量,同时提升效果;
-
第二种则是对于预估值的准确性有要求的场景,如果广告的 ctr、cvr 的预估,往往数据流中混合了多个场景的数据,且每个场景对应的数据的后验不同的,为了保值预估值的准确性,需要将后验值不同的数据分到不同的 head 中
-
-
-
模型训练
-
初始化对效果有影响,而这个问题可以从几个角度去理解,
-
从最优化的角度理解,#card
- 是因为 NN 的优化往往是一个 non-convex 的问题, 如果初始化不好,一开始可能就处于一个不好的位置;
-
从 bp 的角度理解,#card
- 初始化的值过小或过大,容易导致梯度消失会梯度爆炸,关于这部分,deeplearning.ai 上的 Initializing neural networks 讲得比较好了,还辅以实践,推荐读一下。
-
-
优化器 #card
-
训练过程本质上就是个优化问题,通过 bp 过程不断修正初始化的 parameter,从而达到损失函数最小的目标,更详细的描述可以参考 Parameter optimization in neural networks;中间涉及到了各种超参数的选择:如 learning rate、batch size、optimizer 等;
-
其中 optimizer 也有非常多的选择,其中 optimizer 的选择往往又是一个值得考量的地方,关于各类 optimizer 的区别可以参考这篇文章,一个框架看懂优化算法之异同 SGD/AdaGrad/Adam
-
-
损失函数
-
损失函数基本都是通过 MLE 或 MAP 推导出来的,其思想都是假设训练样本都是服从某些分布生成的,而训练的目标是让这些样本的联合概率最大;#card
-
如 mse 的 assumption 是模型预估值与 ground truth 的误差服从正态分布,
-
cross entropy 的 assumption 是预估值服从伯努利分布;
-
而这两个其实也能被统一到 GLM 这个框架下。
-
-
目前在业界更常见的做法是把问题转为分类问题,对应的 loss 即为 cross entropy,而其实一些回归的 loss 也能通过 weighted logistics regression 转化为分类的问题,#card
- 比较经典的就是 youtube 的 Deep Neural Networks for YouTube Recommendations 中 Modeling Expected Watch Time 部分;
-
基于最原始 cross entropy 衍生出来的 loss 主要有两种形式#card
-
reweight, 即对样本进行各种加权, 包括但不限于根据物理含义直接加权 (如观看时长)、通过 importance sampling 等方式推导出来的 loss,其最终形式也是 reweight 的模式
-
auxiliary/regularization, 即在原始的 task 上增加一些辅助任务或正则项,如 center loss 等
-
-
-
-
-
预估纠偏 [[CTR 校准]]
-
[[保序回归]]
-
上面在 loss 中对样本进行 reweight 的方式,会影响正负样本的分布,导致统计意义上预估值的就是有偏的,应对的策略#card
- 可以在训练阶段就进行纠偏,或者在预估值上直接做一个转换,这部分内容可参考这篇文章 Delayed FeedBack In Computational Advertising 的 Fake negative calibration
-
出价 [[bidding]],计算广告相对于推荐最大的不同点
[[冷启动]]
-
利用 meta-network 为冷启动的 item 生成一个 id embedding
-
item 的 meta 信息通过小网络生成 embedding
-
增加一些 [[auxiliary task]] 来训练小网络
-
-
MAML 方法训练模型,让 embedding 更快收敛