论文解读 DIN: Deep Interest Network for Click-Through Rate Prediction

news/2024/5/19 23:20:13 标签: tensorflow, 推荐算法

摘要

论文地址:https://arxiv.org/abs/1706.06978

DIN是阿里发表在 KDD2018 上的一篇关于对用户行为序列建模的一篇论文。论文出了一种新型模型: 深度兴趣网络(DIN)。通过设计一个局部激活单元来自适应地学习用户对某一广告历史行为的兴趣表征,从而解决了这一难题。这种表征向量会随不同的广告而变化,从而大大提高了模型的表达能力。此外,论文还提出了迷你批量感知正则化和数据自适应激活函数,它们可以帮助训练具有数亿个参数的工业深度网络。DIN 目前已成功应用于阿里巴巴的在线展示广告系统,为主要流量提供服务。

所以这篇论文注意就是以下几个创新点:

  1. 局部激活单元,可从给定广告的历史行为中自适应地学习用户兴趣的表示。
  2. 迷你批量感知正则化器,它可以节省参数数量巨大的深度网络正则化的繁重计算,并有助于避免过拟合;
  3. 数据自适应激活函数,它通过考虑输入的分布来泛化 PReLU,并显示出良好的性能。

DEEP INTEREST NETWORK

在这里插入图片描述

论文当中使用了注意力方法来建模短期局部的兴趣。
论文当中的注意力方法与传统注意力方法不同的是,注意力权重 ∑ i w i = 1 \sum_{i}w_{i}= 1 iwi=1 的约束条件被放宽,目的是保留用户兴趣的强度。

也就是说,放弃了对输出进行 softmax 归一化。取而代之的是,权重的大小被视为被激活用户兴趣强度的近似值。传统的注意力方法通过对输出进行归一化处理,失去了对候选商品的注意力分辨率的体现。

Mini-batch Aware Regularization

迷你批次的正则化主要是用来处理过拟合的问题,如果没有正则,模型的表现会在第一个 epoch之后下降非常快。

论文提出了 Mini-batch Aware Regularization,它只计算每个迷你批量中出现的稀疏特征参数的 L2 值,并使计算成为可能。事实上,正是 embedding 字典贡献了 CTR 网络的大部分参数,并造成了繁重计算的困难。

W \mathbf{W} W 表示所有 embedding 的参数,施加在参数上的 L2 正则表达式可以表示为:

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 , L_2(\mathbf{W})=\|\mathbf{W}\|_2^2=\sum_{j=1}^K\|\mathbf{w}_j\|_2^2=\sum_{(x,y)\in\mathcal{S}}\sum_{j=1}^K\frac{I(\boldsymbol{x}_j\neq0)}{\boldsymbol{n}_j}\|\boldsymbol{w}_j\|_2^2, L2(W)=W22=j=1Kwj22=(x,y)Sj=1KnjI(xj=0)wj22,

如果以 mini-batch 的形式,公式又可以写成如下形式:

L 2 ( W ) = ∑ j = 1 K ∑ m = 1 B ∑ ( x , y ) ∈ B m I ( x j ≠ 0 ) n j ∥ w j ∥ 2 2 L_2(\mathbf{W})=\sum_{j=1}^K\sum_{m=1}^B\sum_{(x,y)\in\mathcal{B}_m}\frac{I(x_j\neq0)}{n_j}\|w_j\|_2^2 L2(W)=j=1Km=1B(x,y)BmnjI(xj=0)wj22

那么,在每个 mini-batch 的的参数 L2 正则化后的梯度变化为:

w j ← w j − η [ 1 ∣ B m ∣ ∑ ( x , y ) ∈ B m ∂ L ( p ( x ) , y ) ∂ w j + λ α _ m j n j w j ] w_j\leftarrow w_j-\eta\left[\frac1{|B_m|}\sum_{(x,y)\in\mathcal{B}_m}\frac{\partial L(p(x),y)}{\partial w_j}+\lambda\frac{\alpha\_{mj}}{n_j}w_j\right] wjwjη Bm1(x,y)BmwjL(p(x),y)+λnjα_mjwj

Data Adaptive Activation Function

论文认为 PReLU 取值为 0 的硬校正点,这可能不适合各层输入分布不同的情况。考虑到这一点,论文设计了一种新的数据自适应激活函数 Dice.

f ( s ) = p ( s ) ⋅ s + ( 1 − p ( s ) ) ⋅ α s , p ( s ) = 1 1 + e − s − E [ s ] V a r [ s ] + ϵ f(s)=p(s)\cdot s+(1-p(s))\cdot\alpha s,\quad p(s)=\frac1{1+e^{-\frac{s-E[s]}{\sqrt{Var[s]+\epsilon}}}} f(s)=p(s)s+(1p(s))αs,p(s)=1+eVar[s]+ϵ sE[s]1

Dice 也是 0-1 之间的激活函数,在 0-1 之间平滑过渡,如下图所示

在这里插入图片描述

Dice 可以被看作是 PReLu 的泛化。Dice 的主要思想是根据输入数据的分布自适应地调整,其值被设定为输入数据的平均值。此外,Dice 还能控制两个通道之间的平滑切换。当 E ( s ) = 0 E(s) = 0 E(s)=0 V a r [ s ] = 0 Var[s] = 0 Var[s]=0 时,Dice 退化为 PReLU。

评估指标

论文里面还介绍了几种比较有趣的评估指标
一种是加权 AUC,它通过对用户的 AUC 取平均值来衡量用用户内部商品顺序的好坏,并被证明与显示广告系统的在线性能更为相关。

