经典论文阅读(二)--DIN:深度兴趣网络

2023-10-29 04:40

本文主要是介绍经典论文阅读(二)--DIN:深度兴趣网络,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DIN(Deep Interest Network)是由阿里妈妈精准定向广告算法团队在KDD2018提出的针对电商场景深入理解用户兴趣的预估模型,也可适用于其他场景。

主要贡献:

  1. 指出了使用固定长度的向量来表达用户多样性的兴趣的局限性,设计了新颖的Deep Intrest Network,它引入了局部激活单元(local activation unit)来自适应地从给定广告的历史行为中学习用户兴趣的表达。
  2. 开发了两种技术来训练工业级深度网络:i) mini-batch aware的正则化,避免了在NN的巨量参数上计算正则。ii) 一个数据自适应的激活函数(Dice),在泛化推广PReLU过程中考虑到了输入数据的分布。
  3. 在公开和阿里的数据集上做了深入的实验,验证了DIN和训练技术的有效性。并公开了代码。

一、背景

1. Motivation

现有的深度CTR预估模型都可以归结为Embedding&MLP的范式:首先通过embedding layer将大规模的稀疏特征投影为低维连续的embedding vector,然后将这些向量concatate后输入到一个全连接网络中,计算其最终的预估目标。Embedding&MLP模型利用一个固定的向量 V u V_u Vu去表达用户就会成为模型表达用户多样兴趣的瓶颈。此固定用户向量 V u V_u Vu的维度限制了整体模型解空间的秩, 而向量的维度受计算力以及泛化性的限制不可能无限制的扩充。
实际上当我们要预测一个User V u V_u Vu对一个目标Item I t I_t It 的点击率,我们可能并不需要 V u V_u Vu表达用户的所有兴趣,我们只需要表达其和 I t I_t It相关的兴趣。
Motivated by this, 提出了DIN模型捕捉针对不同商品时用户不同的兴趣状态,并用一个根据不同预估商品目标动态变换的 V u V_u Vu来表达用户与之相关的兴趣。

DIN方法基于对用户历史行为数据的两个观察:

  • 1、多样性,一个用户可以对多种品类的东西感兴趣;
  • 2、局部激活,只有一部分的历史数据对目前的点击预测有帮助,比如系统向用户推荐泳镜时会和用户点击过的泳衣产生关联,但是跟用户买的薯片、书籍等就关系不大。

于是,DIN设计了一个attention结构,对用户的历史数据和待估算的广告之间部分匹配,从而得到一个权重值,用来进行embedding间的加权求和。

2. 相关工作

LS-PLM和FM模型可以看作是一类只有一个隐藏层的网络,首先在稀疏的输入采用embedding层,然后利用专门设计的transformation函数来做target fitting,以此来捕获特征之间的组合关系。
PNN尝试通过在embedding层之后引入一个product乘积层来捕捉高阶的特征交互。
DeepFM利用一个因子机作为Wide&Deep中的"Wide"模块,从而不需要人工特征工程。
总之整体结构都是embedding层和MLP的组合,我们的基模型采用类似的方式。

神经机器翻译(NMT)对所有的译文使用一个加权求和来获得期望的释义,并且只专注于生成下一个目标单词的相关信息。最近,在搜索广告的上下文信息上应用Attention机制,与NMT类似,对model text使用RNN,然后学习一个全局的隐向量来帮助把’attention’集中在每个query的关键词上。

DIN设计了一个局部激活单元(Local Activation Unit)来对相关的用户行为做软搜索,并使用一个加权求和的Pooling来获得用户对给定广告的兴趣的自适应表达。

DIN提出Adaptive regularizaion来防止过拟合,效果显著。此外,引入dice activation function进一步加强了模型的表达效果。

二、系统详解

4.1 特征表示

在这里插入图片描述

multi-hot编码包含了丰富的用户兴趣信息,注意不需要组合特征。

4.2 Base模型(Embedding&MLP)

在这里插入图片描述

嵌入层:
输入one-hot和multi-hot的特征向量,转化为低维稠密向量。

池化层和Concat层:
不同用户有不同的行为编号,multi-hot后的行为特征向量 t i t_i ti中的非零数字各有不同,使得相应的embedding向量各有不同。由于全连接层只能处理固定长度的输入,获取固定长度向量的常规操作就是:
通过一个pooling层将embedding向量转换成固定长度的向量:
       e i = p o o l i n g ( e i 1 , e i 2 , . . . e i k ) ( 1 ) {\bf e}_i = pooling({\bf e}_{i_1},{\bf e}_{i_2},...{\bf e}_{i_k}) \quad\qquad\qquad (1) ei=pooling(ei1,ei2,...eik)(1)

