推荐系统 之 AFM和DIN
(文章已补全)
感觉已经落下好多进度了,要马上赶上来才行。后面还有好多书没有看0 0
这篇文章的两个模型都是来自于引入了attention机制而产生的,再NFM模型中,不同域的特征Embediing向量经过特征交叉池化层的交叉,将各个交叉特征向量进行了 sum_pooling 操作(这里后面会解释为嘛子叫这个),输入最后由多层神经网络组成的输出层,问题关键在于这个sum_pooling操作,相当于一视同仁地对待所有交叉特征,不考虑不同特征对结果的影响程度,事实上这样子会消解了大量有价值的信息。
这时候注意力机制就派上用场了,它基于假设-不同的交叉特征对于结果的影响程度。用树上的例子来说明了就是,对于一个男性用户是否过买一款键盘的可能性,性别是男&&购买历史包含鼠标的交叉特征 比 性别是男&&用户年龄是30的教程特征重要得多得多得多,所以我们应该将更多的注意力放在前面的特征上。
1. AFM
先来给出模型架构:
我们可以发现,AFM的模型结构和NFM是非常相似的,唯一的区别就是NFM的BI-Interaction层变成了Pair-Wise Interation层 以及 后面接了一个attention net才到输出层。
下面就这主要两大不同来展开:
1.1 Embedding Layer
这层和NFM的操作保持一致,都是Onehot后将不为0的特征 乘上 它自己对应的隐向量给输出出来,所以就有了对应的 V几*X几 的出现了
1.2 Pair-wise Interaction Layer
这一层的操作和NFM其实大差不差,唯一的区别我们可以这么总结:我们在 NFM
中提出的Bi-Interaction
池化操作可以视为在 Pairwise Interaction Layer
上使用 sum
池化而来:
我们回忆一下NFM这一层的操作:得到从Embedding Layer 放进来的 V几*X几 后,就对每一个特征两两做一个特征交叉,交叉的操作是对应向量的元素相乘,所以也因为是这个操作而被称为特征迟化。做完了两两交叉后,交叉出个K维向量,我们对这么多个向量进行对应位置的累加,最后输出一个(单个)K维向量,再把这个向量送进DNN
然后AFM和NFM的区别来了,AFM这里也做特征交叉,但是不做最后的累加操作,也就是我们得到个K维向量就完事了:
1.3 Attention based Pooling Layer
对不同的特征交互向量 在将它们压缩为单个表示时 根据对预测结果的影响程度 给其加上不同权重。也就是对应于上面结构图里面,将 PW layer的输出导进 attention net里面,输出每个交叉特征的权重,然后这个权重再乘上 PW layer的输出,最后做一个求和,都累加起来
其中,是针对特征的attention sorce(注意力分数),就是表达了这个特征的重要性。对于从未在训练数据中同时出现的特征,无法估计它们交互的注意力分数。为了解决这个泛化问题,就采用多层感知机进一步参数化这个注意力分数,这个就是注意力网络。
这个网络的主要结构是这样:(一个简单的单全连接层加softmax输出层的结构)
其中:W 和 h 和 b 都是网络的参数,W和b是网络全连接层的参数,而 h 是全连接层到softmax层的参数。
通过softmax之后, 这是一个0-1之间的数值了。注意力网络与整个模型一起参与反向传播过程, 得到最终的权重参数。
1.4 Output
基于注意力的池化层的输出是一个k维向量,该向量是所有特征交互向量根据重要性程度进行了区分了之后的一个聚合效果,然后我们将其映射到最终的k维的预测得分(prediction score
)向量中。所以AFM的总体公式如下:
这里的究竟是啥玩意儿呀?
DIN明天写!今晚要做CM的作业了
2.1 DIN
(因为项老师那本书给这个模型的描述真的非常简单,所以我就上网搜刮群众的智慧进行学习了,主要是专哥的博客为主!)
这个模型非常,因为是阿里巴巴开发的首次考虑用户历史行为(用户的兴趣方向)与目标的相关性来自适应地进行广告推荐的算法,已经落地实测非常ok了。书上还用了一句话来形容就是之前的模型都非常学术界,然后这个算法相当于以业务为驱动对之前的旧模型进行改良优化的一个存在。
DIN的亮点主要有以下的几个:
DIN的牛逼之处都是归功于在工业环境下,我们得到了大量的用户历史行为信息,他所有的一切都是非常注重于用户的历史行为特征(譬如买过什么,浏览过什么)去进行的。
1. DIN 引入了局部激活单元,从而自适应地根据目标广告从用户历史行为中学习用户兴趣方向。
2. 蕴含了两种新的模型训练技术,极大地提高的模型的精准度以及缩短了模型的训练时间。
2.1 旧模型的不良之处
Deep Crossing
、Wide & Deep
、 通过用复杂的 MLP
网络替代了变换函数来扩展 LS-PLM
和 FM
,极大地增强了模型容量。
PNN
试图通过在 embedding layer
之后引入 product layer
来捕获高阶特征交互。
DeepFM
在 Wide & Deep
中使用一个 factorization machine: FM
作为 wide
部分,从而无需特征工程。
以上都是的网络可以总结为:大量稀疏特征先经过embedding层, 转成低维稠密的,然后进行拼接,最后喂入到多层神经网络中去进行高阶的特征交叉。所以这就会引出一个问题,这个问题其实上一个网络AFM里面讲过,就是特征交叉固然是好的,但是并不是所有的特征交叉都是游泳的。还是用那个买过鼠标的男人,对键盘的广告明显要比买奶粉的广告的点击率要高呀!
也就是一句话来说:无法表达用户广泛的兴趣了,如果可以表达出来,那讲道理就是根据用户的兴趣进行特征交叉,而不是所有的特征都交叉
2.2 背景
专业名词,什么叫召回,什么叫排序!
召回(mathcing)
:通过协同过滤等方法生成与访问用户相关的候选广告列表。
排序(ranking):预测每个目标广告的点击率,然后选择排名靠前的广告。
说真的,看了那本书这么久我还真的没有对这两个名词有了解过,真的是大无语了(自己粗心略过了这么重要的内容)。
为什么要介绍这个呢,就是阿里就是通过用户一系列的历史行为对所有的广告进行召回,得到候选广告列表,并且通过排序(计算)得出哪个广告最合适展示给这个用户!
2.3 特征表示
我们的推荐系统中使用的所有特征大概有四种:
- 用户画像特征
User Profile Features
:包括用户基础画像如年龄、性别等。 - 用户行为特征
User Behavior Features
:包括用户历史访问的商品信息(如商品id
、店铺id
、商品类目id
等)。该特征通常是multi-hot encoding
向量,包含丰富的用户兴趣信息。 - 广告特征
Ad Features
:包括广告的商品id
、店铺id
、商品类目id
等。 - 上下文特征
Context Features
:包括访问时间等。
在CTR预估任务中,大多数据都会采用特征域去对每一个特征进行一个比较大范围的概括,而且他们都是离散的方式去表达的,譬如说
{ weekday=Friday, gender=Female, visited_cate_ids={Bag,Book}, ad_cate_id=Book }
对于某一个组的特征,他们都是只有其中一个数据不为0的。那么我们用Onehot编码进行转换,转换成一个高维的稀疏特征。例如weekday,gender,ad_cate_id
对于某一组特征,他们不单单只有一种取值,譬如在用户行为特征(用户的历史购买信息)里面,我们有很多商品,买了A,B,C,D,此时我们不能用Onehot对编码了,要改用multi hot去做编码。
然后,我们对所有转化后的向量进行一个拼接,最后,我们会得到这个样子的特征:
这里面仅仅是做一个简单简单的特征拼接,并没有做特征交叉。
2.4 Base Model
什么是Base Model(基模型)呢?就是大多数流行的模型结构所采用的方式
主要是由 Embedding Layer, Pooling Layer, Contact Layer,MLP组成的。
2.4.1 Embedding Layer
这里的Embedding Layer就是在之前FM,FMM,AFM里面都解释过了,就是onehot转换变成01向量之后,再乘每个元素对应的向量,最终只会保留 一个非零 的特征向量下来。
然后对于multihot的向量,也就是会有 多个非零 的特征向量下来。
2.4.2 Pooling Layer
pooling层的作用是将用户的历史行为embedding这个最终变成一个定长的向量,因为每个用户历史购买的商品数是不一样的, 也就是1的个数不一致。因为要接到网络里面,那网络的输入肯定是定长的嘛。具体的公式大概是:
i表示第几个用书历史数据,k表示用户购买过的历史商品数量,也就是对应Embedding的数量
2.4.3 Contact Layer
concat layer层的作用就是拼接了,就是把这所有的特征embedding向量,如果再有连续特征的话也算上,从特征维度拼接整合,作为MLP的输入。
2.4.4 MLP
就是普通的全连接,用来做高维的特征交互
2.4.5 Loss
由于点击预测是一个二分类的问题。所以这里的损失函数用对负的对数斯然:
2.5 DIN
BaseModel 通过聚合用户行为上所有的Embedding向量来获得用户兴趣的固定长度的向量。这样子会的话对于预测当前广告点击率,并不是所有历史商品都有用,综合所有的商品信息反而会增加一些噪声性的信息,已经没法再看出到底用户历史行为中的哪个商品与当前商品比较相关,也就是丢失了历史行为中各个商品对当前预测的重要性程度。其次,对于给定的用户,无论广告是什么,该向量都保持不变。这样子维度有限的用户向量将成为表达用户多样化兴趣的瓶颈。
所以改进的方法就是加大Embedding的维度,但是当我们一加大维度,计算量就立马蹭蹭蹭地上涨,在点击率预测要求响应速度这么快的要求中,计算量上涨是不太能接受的。
于是针对第一个问题:就改用之前说的attention机制,候选广告和用户的历史行为之间进行兴趣值的计算,让模型更关注于当前与广告有更大联系的用户历史行为了
针对第二个问题:引入了一种全新设计的局部激活单元,自适应地计算用户兴趣向量,这个向量会因为广告的不同而维度也会发生变化
下面来说DIN的模型结构:
其中每一个激活单元都是一个前馈神经网络,网络的输入一边是用户行为特征,一边是广告特征,他们两都是Embedding向量,经过两元素的外积操作后得到一个新向量后,与原两个(用户和广告)Embedding向量们一同连接,作为网络的输入,最后通过单神经元的输出层生成注意力得分,具体的公式:
其中:
就是候选广告的Embedding向量, 是用户的第i次行为对应的Embedding向量,这里的用户行为就是浏览商品/店铺
就是说的激活单元,也就是这个前馈神经网络
这个 就是用户针对广告A的兴趣表达向量,它随着不同的广告而发生变化。
这里的前馈网络的输出看起来像一个权重,但其实将他们累加后并不是等于1,每一个权重相当于做softmax之前的东西,这个是为了保留用户的兴趣强度(也就是没有做归一化)
2.6 训练技巧
牛逼的地方来了!
2.6.1 Mini-Batch Aware
过拟合是训练工业级深度网络的关键挑战。当添加细粒度特征时,例如维度为 6
亿的 goods_id
特征(包括用户 visited_goods_ids
特征、广告 goods_id
特征),如果没有正则化,则在训练的第一个 epoch
之后,模型性能迅速下降,如下图所示的深绿色线所示。
将传统的正则化方法,如 L2
正则化和 L1
正则化,直接应用于具有稀疏输入和数亿参数的网络是不切实际的。
以 L2
正则化为例,在没有正则化的场景中,只需要更新每个 mini-batch
中出现的非零稀疏特征的参数。
然而,当添加 L2
正则化时,其实每个mini-batch的样本特征是非常稀疏的,它需要在每个 mini-batch
对所有参数计算 L2
范数,这导致计算量非常大,并且在参数扩展到数亿时是不可接受的。
于是作者提出了一种方法:它只计算每个 mini-batch
中出现的稀疏特征的参数的 L2
范数
就是第k个Embedding向量。
表示第k个特征取值不为0
是当前第k个特征不为0的样本个数
我们把上面的思想转换成 mini-bacth aware的方式
也即是我们的计算范围缩小到一个Batch里面了
然后作者继续优化了那个计算起来也是耗时间的操作
作者用 去代替, 也就是在各个样本中出现最多的那个特征出现的次数
2.6.2 数据自适应激活函数(Data Adaptive Activation Function)
DIN用了一个别致的激活函数,这个激活函数放在的注意力的那个网络里面了。
其中 是要学习的参数
但是PReLU采用一个值为0的硬矫正点,当每个层的输入遵循不同的分布时,这可能不适合,于是设计了一个新的自适应激活函数叫做Dice:
具体公式:
这么一看就非常熟悉啊,就是sigmod的表达方式,这里的 和是每个mini-batch里面样本的均值和方差。这样就可以根据数据的分布进行自适应,这样会更加的灵活且合理了。
DICE可以看作是PRelu的一个泛化,这个泛化具体表现在根据输入的数据的分布做一个自适应的调整。并且可以更加平滑地控制激活的值,不像PRelu那样,一下子就上去了。
当均值 且 的时候,Dice就会退化为PRelu了。
推荐系统 之 AFM和DIN相关推荐
- AI上推荐 之 AFM与DIN模型(当推荐系统遇上了注意力机制)
1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产 ...
- 注意力机制在推荐模型中的应用——AFM、DIN、DIEN
"注意力机制"来源于人类最自然的选择性注意的习惯.最典型的例子是用户在浏览网页时,会选择性地注意页面的特定区域,忽视其他区域.正是基于这样的现象,在建模过程中考虑注意力机制对预测结 ...
- 推荐系统之AFM代码详解
AFM 重点:在NFM中,特征向量进行两两交叉之后,直接进行sum pooling,将二阶交叉向量进行等权求和处理.但是直觉上来说,不同的交叉特征应该有着不同的重要性.不重要的交叉特征应该降低其权重, ...
- 推荐系统9---AFM与DIN模型(推荐系统遇上注意力机制)
1,前言 AFM(Attentional Factorization Machines):FM模型的增强变体,这个其实算是NFM的一个延伸,在NFM模型的特征交叉层与池化层中间加了一个注意力网络,对于 ...
- 推荐系统之DIN模型(注意力机制对业务的理解)
前言 前面讲过了AFM,AFM是对注意力机制的一个浅显的尝试,并没有基于业务上进行设计的一个模型.在工业领域例如在线广告上点击率(Click-through rate,CTR)预测是一个很重要的任务. ...
- 推荐系统(7)——推荐算法4(深度学习时代来临:模型结构上的突破)ACF、DIN、DIEN、DRN
文章目录 1 ACF,DIN--注意力机制在推荐上的应用 1.1 AFM--NFM的交叉特征+Attention得分 1.2 DIN--淘系广告商品推荐的业务角度 1.3 注意力机制对于推荐系统的启发 ...
- 深度推荐模型-DIN
DIN 1.背景 Deep Interest Network(DIIN)是2018年阿里巴巴提出来的模型,该模型基于业务的观察,从实际应用的角度进行改进,相比于之前很多"学术风&qu ...
- 《深度学习推荐系统》读书笔记之推荐系统的进化之路
来源:https://zhuanlan.zhihu.com/ p/138446984 作者:一块小蛋糕 编辑:深度传送门 最近读完了王喆老师的新作--<深度学习推荐系统>,拿到书之前,期待 ...
- 机器学习模型在携程海外酒店推荐场景中的应用
导读 互联网企业的核心需求是"增长",移动互联时代下的在线旅游业也不例外.随着大数据.云计算和人工智能等技术的不断进步,通过算法和模型来实现增长已成为核心. 近年来推荐系统迅速崛起 ...
最新文章
- 此上下文中不支持函数定义。请在代码文件中创建函数。_深入解析Python上下文管理器,让你不再迷茫!...
- HDU - 3341 Lost's revenge(AC自动机+状压dp)
- 关于Integer大小比较的问题
- oracle 抽样_深入理解Oracle动态采样
- 根据网页地址获取页面内容
- P1068 分数线划定 洛谷 (C++)(结构体排序)
- java连接mysql抛异常_Java 连接MySQL数据库 插入中文 抛出异常
- 计算机专业马来西亚,去马来西亚读计算机专业如何
- 可重构麦轮全向移动机器人分析(图片版)
- maven配置以及设置国内镜像
- 世界五大著名黑客,你都认识吗?
- 英语二作文模板及范文
- 网页换肤,模块换肤,jQuery的Cookie插件使用(转)
- 用黑莓手机来使电脑上网
- 【10大基础算法】线性查找算法-NO5
- 网页服务器修复,网页被劫持 网页被劫持后跳转发布网修复方法
- 画江湖之独门暗器指针
- 排序算法之归并排序 ( C语言版 )
- Cross Stage Partial Network(CSPNet)
- 微信小程序实战 (WXSS:小程序版CSS、WXS:小程序版JavaScript)