网站首页 > 技术文章 正文
[转]https://running-bad-ai.github.io/2018/08/02/DIN/
摘要
深度兴趣网络(DIN,Deep Interest Network):
该方法由阿里妈妈的精准定向检索及基础算法团队提出, 针对电子商务领域(e-commerce industry), 充分利用/挖掘用户历史行为数据中的信息来提高CTR预估的性能.
- contributions/key words:
1 2 3 4 -diversity -local activation (attention) -mini-batch aware regularizer -data adaptive activation function (dice)
- old methods:
1 2 3 4 5 6 7 常见的算法, 比如 Wide&Deep, DeepFM等, 通常流程是: Sparse Features -> Embedding Vector (-> pooling layer) -> MLPs -> Sigmoid -> Output 通过Embedding层, 将高维离散特征转换为固定长度的连续特征, 然后通过多个全联接层, 学习非线性, 最后通过一个sigmoid函数转化为0-1值, 代表点击的概率 优点:通过神经网络可以拟合高阶的非线性关系, 同时减少了人工特征的工作量. 缺点:在对用户历史行为数据进行处理时, 每个用户的历史点击个数是不相等的, 包含了许多兴趣信息, 我们要把它们编码成一个固定长的向量, 需要做pooling (sum or average), 会损失信息
- DIN:
1 2 Diversity:用户在浏览电商网站的过程中显示出的兴趣是十分多样性的. Local activation: 由于用户兴趣的多样性, 只有部分历史数据会影响到当次推荐的物品是否被点击, 而不是所有的历史记录.
- Features:
1 2 只有用户行为特征是multi-hot, 即多值离散. 没有人工组合特征, 会在dnn中自己学习.
- Architecture:
1 2 Activation Unit实现Attention机制, 对Local Activation建模. Pooling(weighted sum)对Diversity建模, 直接sum体现不出差异多样性, 加权可以.
1 2 3 4 5 6 7 8 9 其中: Vi表示behavior id的嵌入向量, 比如good_id, shop_id等; Vu是所有behavior ids的加权和, 表示的是用户兴趣; Va是候选广告的嵌入向量; wi是候选广告影响着每个behavior id的权重, 也就是Local Activation; wi通过Activation Unit计算得出, 这一块用函数去拟合, 表示为g(Vi,Va). 在实际实现中, 权重用激活函数Dice的输出来表示, 输入是Vi和Va. 优点:针对不同的候选广告, 用户的兴趣向量是不同的, 而不像单纯的sum pooling兴趣永远是不变的.
- DICE: data adaptive activation function:
类似relu + BN 的组合:
1 2 3 4 5 6 优点: 1.将数据做标准化估计, 统一所有维度的量纲, 也是个非常重要的技巧, 有点类似BN. --在训练过程中, 分别是当次batch的均值和方差. --在Test时, 这里的E[s]和Var[s]用的是moving_average. 2.可以发现当E[s]=0, Var[s]=0 时, Dice几乎等同于PRELU. 3.? is a small constant which is set to be 10?8 in our practice.
- GAUC: 计算了用户级别的AUC, 在将其按展示次数进行加权, 消除了用户偏差对模型评价的影响, 更准确地描述了模型对于每个用户的表现效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 AUC意义: AUC值越大, 当前的分类算法越有可能将正样本排在负样本前面, 即能够更好的分类. 首先要肯定的是, AUC是要分用户看的, 我们的模型的预测结果, 只要能够保证对每个用户来说, 他想要的结果排在前面就好了. Example 1: 假设有两个用户A和B, 每个用户都有10个商品, 10个商品中有5个是正样本. 我们分别用TA, TB, FA, FB来表示两个用户的正样本和负样本. 假设模型预测的结果大小排序依次为TA, FA, TB, FB 1)如果把两个用户的结果混起来看, AUC并不是很高, 因为有5个正样本排在了后面. 2)但是分开看的话, 每个用户的正样本都排在了负样本之前, AUC应该是1.显然, 分开看更容易体现模型的效果, 这样消除了用户本身的差异. Example 2: 还有一种差异是用户的展示次数或者点击数, 这种差异同样需要消除. 如果一个用户有1个正样本, 10个负样本; 另一个用户有5个正样本, 50个负样本. 那么GAUC的计算, 不仅将每个用户的AUC分开计算, 同时根据用户的展示数或者点击数来对每个用户的AUC进行加权处理, 进一步消除了用户偏差对模型的影响. 通过实验证明, GAUC确实是一个更加合理的评价指标.
- mini-batch aware Regularization (MBA):
1 2 3 4 5 6 7 8 9 10 11 场景: CTR中输入稀疏而且维度高, 通常的做法是加入L1、L2、Dropout等防止过拟合. --但是论文中尝试后效果都不是很好:用户数据符合长尾定律(long-tail law), 也就是说很多的feature id只出现了几次, 而一小部分feature id出现很多次. --这在训练过程中增加了很多噪声, 并且加重了过拟合. 对于这个问题一个简单的处理办法就是: --直接去掉出现次数比较少的feature id.但是这样就人为的丢掉了一些信息, 导致模型更加容易过拟合. --同时阈值的设定作为一个新的超参数, 也是需要大量的实验来选择的. MBA的优点: 1.频率自适应 2.每次迭代只更新非0部分权重,减少计算量
原理:
- 效果:
1 2 利用候选的广告, 反向激活历史兴趣, 不同的历史兴趣爱好对于当前候选广告的权重不同, 做到了local activation. --可以看到, 对于候选的广告是一件衣服的时候, 用户历史行为中跟衣服相关性越高的在attention后获得的权重越高(即越能描述用户对这个广告的兴趣), 而非衣服的部分, 权重较低.
1 2 3 以上面年轻妈妈为例, 选取9个类别各100条商品, 作为candidate ad输入模型, 得到每件商品的embedding vector以及预测得分. 进行可视化如上图, 红色表示得分最高, 蓝色表示得分最低,可以发现: --用户的兴趣分布有多个峰.且DIN有较好的聚类效果.
- summary:
1 2 3 4 5 6 7 1.用户有多个兴趣爱好, 即访问了多个good_id, shop_id.为了降低维度并使得商品店铺间的算术运算有意义, 我们先对其进行Embedding嵌入. 那么我们如何对用户多种多样的兴趣建模? --使用Pooling对Embedding Vector求和或者求平均.同时这也解决了不同用户输入长度不同的问题, 得到了一个固定长度的向量.这个向量就是用户表示, 是用户兴趣的代表. 2.但是, 直接求sum或average(相当于平均权重, 没有侧重)损失了很多信息. --所以稍加改进, 针对不同的behavior赋予不同的权重, 这个权重是由用户历史behavior和当前候选广告共同决定的.这就是Attention机制, 实现了Local Activation. 3.DIN使用activation unit来捕获local activation的特征, 使用weighted sum pooling来实现diversity结构. 4.在模型学习优化上, DIN提出了Dice激活函数、MBA(自适应正则化) , 显著的提升了模型性能与收敛速度.
- Reference:
1 2 3 4 5 6 Github: https://github.com/running-Bad-AI/DeepInterestNetwork Deep Interest Network for Click-Through Rate Prediction Learning piece-wise linear models from large scale data for ad click prediction https://www.leiphone.com/news/201707/t0AT4sIgyWS2QWVU.html https://www.leiphone.com/news/201706/pDfOAoMYp8mqNKEC.html 盖坤的分享视频 http://www.itdks.com/dakalive/detail/3166
猜你喜欢
- 2024-10-17 找不到中文语音预训练模型?中文版 Wav2vec 2.0和HuBERT来了
- 2024-10-17 数据分析师必备的五类Excel数据分析函数,超全总结,易收藏
- 2024-10-17 Excel查找和引用函数(二) excel查找和引用函数有哪些
- 2024-10-17 经典面试题目「回溯算法」求组合总和(二)
- 2024-10-17 蚂蚁金服核心技术:百亿特征实时推荐算法揭秘
- 2024-10-17 优化算法效率的思路,以均线为例 优化算法的方法
- 2024-10-17 内存用量1/20,速度加快80倍,QQ提全新BERT蒸馏框架,未来将开源
- 2024-10-17 一文读懂C++ 异步编程 c++异步调用
- 2024-10-17 遍地开花的 Attention,你真的懂吗?
- 2024-10-17 程序员必学算法「动态规划」:最大子序和
你 发表评论:
欢迎- 11-19零基础学习!数据分析分类模型「支持向量机」
- 11-19机器学习 | 算法笔记(三)- 支持向量机算法以及代码实现
- 11-19我以前一直没有真正理解支持向量机,直到我画了一张图
- 11-19研一小姑娘分享机器学习之SVM支持向量机
- 11-19[机器学习] sklearn支持向量机
- 11-19支持向量机
- 11-19初探支持向量机:用大白话解释、原理详解、Python实现
- 11-19支持向量机的核函数
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)