深度学习CTR预估的基本方法和缺陷
基于深度学习CTR预估的基本方法
基于深度学习的CTR预测被广泛的应用,这些方法的基本思想是类似的:将大规模的稀疏特征以分组(group-wise manner )的方式映射到低纬度的嵌入向量(embedding vectors),再进一步转换为固定长向量(fixed-length vectors),最后拼接到一起给全连接层来学习特征间的非线性关系。该方法与传统的逻辑回归相比,能省去大量特征工程的工作并增强模型能力,通常称之为 Embedding&MLP方法(即embedding加多层神经网络),在CTR预估中非常受欢迎。
深度模型基本CTR预估方法的缺陷
由于用户的兴趣是多样的,但用户特征的表示向量维度有限,也就是说具有多样性的特征被压缩到固定长的向量,从而限制了Embedding&MLP网络的表达能力,而增加向量维度又是不可行的(内存和运算量都无法承载),因此成为了表达用户兴趣多样性的一个瓶颈。
另一方面,当对一个商品做CTR预测时,没必要将一个用户的所有兴趣包括在同一个向量中。例如,一个女性游泳爱好者会大概率点击一个泳镜的商品,主要因为她曾经购买过泳衣而不是因为她之前买过鞋。
深度兴趣网络Deep Interest Network(DIN)被提出来解决这一问题,通过考虑一个用户历史行为的相关性,DIN可以自适应地计算一个用户兴趣的表示向量。通过引入局部激活单元(local activation unit ),DIN注重相关的用户兴趣,通过软搜索(soft-searching )历史行为的相关部分并通过对推荐物品相关的用户兴趣求加权池化来获取。与推荐物品相关度高的行为可以获得更高的激活权重并主导用户兴趣的表示,这就是深度兴趣网络DIN的基本原理。
深度兴趣网络DIN的网络结构介绍
特征提取
在实际的CTR预测中,特征通常是多组(具体的某个特征为一组,如用户性别)且分类(个人信息、用户行为、访问物品、推荐物品等特征)的形式,例如多组特征:[weekday=Friday, gender=Female, visited_cate_ids={Bag,Book}, ad_cate_id=Book],此类特征通常通过编码的方式转化为高纬度稀疏二进制特征。数学上,第组的特征通常表示为:,为第组特征的维度,即表示该组特征有个不同的id。表示特征 的第个属性元素只取0或1,0表示具有该属性,1表示不具有该属性,且。若则为one hot 编码,若则为multi-hot 编码。那么一个实例就可以被表示为:
其中,表示特征数,表示整个特征空间的维度,例如之前说的实例的特征空间可表示为:
基本模型
embedding层
embedding层负责把输入的高纬二进制向量转化为低维的稠密表示向量,对于第个特征组,其对应的特征嵌入字典为:
每一个嵌入向量为对应特征第个属性对应的特征向量,向量的纬度为。如果为one-hot编码,即只取一个属性值,那么的表示特征为
如果为multi-hot编码,且对应的集合为,那么的表示特征为
pooling层和concat层:
由于不同用户的行为不同,对于multi-hot编码的情况, 的表示特征维度是不同的,而全链接神经网络只能处理定长维度的输入,最常用的方法是通过平均或者求和池化层(所有表示特征对应的每一个向量对应元素位置求平均或者求和)来处理得到一个定长的表示特征向量:
以这种方式,所有的分组特征均被映射为定长的表示向量,随后这些表示向量连接(concat)成一个定长的表示向量代表这个实例的全连接层输入。
MLP
表示向量输入到MLP,MLP通常使用全连接网络,也有一些相关结构上的优化,这不是本文要重点介绍的。
损失函数
损失函数为典型的交叉熵函数:
为训练集合,为网络输入,为label,为网络输出,表示被点击的概率,整个base网络结构如下
深度兴趣网络结构
如上表,我们首先看下物品推荐模型中常用的特征,其中用户行为特征(User Behavior Features)是非常重要的,在模型化用户的兴趣中起着决定性作用,然而对于一个用户,其行为的表示向量是相同的,不会因为推荐商品的不同而发生变化,而由于表示向量是一个定长向量,无法存储用户的多样性信息。考虑到之前买泳镜的例子,与推荐商品相关的用户行为应该在此商品CTR的预测中起到最重要的作用和权重。因此,与之前用户行为使用同一行为表示向量不同,DIN考虑推荐商品和用户历史行为的相关性,自适应地计算用户兴趣的表示向量,表示向量会随着推荐物品的不同发生变化,其网络结构如下图:
可以看到,DIN增加了一个局部的激活单元,激活单元被用于用户行为特征向量计算,根据具体推荐商品自适应计算一个加权的池化层求和计算表示特征向量,公式如下:
其中是用户行为嵌入向量的列表, 为推荐商品的嵌入向量。是一个前馈网络,输出作为激活权重,由于输入的是两向量的内积,能够反映出两向量的相关性。也就是说,相关性越强,该向量的权重就越大。这里并不归一化权重使得所有权重和为1,这样一定程度可以避免注意力全部集中在相关性最强的那个商品上。
训练技巧
正则化方法
由于参数过多,传统的正则化方法计算量极大,根本无法接受,因此引入了一种更加轻量级的正则化方法:
其原理很简单,由于正则化主要的参数是内嵌字典,因此正则化的时候只计算实例对应的内嵌字典里的属性向量,这样就大大降低了运算量,使得正则化可以实现。
自适应激活函数
自适应激活函数是传统PReLU激活函数的一个改进,会根据每个batch数据的均质和方差调整