DIEN-序列模型与推荐系统的结合

一:DIEN的进化动机

1,序列信息加强了最近行为对下次行为预测的影响。
2,序列模型能够学习到购买趋势的信息
如果放弃了序列信息,则模型学习时间和趋势这类信息的能力就会变弱,推荐模型就仍是基于用户所有购买历史的综合推荐,而不是针对下一次购买的推荐,显然从业务角度讲,后者才是推荐系统真正的目标。

二:DIEN的模型结构

从整体上看,模型仍然是输入层+embedding层+链接层+全链接神经网络层+输出层。模型整体结构图如下
DIEN-序列模型与推荐系统的结合_第1张图片
我们分解来看:第一部分:MLP部分
1,输出部分,就是一个典型的mlp,输出采用softmax做了二分类,其也可以用sigmoid做二分类。
隐层神经网络采用prelu(又称leakrelu)激活函数,dice为阿里巴巴团队为该模型定义的激活函数,可以prelu互换,输入首先进行了拼接,扁平化。图像如下
DIEN-序列模型与推荐系统的结合_第2张图片
Prelu激活函数图像
DIEN-序列模型与推荐系统的结合_第3张图片
DICE函数,有了上面的prelu函数,我们可以定义DICE的激活函数:
设p(x)为输入值x大于零的概率,如下图
DIEN-序列模型与推荐系统的结合_第4张图片
那么输出f(x)的期望值就可以写成:
f(x) = p(x) * x +(1-p(x)) * αx
在dice中,又将p(x)定义如下:
在这里插入图片描述
其中E(x)表示样本的均值,Var(x)为样本的方差,ε为噪声因子,sigmoid输出为(0,1),其算法内部计算过程其实就是batch normalization(批量归一化)算法,简称BN,其计算公式为:
在这里插入图片描述
所以DICE激活函数可写成:
在这里插入图片描述
将DICE写成这种简便模式,主要是为了引入BN这个基础操作,这样做主要有三个优点,也就是BN的优点:
1,减缓过拟合
2,在训练过程中将数据平滑,从而加快训练的速度。
3,减缓因数据不平滑造成的梯度消失。

第二部分:模型输入 行为序列层,主要作用就是把原始的id类行为序列层转化成embedding 行为序列。