这里有点像是 GAUC 的概念。

A U C = ∑ i = 1 n i m p r e s s i o n i × A U C i ∑ i = 1 n i m p r e s s i o n i \mathrm{AUC}=\frac{\sum_{i=1}^n impression_i\times\mathrm{AUC}_i}{\sum_{i=1}^n impression_i} AUC=i=1nimpressionii=1nimpressioni×AUCi

另外一个就是相关曝光指标 RelaImpr,用来衡量模型的提升程度,这个看看就好,直接与 a u c = 0.5 auc=0.5 auc=0.5 相比较也差不多。

R e l a I m p r = ( A U C ( measured model) − 0.5 A U C ( b a s e   m o d e l ) − 0.5 − 1 ) × 100 % . RelaI\boldsymbol{mpr}=\left(\frac{\mathrm{AUC}(\text{measured model)}-0.5}{\mathrm{AUC}(\mathrm{base~model})-0.5}-1\right)\times100\%. RelaImpr=(AUC(base model)0.5AUC(measured model)0.51)×100%.

相关代码

Dice 实现的 python 代码:


import tensorflow as tf

def dice(_x, axis=-1, epsilon=0.000000001, name=''):
  with tf.variable_scope(name, reuse=tf.AUTO_REUSE):
    alphas = tf.get_variable('alpha'+name, _x.get_shape()[-1],
                         initializer=tf.constant_initializer(0.0),
                         dtype=tf.float32)
    input_shape = list(_x.get_shape())

    reduction_axes = list(range(len(input_shape)))
    del reduction_axes[axis]
    broadcast_shape = [1] * len(input_shape)
    broadcast_shape[axis] = input_shape[axis]

  # case: train mode (uses stats of the current batch)
  mean = tf.reduce_mean(_x, axis=reduction_axes)
  brodcast_mean = tf.reshape(mean, broadcast_shape)
  std = tf.reduce_mean(tf.square(_x - brodcast_mean) + epsilon, axis=reduction_axes)
  std = tf.sqrt(std)
  brodcast_std = tf.reshape(std, broadcast_shape)
  x_normed = (_x - brodcast_mean) / (brodcast_std + epsilon)
  # x_normed = tf.layers.batch_normalization(_x, center=False, scale=False)
  x_p = tf.sigmoid(x_normed)


  return alphas * (1.0 - x_p) * _x + x_p * _x

def parametric_relu(_x):
  alphas = tf.get_variable('alpha', _x.get_shape()[-1],
                       initializer=tf.constant_initializer(0.0),
                       dtype=tf.float32)
  pos = tf.nn.relu(_x)
  neg = alphas * (_x - abs(_x)) * 0.5

  return pos + neg

http://www.niftyadmin.cn/n/5453362.html

相关文章

华为云服务器租用价格_云服务器优惠活动_2024年新版报价

2024年华为云服务器租用价格表,云服务器优惠价格35元一年,配置为1核2G1M带宽HECS云服务器、L实例-2核2G3M配置46元1年、4核16G10M华为云服务器24元一个月、2核4G5M服务器158元一年,3年1010元、华为云香港服务器99元一年、增强型C7云服务器4核…

【XSS攻击】前端 - 原生input框输入v-html页面展示如何防止xss攻击

【背景】在我们用原生input框输出使用v-html的情况下,很容易忽略掉xss攻击,那么xss攻击有什么坏处呢? 【介绍xss攻击】 XSS攻击又称为跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行。XSS是一种经常出现在Web应用…

fs.1.10 ON CENTOS7 docker镜像制作

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 centos7 docker上编译安装fs1.10版本的流程记录。 环境 docker engine:Version 24.0.6 centos docker:7 freeswitch:v1.10.7 手动模式 centos准备 docker hub拉取centos镜像。…

javascript基础代码练习之超速罚款

<!DOCTYPE html> <html> <head><meta charset"UTF-8" /><title>Nauji</title> </head> <body><script>function punish(speed) {const limit 120;if (speed < limit) {return 未超速;} else if (speed &l…

雷卯推荐多种系列汽车级TVS供您选择

1. 车规级TVS的应用 2.车规级TVS系列表格如下 3.方案推荐 12V汽车电源浪涌保护方案 方案优点&#xff1a;用于满足前装汽车的ISO7637-2 5A5BA测试&#xff0c;可采用单独大功率的TVS或PTCTVS的组合方案&#xff0c;满足ISO10605-2&#xff0c; 等级4&#xff0c;接触放电15K…

软件设计模式之备忘录模式

备忘录模式是一种行为型设计模式&#xff0c;用于捕获对象的内部状态并在需要时将其恢复。在软件开发中&#xff0c;备忘录模式允许我们在不破坏封装性的前提下&#xff0c;捕获对象的状态并将其保存在外部&#xff0c;从而可以在需要时将对象恢复到先前的状态。这种模式通常用…

python --dejavu音频指纹识别

Dejavu是一个用于音频指纹识别的Python库&#xff0c;它能够将音频文件转换成独特的指纹&#xff0c;然后通过比对数据库中已知音频的指纹&#xff0c;识别出输入音频的来源或相似音频。Dejavu库支持多种类型的音频文件&#xff0c;包括MP3、WAV等&#xff0c;同时也支持在不同…

C++引用学习day2

思维导图 定义一个矩形类&#xff08;Rectangle&#xff09;&#xff0c;包含私有成员&#xff1a;长(length)、宽&#xff08;width&#xff09;, 定义成员函数&#xff1a; 设置长度&#xff1a;void set_l(int l) 设置宽度&#xff1a;void set_w(int w) 获取长度&#…