PyTorch 深度学习实战 | DIEN 模拟兴趣演化的序列网络
01、实例:DIEN 模拟兴趣演化的序列网络
深度兴趣演化网络(Deep Interest Evolution Network,DIEN)是阿里巴巴团队在 2018 年推出的另一力作,比 DIN 多了一个 Evolution,即演化的概念。
在 DIEN 模型结构上比 DIN 复杂许多,但大家丝毫不用担心,我们将 DIEN 拆解开来详细地说明。首先来看从 DIEN 论文中截下的模型结构图,如图 1 所示。
■ 图 1 DIEN 模型结构全图
这张图初看之下很复杂,但可从简单到难一点点来说明。首先最后输出往前一段的截图如图 2 所示。
■ 图 2 DIEN 模型结构局部图(1)
这部分很简单,是一个 MLP,下面一些箭头表示经过处理的向量。这些向量会经一个拼接层拼接,然后经几个全连接层,全连接层的激活函数可选择 PReLU 或者 Dice。最后用了一个 Softmax(2)表示二分类,当然也可用 Sigmoid 进行二分类任务。
对输出端了解过后,再来看输入端,将输入端的部分放大后截图如图 3 所示。
■ 图 3 DIEN 模型结构局部图(2)
从右往左看,UserProfile Feature 指用户特征,Context Feature 指内容特征,Target Ad 指目标物品,其实这 3 个特征表示的无非是随机初始化一些向量,或者通过特征聚合的方式量化表达各种信息。
DIEN 模型的重点就在图 3 的 user behavior sequence 区域。user behavior sequence 代表用户行为序列,通常利用用户历史交互的物品代替。图 4 展示了这块区域的全貌。
■ 图 4 DIEN 模型结构局部图(3)
这部分是 DIEN 算法的核心:
第一部分: 用户行为序列,是将用户历史交互的物品序列经 Embedding 层初始化物品序列向量准备输入下一层,代码如下:
所以输出的是一个[批次样本数量,序列长度,向量维度]的张量。
第二部分: 兴趣抽取层,是一个 GRU 网络,将上一层的输出在这一层输入。GRU 是 RNN 的一个变种,在 PyTorch 里有现成模型,所以只有以下两行代码。
和 RNN 网络一样,会有两个输出,一个是 outs,是每个 GRU 单元输出向量组成的序列,维度是[批次样本数量,序列长度,向量维度],另一个 h 指的是最后一个 GRU 单元的输出向量。在 DIEN 模型中,目前位置处的 h 并没有作用,而 outs 却有两个作用。一个作用是作为下一层的输入,另一个作用是获取辅助 loss。
什么是辅助 loss,其实 DIEN 网络是一个联合训练任务,最终对目标物品的推荐预测可以产生一个损失函数,暂且称为 Ltarget,而这里可以利用历史物品的标注得到一个辅助损失函数,此处称为 Laux。总的损失函数的计算公式为
其中,α 是辅助损失函数的权重系数,是个超参。DIEN 给出的方法是一个二分类预测,如图 5 所示。
■ 图 5 DIEN 模型结构局部图(4)
历史物品标注指的是用户对对应位置的历史物品交互的情况,通常由 1 和 0 组成,1 表示“感兴趣”,0 则表示“不感兴趣”,如图 5 所示,将 GRU 网络输出的 outs 与历史物品序列的 Embedding 输入一个二分类的预测模型中即可得到辅助损失函数,代码如下:
调整张量形状后做点乘,Sigmoid 激活后与历史序列物品标注做二分类交叉熵损失函数(BCEloss)。
以上是第二部分兴趣抽取层所做的事情,最后来看最关键的第三部分。
第三部分: 兴趣演化层,主要由一个叫作 AUGRU 的网络组成,AUGRU 是在 GRU 的基础上增加了注意力机制。全称叫作 GRU With Attentional Update Gate。AUGRU 的细节结构如图 6 所示。
■ 图 6 AUGRU 单元细节
版权声明: 本文为 InfoQ 作者【TiAmo】的原创文章。
原文链接:【http://xie.infoq.cn/article/251d0aa733368efd37e94db8e】。文章转载请联系作者。
评论