DIEN-序列模型与推荐系统的结合_第5张图片
DIEN-序列模型与推荐系统的结合_第6张图片
userprofile feature 是指用户特征,context feature 是指内容特征,target AD就是目标广告,这三个表示的是一些随机初始化的向量,或者通过特征聚合的方式来量化表达各种信息。
蓝色部分是指用户行为序列,就是将用户历史交互的物品序列经embedding层初始化,所以输出为:
【批量样本数量x 序列长度 x 向量维度】的张量。pytorch 代码如下
在这里插入图片描述
第三:黄色部分,兴趣抽取层: 主要作用是模拟用户兴趣迁移的过程,抽取用户兴趣。
DIEN-序列模型与推荐系统的结合_第7张图片
该层就是一个GRU网络结构,不懂的同学可以去参考下鄙人的该文章,这里我们只截取gru 的计算公式:
DIEN-序列模型与推荐系统的结合_第8张图片
模型同rnn一样,会有两个输出,一个是outs,指的是每一个GRU单元输出的向量组成的序列,另一个就是h,就是最后一个GRU单元输出的向量。在dien 模型中,outs会有两个作用,一个是作为下一层的输入,另一个是获取辅助loss,而dien中此刻的h并没有什么作用。
所谓的辅助loss,就是利用历史物品标注得到一个辅助损失函数,所以模型的整个损失函数计算公式为:
在这里插入图片描述
那么辅助loss是怎么计算的呢,在dien中,给出的方法是一个二分类预测模型,如下图,其实就是将embedding(正负embedding,有负采样)过后的历史物品标注作为输入,(用户对对应时刻历史物品 的交互情况,通常由0和1组成,0代表不感兴趣,1代表感兴趣)与GRU输出向量outs作为标注做点积操作,结果为0或者1,形成一个二分类模型。
DIEN-序列模型与推荐系统的结合_第9张图片
我们将用户下一时刻的真实行为e(t+1)作为正例,负采样得到的e(t+1)作为负例,分别与抽取出来的h(t)结合(向量内积操作),输入到设计的辅助网络中,得到预测结果,并通过一个logloss 计算一个辅助损失。
DIEN-序列模型与推荐系统的结合_第10张图片
第四部分:红色部分,兴趣演化层 :在兴趣抽取层的基础之上加上兴趣演化层是为了更有针对性的模拟与目标广告相关的兴趣进化路径
结构: 主要通过AUGRU网络组成,AUGRU是在GRU的基础之上注意力机制,全称是GRU with attentinal update gatc ,细节结构如下图:
DIEN-序列模型与推荐系统的结合_第11张图片
首先我们知道agru是在gru的基础之上增加了注意力机制,其实就是在GRU更新门的基础之上增加了一个α来表示每个历史物品序列中每个物品与目标物品的注意力权重,从而生成新的带有注意力权重的更新门,进而计算出最终的输出。GRU和AUGRU的计算过程如下:
每个GRU单元计算过程:
DIEN-序列模型与推荐系统的结合_第12张图片
每个AGRU的计算过程:
DIEN-序列模型与推荐系统的结合_第13张图片
可以看到AGRU只是在gru的基础之上多了第四行用注意力权重去更新更新门的操作,问题在于我们如何计算得到这里注意力权重α。αt表示的是,当前时刻下的兴趣序列特征ht与当前候选广告的关联程度。
DIEN-序列模型与推荐系统的结合_第14张图片
DIEN模型里面给出α的计算方式如下:
DIEN-序列模型与推荐系统的结合_第15张图片
其中etar是指目标物品向量,也就是输入部分的target AD,Wa是一个线性变换矩阵,it 就是 兴趣抽取层每个gru的输出outs,维度是i x e.
那么在αt计算出来过后,怎么和第二层的GRU结合起来模拟兴趣的演化呢,这里我们需要讲一下dien中注意力得分与gru结合的三种方式,也就是AUGRU的演化过程。
1,AIGRU(GRU with attentional input)
计算公式:
It = h(t) * αt,
也就是将注意力得分与抽取出来的兴趣状态进行对应元素相乘,再将结果It作为GRU的输入,这样做有一个很大的缺点,就是即使It为0(抽取的特征与目标广告之间的关联程度为0),但最终的候选值h(t)仍然会受到此次计算的影响而改变,因为h(t)依旧可以继续运算,从而影响兴趣演化层的学习,也就是说,即使非常不相关的兴趣也会影响我们兴趣演化的层的学习。而我们需要的是,当抽取的特征与目标广告之间关联程度不想关时,我们需要模型保持上一时刻的候选状态h(t-1).,而不是让他受到改变。如下图。
DIEN-序列模型与推荐系统的结合_第16张图片

2进一步改进AGRU(attention based GRU)
计算公式:
在这里插入图片描述
不难看出,AGRU就是将GRU公式中最后的h(t)公式中的ut(更新门),替换成了αt(注意力得分),这样做的好处,就是当αt为0时候,带入公式,模型的最终隐藏候选状态还是会选用上一时刻h(t-1)的候选状态,如果h(t-1)还是为0,那么就继续沿用上上时刻的状态。这样就解决了AIGRU的缺点,并使AGRU能够保证只关注和当前候选物品相关的兴趣演化过程。
缺点:
αt是一个标量,也就是一个值,而h(t)是一个向量,向量内每个维度表达的内容不一样,重要程度也不一样,如果乘以一个相同的系数αt,不同维度的重要性就忽略了。
3 在进一步改进:AUGRU(GRU with attentional update gate)
计算公式:
DIEN-序列模型与推荐系统的结合_第17张图片
这里的ut就是更新门ut。优点:
1,保留了AGRU的优点,能够让与当前候选广告相关的兴趣合理演化而不受非相关兴趣的影响
2,克服AGRU忽略了兴趣在不同维度上保持重要性的不足,因为公式没有改变更新门的向量维度,依然是向量,依然每个维度可以决定兴趣相应维度的重要性。

你可能感兴趣的:(深度学习,机器学习,推荐系统)