基础模型通常使用sum pooling计算用户embedding; DIN通过使用weighted sum pooling计算用户embedding。
注:DIN中使用的是weighted-sum,其实就是加权的sum-pooling,权重经过一个activation unit计算得到。

然后把固定长度的向量表示连接起来,就得到了overall的向量表示。

**MLP: ** 使用全连接层来自动地学习特征组合。

**Loss: ** 目标函数是负的对数似然函数:
       L = − 1 N ∑ ( x , y ) ∈ S ( y l o g p ( x ) + ( 1 − y ) l o g ( 1 − p ( x ) ) ) , ( 2 ) L=-\dfrac{1}{N}\sum\limits_{(x,y)\in S}(ylogp(x)+(1-y)log(1-p(x))), \qquad\quad (2) L=N1(x,y)S(ylogp(x)+(1y)log(1p(x))),(2)
其中,S是大小为N的训练集,x是网络的输入,y属于{0,1}是label,p(x)是网络softmax层后输出的预估概率值。

4.3 DIN的结构

Base模型的固定长度向量表示,忽略了候选广告的不同,每个用户的向量是固定的。为了达到要求,简单地扩展embedding向量的维度将会严重增加学习的参数个数,而且容易过拟合。
DIN模型的结构如图所示:

在这里插入图片描述

DIN通过一个兴趣激活模块(Activation Unit),用预估目标Candidate ADs的信息去激活用户的历史点击商品,以此提取用户与当前预估目标相关的兴趣。权重高的历史行为表明这部分兴趣和当前广告相关,权重低的则是和广告无关的“兴趣噪声”。我们通过将激活的商品和激活权重相乘,然后累加起来作为当前预估目标ADs相关的兴趣状态表达。 最后我们将这相关的用户兴趣表达、用户静态特征和上下文相关特征,以及ad相关的特征拼接起来,输入到后续的多层DNN网络,最后预测得到用户对当前目标ADs的点击概率。

加入Activation Unit之后,用户的兴趣表示计算如下:
     v U ( A ) = f ( v A , e 1 , e 2 , . . , e H ) = ∑ j = 1 H a ( e j , v A ) e j = ∑ j = 1 H ω j e j {\bf v}_U (A) =f({\bf v}_A,e_1,e_2,..,e_H)=\sum\limits_{j=1}^{H}a(e_j, {\bf v}_A)e_j = \sum\limits_{j=1}^{H}\omega_je_j vU(A)=f(vA,e1,e2,..,eH)=j=1Ha(ej,vA)ej=j=1Hωjej
其中,{e1,e2,…eH}是长度为H的用户U的用户行为embedding vector, v A {\bf v}_A vA是广告A的embedding vector,
这样, v U ( A ) {\bf v}_U (A) vU(A)的值随着广告的不同而变化(向量长度为H)。如图右上角所示,外积(Out Product)函数 a ( ⋅ ) a(\cdot) a()是一个输出为激活权重的前馈神经网络,把用户行为的embedding和广告的embedding向量这两部分输入,加上它们的out product喂给一个随后的网络,是一种显而易见的关联性建模方法。

对每个兴趣表示赋予不同的权值,这个权值是由用户的兴趣和待估算的广告进行匹配计算得到的,也就是 a ( ⋅ ) a(\cdot) a()所学习到的。这就是本文引入注意力机制的核心点。

Activation Unit实现Attention机制,对Local Activation建模;
Pooling(weighted sum)对Diversity建模(见Base Model)。

We have tried LSTM to model user historical behavior data in the sequential manner. But it shows no improvement. 尝试对用户历史行为数据使用LSTM进行时序方式的预测,并没有得到改善。

三、训练技术

5.1 Mini-batch Aware Regularization

过拟合是模型训练中的很容易出现的问题。

通常的做法是加入L1、L2防止过拟合,但这种正则方式对于工业级CTR数据不适用,结合其稀疏性及上亿级的参数,以L2正则化为例,需要计算每个mini-batch下所有参数的L2-norm,参数上升至亿级之后计算量太大,不可接受。

用户数据符合长尾定律(long-tail law),也就是说很多的feature id只出现了几次,而一小部分feature id出现很多次。这在训练过程中增加了很多噪声,并且加重了过拟合。直接去掉出现次数比较少的feature id会导致模型更容易过拟合,而且阈值作为一个新的超参数,需要大量的实验来选择。

