[CTR模型] DIN(Deep Interest Network)模型解读与Deepctr实现

本文深入解析了DIN(Deep Interest Network)模型的基本原理与训练技巧,包括Attention机制的应用、mini-batch aware正则化方法、Dice激活函数以及GAUC评估指标等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本想法

首先说说DIN(Deep Interest Network)到底在干嘛,DIN主基本想法是:利用用户的历史行为序列(下单,点击等)提高推荐物品的点击率。

论文中有这样一幅图:

在这里插入图片描述

图中显示了一个女生的行为序列,被推荐物品是一个女大衣。传统的推荐物品的CTR计算方法是不会区别对待历史行为中的物品与被推荐物品的相关度,也就是下文提到的基础模型。DIN最大的特点是在计算推荐物品的CTR时,考虑历史序列中的物品对当前推荐物品的影响(图中的进度条),也就是Attention机制。这也是阿里将attention机制引入推荐模型的动机。

论文显示介绍了一个通用的基准模型,然后在加入attention机制,得到DIN模型

基准模型

基础模型共享一个类似的嵌入和多层感知机的范式,如下图所示。它由几个部分组成:
在这里插入图片描述

(1)Embedding layer:嵌入层,将输入(高维二进制向量)转换成低维稠密表示。

(2)Pooling layer and Concat layer:常见的池化操作有:sum pooling and average pooling,对嵌入向量列表应用求和/平均操作。因为用户的行为序列一般是不同的,因此可以对所有的Embedding结果进行sum pooling,得到一个固定大小的向量,作为全连接层的输入。

嵌入和池化层将原始的稀疏特征映射到多个固定的长度表示向量。然后将所有向量连接在一起获得实例的整体表示向量。

(3)MLP:多层感知机,完全连接层用于自动学习特征的组合。

(4)Loss:基本模型中使用的目标函数是负对数似然函数,定义如下:
L = − 1 N ∑ ( x , y ) ∈ S ( y l o g p ( x ) + ( 1 − y ) l o g ( 1 − p ( x ) ) ) L = - \frac{1}{N} \sum_{(x,y) \in S}(ylogp(x)+(1-y)log(1-p(x))) L=N1(x,y)S(ylogp(x)+(1y)log(1p(x)))

DIN模型

基本原理

在这里插入图片描述

与基本模型相比,DIN引入了一种新颖的Activation Unit,保留其他结构不变,与base模型基本相同。Activation Unit可以自适应地计算在给定广告A 的情况下用户表示向量 v u \mathbf v_u vu
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 w j e j v_U(A) = f(v_A,e_1,e_2,...,e_H)=\sum_{j=1}^Ha(e_j,v_A)e_j=\sum_{j=1}^Hw_je_j vU(A)=f(vA,e1,e2,...,eH)=j=1Ha(ej,vA)ej=j=1Hwjej
其中, { e 1 , e 2 , … , e H } \{e_1,e_2,\dots,e_H\} { e1,e2,,eH} 是用户u的历史行为嵌入向量(历史序列长度为H),a(.)是Activation Unit的输出权重,此处的权重不需要进行softmax归一化,理由如下:

在t恤和手机两个候选广告中,t恤激活了大部分属于衣服的历史行为,衣服可能会比手机获得更大的权重值(更高的兴趣强度)。传统的注意力方法通过对a(·)的输出进行softmax归一化而失去了数值尺度上的分辨率。

v U v_U vU是代表用户行为的embedding向量, v A v_A vA 是候选广告商品的embedding向量, e i e_i ei是用户u的第i次行为的embedding向量,没有引入注意力机制的基准模型中, v U v_U

### DIN 模型工作原理 DIN (Deep Interest Network) 是一种专门用于点击率预测的任务,旨在通过引入注意力机制来增强用户历史行为当前候选物品之间的关联性。该模型能够动态调整不同商品对于最终决策的影响程度,从而提高CTR预估精度。 #### 用户兴趣建模 为了更好地捕捉用户的个性化偏好,在DIN框架下,每一个用户的历史交互记录都会被表示成一系列向量形式的行为序列。当面对一个新的待推荐项时,系统会计算这个新项目跟过去各个已知项目的相似度得分,并据此重新加权组合得到一个综合的兴趣表达[^1]。 ```python import tensorflow as tf from deepctr.layers import DNN, PredictionLayer from deepctr.feature_column import build_input_features, get_linear_logit, input_from_feature_columns ``` #### Attention Mechanism 核心在于attention层的设计,其作用是在给定目标item的情况下,自动聚焦于那些最能代表用户当前需求的历史事件上。具体来说: - **Query**: 当前展示的商品特征; - **Key & Value**: 来自用户过往浏览过的其他商品的信息; 两者之间通过内积或其他方式衡量匹配强度,进而决定哪些记忆片段应该获得更高的关注分数[^2]。 ```python class Attention(tf.keras.layers.Layer): def __init__(self, att_hidden_units=(80, 40), activation='dice', weight_normalization=True, **kwargs): self.att_hidden_units = att_hidden_units super().__init__(**kwargs) def build(self, input_shape): assert isinstance(input_shape, list) and len(input_shape)==2 query_size = int(input_shape[0][-1]) key_size = int(input_shape[1][-1]) hidden_units = [query_size + key_size] + list(self.att_hidden_units) self.fc_layers = [] for i in range(len(hidden_units)-1): layer = Dense(units=hidden_units[i+1], use_bias=False, kernel_initializer=tf.initializers.glorot_uniform()) self.fc_layers.append(layer) self.dense_final = Dense(1,use_bias=False,kernel_initializer=tf.initializers.glorot_uniform()) def call(self, inputs, training=None,**kwargs): queries, keys = inputs # ...省略部分代码... ``` #### 特殊组件应用 除了上述提到的基础架构外,DIN还引入了一些创新性的技术手段来优化性能表现,比如采用Dice激活函数替代传统的ReLU,以及实施mini-batch aware regularization策略防止过拟合现象的发生[^3]。 ```python def dice(_x, axis=-1, epsilon=0.000000001, name=''): alphas = tf.get_variable('alpha'+name, _x.get_shape()[-1], initializer=tf.constant_initializer(0.0), dtype=_x.dtype) input_shape = list(range(len(_x.get_shape().as_list()))) reduction_axes = input_shape[:axis]+input_shape[axis+1:] mean,_variance = tf.nn.moments(_x,reduction_axes) std = tf.sqrt(_variance + epsilon) x_normed = (_x-mean)/std p = tf.sigmoid(x_normed) return alphas * (1.0-p)*_x+p*_x ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值