转:https://blog.csdn.net/yujianmin1990/article/details/80712219
前言
阿里的商业广告CTR预测,使用了最新的Attention机制,我们来看一下是怎么用的,在相关的推荐工作中借鉴下经验。
为什么用Attention
为什么要用attention?
1) 业务中的发现,用户的历史行为数据,并不都对每一次的点击做贡献,而是仅仅有一部分在起作用。这就很像attention了,告知某些点上是与当前的状态最相关的。
举个栗子:一个爱好游泳的人,购买过泳衣,也购买过书籍,那么这次的广告里面,泳镜就更容易受到泳衣购买历史的影响。文中提到的“local activation”的用户特性。
2) 在应用其他的算法时,发现会将好多Embedding的特征,直接做累加等combinear等操作,简单粗暴有效,却会丢失好多信息。如果能在这里做些工作,会有更好的效果。
思考:在广告里面是这样的,那么在图文中是不是也有这样的特性。人的基本行为特点是不变的,也具有这样的特性仅部分历史行为对当前的点击是贡献最大的,而其他的可能就没啥贡献或者较少。实时反馈,是实时的attention,只不过偏近视,目光不长远。
怎么用
上个图,比较下一般的模型与DIN模型的差别,就知道在哪里具体使用Attention了。
attention在这里的 实际意义是:每个Ad,都有一堆历史行为对其产生attention的影响分,这些attention分值与历史行为共同对这个Ad下的用户表示做加权。(可以将行为结构信息保留下来,并且提供了注意焦点)将上图中改进的地方展开,如下:
用户在某个广告下的Embedding表示 Vu(Va)Vu(Va)是广告的Embedding表示。
其他亮点
Evaluate Metric
GAUC: generation of AUC
单纯地用AUC评估,会带有用户偏差,若是将用户信息考虑进来则会更稳定更可信。
Dice Activation
一般的激活函数已经不能满足需求了,比如PReLU,这帮子人造了个强依赖数据的激活函数,根据数据动态地调整rectified-function。
其中PReLU是: f(s)={sass>0s≤0f(s)={ss>0ass≤0。
Regularization
稀疏输入,为什么会overfitting呢?这个跟数据分布有关系,互联网时代的数据特点,超长尾头部重,头重(小比例的特征频繁出现)容易过拟合,长尾(大比例的特征低频出现)则容易带来噪声,不好学。当增加细粒度的特征时,也极其容易由于细粒度的样本过于密集而带来负面效果。怎么办呢?在这里根据样本在当前batch内出现的频次做了正则约束。LL
思考
- 图文推荐也可以使用Attention来专门处理推荐时的part-contribution问题,补充实时反馈的缺陷。
- 大规模的稀疏数据,需要特别小心处理长尾头重问题,这里使用的改进版正则和激活是值得借鉴的。
- 离线评估的GAUC更稳定可信,再上线A/B。