DIN提出了高效的Mini-batch aware正则化,只计算mini-batch中非零项的L2-norm。
     L 2 ( W ) = ∥ W ∥ 2 2 = ∑ j = 1 K ∥ w j ∥ 2 2 = ∑ ( x , y ) ∈ S ∑ j = 1 K I ( x j ≠ 0 ) n j ∥ w j ∥ 2 2 , ( 4 ) L_2(W)=\|W\|_2^2=\sum\limits_{j=1}^{K}\|w_j\|_2^2=\sum\limits_{(x,y)\in S}\sum\limits_{j=1}^{K}\dfrac{I(x_j\neq 0)}{n_j}\|w_j\|_2^2, \quad\qquad\quad (4) L2(W)=W22=j=1Kwj22=(x,y)Sj=1KnjI(xj=0)wj22,(4)

其中 w j w_j wj是第j个embedding vector,指示函数 I ( x j ≠ 0 ) I(x_j\neq 0) I(xj=0)表示x是否有特征id j, n j n_j nj表示在所有样本中特征id J出现的次数。在mini-batch aware方式中,等式4可以转换成等式5,近似为下面的等式6:
     L 2 ( W ) ≈ ∑ j = 1 K ∑ m = 1 B a m j n j ∥ w j ∥ 2 2 . ( 6 ) L_2(W)\approx \sum\limits_{j=1}^{K}\sum\limits_{m=1}^{B}\dfrac{a_{mj}}{n_j}\|w_j\|_2^2 . \quad\qquad (6) L2(W)j=1Km=1Bnjamjwj22.(6)

第m个mini-batch的梯度w.r.t 特征j的embedding weights就是:
在这里插入图片描述
其中 B m B_m Bm表示第m轮mini-batch, a m j = m a x x , y ∈ B m I ( x j ≠ 0 ) a_mj=max_{x,y \in B_m}I(x_j\neq 0) amj=maxx,yBmI(xj=0)表示在mini-batch 中至少一个实例具有特征id j j j w j w_j wj表示第j个embedding vector。

5.2 Data Adaptive Activation Function

DIN的论文中,我们还对激活函数做了改进,提出了黑魔法DICE激活函数
目前应用的比较广的激活函数ReLU和PReLU的计算过程可以描述为:
     { s i f s > 0 α s i f s ≤ 0. = p ( s ) ⋅ s + ( 1 − p ( s ) ) ⋅ α s \left\{ \begin{array}{lr} s \qquad if \,\, s \gt 0 \\ \alpha s \quad\,\, if \,\, s \leq 0. \end{array} \right. \quad = p(s)\cdot s + (1 - p(s))\cdot \alpha s {sifs>0αsifs0.=p(s)s+(1p(s))αs

我们把P(s)称为控制函数,这个控制函数其实就是一个整流器,可以看到无论是PReLU还是ReLU的控制函数都是一个阶跃函数,其变化点在s = 0处,意味着面对不同的输入这个变化点是不变的。实际上神经元的输出分布是不同的, 面对不同的数据分布采用同样的策略可能是不合理的,因此在我们提出的Dice激活函数中我们改进了这个控制函数,让它根据数据的分布来调整,这里我们选择了统计神经元输出的均值和方差来描述数据的分布:
在这里插入图片描述
控制函数:
在这里插入图片描述

5.3 Metrics and Result

使用了一种“An variation of user weighted AUC” 用于度量用户间order,通过平均每个用户的AUC,公式如图:
在这里插入图片描述
引入了RelaImpr metric 去度量模型的相对提升度。
在数据集上的实验表明:

在这里插入图片描述
DIN可以自适应得到用户兴趣的不同表示,极大提升了模型的表达能力;此外,DIN引入了Dice进一步提升了模型表现。

Ref:
[1] 论文发表在这里
[2] github官方wiki

这篇关于经典论文阅读(二)--DIN:深度兴趣网络的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/298285

相关文章

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

Spring Boot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)

《SpringBoot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)》:本文主要介绍SpringBoot拦截器Interceptor与过滤器Filter深度解析... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实

MyBatis分页插件PageHelper深度解析与实践指南

《MyBatis分页插件PageHelper深度解析与实践指南》在数据库操作中,分页查询是最常见的需求之一,传统的分页方式通常有两种内存分页和SQL分页,MyBatis作为优秀的ORM框架,本身并未提... 目录1. 为什么需要分页插件?2. PageHelper简介3. PageHelper集成与配置3.

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子