CTR深度学习模型之 DIN(Deep Interest Network) 的理解与例子

DeepCTR——DIN模型部分源码解读 特征构建 首先,最重要的是特征构建的部分,DIN用到了三种类型的特征,SparseFeat,DenseFeat和VarLenSparseFeat。 SparseFeat SparseFeat由类别型特征构建而成,比如性别特征(男、女),这种特征一般采用one-hot编码,但是如果特征里的类别数量特别多,one-hot编码会使数据变得非常稀疏,在深度模型里一般使用embedding技术对特征降维。 ... 阅读详情

在电商领域,每个用户都有丰富的历史行为数据,这些数据具有如下特点:

  1. 多样性(Diversity):用户可能对多种商品感兴趣,例如手机、衣服。

  2. 局部激活(Local Activation):用户是否点击新商品,仅仅取决于历史行为中与新商品相关度高的部分数据。

如何从中捕获特征对CTR预估模型非常重要。论文 《Deep Interest Network for Click-Through Rate Prediction 提出了深度兴趣网络 Deep Interest Network,以下简称 DIN 模型,设计了类似 attention 的网络结构来激活历史行为数据中与候选广告相关度高的行为,即:增大与目标广告相关性高的历史行为权重。

模型解读

基准模型

论文并没有直接讲解DIN模型,而是先介绍了基准模型的结构:

在这里插入图片描述

此模型主要功能是将输入的用户特征、行为特征、候选广告以及上下文特征转换成 embedding,然后将这些 embedding 拼接在一起用几个全连接层完成点击率的预测。这里面有几个需要注意的细节:

1,用户行为序列的长度一般是不同的,所以为了能够将不同序列长度的embedding 向量转换成相同的大小,一种思路是将所有的 embedding 向量进行 sum pooling,即对所有 embedding 向量求和,得到一个固定大小的向量,作为全连接层的输入。

2,直接对行为的 embedding 向量求和,会损失很多信息,即:无法捕捉到候选广告与历史行为信息中的局部相关性。

DIN模型

于是,在论文中又提出了改进后的模型: DIN,网络结构如下图:

在这里插入图片描述

与基准模型相比,最大的区别在于:引入了与 attention 机制功能相似的 Activation Unit 用于根据候选广告计算历史行为的权重。

如果用 { e 1 , e 2 , . . . , e H e_1, e_2, ... , e_H e1​,e2​,...,eH​} 表示用户 U 对 H 个商品行为 embedding 向量, v A v_A vA​ 表示候选广告的向量,那么用户 U 对广告 A 的兴趣向量 v U ( A ) v_U(A) vU​(A) 可以用下面的公式计算:
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=1∑H​a(ej​,vA​)ej​=j=1∑H​wj​ej​
其中, a ( ⋅ ) a(\cdot) a(⋅) 本质上是一个前馈神经网络,用于计算 e j e_j ej​ 的权重 w j w_j wj​。在计算权重时,需要将 e j e_j ej​ 与 v A v_A vA​ 作为下图 Activation Unit 的输入,最终得到的输出就是权值。

在这里插入图片描述

如果历史行为中某个商品 e j e_j ej​ 与候选广告商品 v A v_A vA​ 相似度高,那么在使用 SUM Pooling 计算 v U ( A ) v_U(A) vU​(A) 时,相似度高的商品的权重也应该高一些。从公式可以看出,引入了 Activation Unit 之后,不同的候选广告,用户的兴趣向量也会有所不同。

需要注意的是,与 attention 不同,权值 w 不需要保证的和为1。

训练技巧

Dice 激活函数

PReLU 可以看作是 ReLU 的改版,计算方法为:
f ( s ) = { s      i f s > 0 α s i f s ≤ 0 = p ( s ) ⋅ s + ( 1 − p ( s ) ) ⋅ α s \begin{aligned} f(s) & =\left\{ \begin{array}{l} s \;\;\qquad if\quad s>0 \\ \alpha s \qquad if\quad s \le 0 \end{array} \right. \\ & = p(s) \cdot s + (1-p(s))\cdot\alpha s \end{aligned} f(s)​={sifs>0αsifs≤0​=p(s)⋅s+(1−p(s))⋅αs​
无论是 ReLU 或者是 PReLU 突变点都是0。而论文认为突变点的选择应该依赖于数据,于是基于 PReLU 提出了 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\\ p(s)=\frac{1}{1+e^{-\frac{s-E[s]}{\sqrt{V a r[s]+\epsilon}}}} f(s)=p(s)⋅s+(1−p(s))⋅αsp(s)=1+e−Var[s]+ϵ ​s−E[s]​1​
其中 E [ s ] , V a r [ s ] E[s], Var[s] E[s],Var[s] 分别是每个 mini-batch 数据的均值与方差, ϵ \epsilon ϵ 取 1 0 − 8 10^{-8} 10−8 。于是, p ( s ) p(s) p(s) 函数的图像如下:

在这里插入图片描述

这样的激活函数能够适应不同分布的输入数据,整体表现要优于 PReLU。

自适应正则化

在使用例如 l 2 l_2 l2​ 这样的传统正则化方法时,每一个 mini-batch 正则化项的计算都需要所有的参数的参与,在参数数量庞大的情况下,这个计算消耗太大了。于是论文提出了一种正则化方法,只需要对在每个 mini-batch 中出现的参数进行计算。

回顾 DIN 模型,发现绝大多数参数出现在 embedding 层,令:
W ∈ R D × K W \in R ^{D \times K} W∈RD×K
表示整个 embedding 层的参数,其中 D 是嵌入维度,K 是特征个数。则正则化项的计算公式如下:
L 2 ( W ) ≈ ∑ j = 1 K ∑ m = 1 B α m j n j ∣ ∣ w j ∣ ∣ 2 2 L_2(W) \approx \sum_{j=1}^K \sum_{m=1}^B \frac{\alpha_{mj}}{n_j}||w_j||_2^2 L2​(W)≈j=1∑K​m=1∑B​nj​αmj​​∣∣wj​∣∣22​
其中, α m j \alpha_{mj} αmj​ 表示特征 j 是否出现在 mini-batch 样本 B 中, n j n_j nj​ 表示样本 j 在 B 中的出现次数, w j w_j wj​ 则是第 j 个嵌入向量。整个公式的核心思想是出现的频率越大,正则化的强度越小。

GAUC 评估指标

GAUC 是 AUC 的加权平均:
G A U C = ∑ i = 1 n w i × A U C i ∑ i = 1 n w i = ∑ i = 1 n i m p i × A U C i ∑ i = 1 n i m p i \mathrm{GAUC}=\frac{\sum_{i=1}^{n} w_{i} \times \mathrm{AUC}_{i}}{\sum_{i=1}^{n} w_{i}}=\frac{\sum_{i=1}^{n} \mathrm{imp}_{i} \times \mathrm{AUC}_{i}}{\sum_{i=1}^{n} \mathrm{imp}_{i}} GAUC=∑i=1n​wi​∑i=1n​wi​×AUCi​​=∑i=1n​impi​∑i=1n​impi​×AUCi​​
其中:n 是用户的数量, A U C i AUC_i AUCi​ 表示用户 i i i 所有样本的 AUC, i m p i imp_i impi​ 是用户 i i i 所有样本的个数。AUC 是考虑所有样本的排名,而实际上,我们只要关注给每个用户推荐的广告的排序,因此GAUC更具有指导意义。

模型例子

例子是在 tensorflow2.0 的环境中使用了 deepctr 实现的 DIN 模型,deepctr 安装方式如下:

pip install deepctr[gpu]

在其 github 仓库中提供了一个 demo,其代码以及关键部分的注释如下:

import numpy as np

from deepctr.models import DIN
from deepctr.feature_column import SparseFeat, VarLenSparseFeat, DenseFeat,get_feature_names


def get_xy_fd():
    # 对基础特征进行 embedding
    feature_columns = [SparseFeat('user',vocabulary_size=3,embedding_dim=10),
                        SparseFeat('gender', vocabulary_size=2,embedding_dim=4), 
                        SparseFeat('item_id', vocabulary_size=3,embedding_dim=8), 
                        SparseFeat('cate_id', vocabulary_size=2,embedding_dim=4),
                        DenseFeat('pay_score', 1)]
    
    # 指定历史行为序列对应的特征
    behavior_feature_list = ["item_id", "cate_id"]
    
    # 构造 ['item_id', 'cate_id'] 这两个属性历史序列数据的数据结构: hist_item_id, hist_cate_id
    # 由于历史行为是不定长数据序列,需要用 VarLenSparseFeat 封装起来,并指定序列的最大长度为 4 
    # 注意,对于长度不足4的部分会用0来填充,因此 vocabulary_size 应该在原来的基础上 + 1
    feature_columns += [VarLenSparseFeat(SparseFeat('hist_item_id', vocabulary_size=3 + 1,embedding_dim=8,embedding_name='item_id'), maxlen=4),
                        VarLenSparseFeat(SparseFeat('hist_cate_id', 2 + 1,embedding_dim=2 + 1, embedding_name='cate_id'), maxlen=4)]

    # 基础特征数据
    uid = np.array([0, 1, 2])
    ugender = np.array([0, 1, 0])
    iid = np.array([1, 2, 3])
    cate_id = np.array([1, 2, 2]) 
    pay_score = np.array([0.1, 0.2, 0.3])

    # 构造历史行为序列数据
    # 构造长度为 4 的 item_id 序列,不足的部分用0填充
    hist_iid = np.array([[1, 2, 3, 0], [3, 2, 1, 0], [1, 2, 0, 0]])
    # 构造长度为 4 的 cate_id 序列,不足的部分用0填充
    hist_cate_id = np.array([[1, 2, 2, 0], [2, 2, 1, 0], [1, 2, 0, 0]])
    
    
    # 构造实际的输入数据
    feature_dict = {'user': uid, 'gender': ugender, 'item_id': iid, 'cate_id': cate_id,
                    'hist_item_id': hist_iid, 'hist_cate_id': hist_cate_id, 'pay_score': pay_score}
    x = {name:feature_dict[name] for name in get_feature_names(feature_columns)}
    y = np.array([1, 0, 1])
    return x, y, feature_columns, behavior_feature_list


if __name__ == "__main__":
    x, y, feature_columns, behavior_feature_list = get_xy_fd()
    # 构造 DIN 模型
    model = DIN(dnn_feature_columns=feature_columns, history_feature_list=behavior_feature_list)
    model.compile('adam', 'binary_crossentropy',
                  metrics=['binary_crossentropy'])
    history = model.fit(x, y, verbose=1, epochs=10)

DIN 模型至少需要传入两个参数,一个是 dnn_feature_columns , 用于对所有输入数据进行 embedding;另一个是 history_feature_list,用于指定历史行为序列特征的名字,例如 [“item_id”, “cate_id”]。

要特别注意的地方是:特征 f 的历史行为序列名为 hist_f 。例如要使用 ‘item_id’, ‘cate_id’ 这两个特征的历史行为序列数据,那么在构造输入数据时,其命名应该加上前缀“hist_” ,即 ‘hist_item_id’, ‘hist_cate_id’。

参考链接:

CTR预估–阿里Deep Interest Network

Deep Interest and Evolution Network for CTR

AI算法工程师手册/DIN

推荐系统之DIN代码详解 推荐系统之DIN代码详解 import sys sys.path.insert(0, '..') import numpy as np import torch from torch import nn from deepctr_torch.inputs import (DenseFeat, SparseFeat, VarLenSparseFeat, get_feature_names) from deepctr_torch.models 阅读详情

相关推荐

阿里经典推荐论文《Deep Interest Network for Click-Through Rate Prediction》理解

Zhou G, Zhu X, Song C, et al. Deep interest network for click-through rate prediction[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. ACM, 20...

dreamweaverccc的博客 1182

Deep Interest Network

作者 | 李宁宁 来源 | 机器学习荐货情报局(ID:ML_CIA) 编辑 | Vincent AI 前线导读:Deep Interest Network(DIN) 是盖坤大神领导的阿里妈妈的精准定向检索及基础算法团队,在 2017 年 6 月提出的。它针对 电子商务领域 (e-commerce industry)的 CTR 预估,重点在于 充分利用 / 挖掘用户历史行为数据中的信息。本文将...

zhixiongzhao的博客 891

从Deep Crossing到DIEN:手把手拆解主流深度学习推荐模型(附代码示例)

本文深入解析从Deep Crossing到DIEN的主流深度学习推荐模型,提供详细的代码实现和架构分析。涵盖特征工程自动化、特征交叉演进、注意力机制等核心技术,帮助开发者掌握推荐算法的最新实践,提升推荐系统的效果与性能。

weixin_30363981的博客 337

推荐系统(十一)阿里深度兴趣网络(一):DIN模型(Deep Interest Network)

DIN(Deep Interest Network)模型是阿里妈妈盖坤团队发表在KDD'18上的文章,因为有阿里的光环,因此,这个模型在业界还是比较有名气的,至于最终在其他公司场景下有没有效果,取决于对比的baseline,如果你的baseline足够弱,理论上会有一定效果的提升,当然,如果你的baseline够强,可能一点效果都没有。之前博客介绍的模型都在解决如何有效的学到高阶交叉特征,而DIN的核心思想是把attention机制引入了到用户兴趣建模上。

天泽28的专栏 3万+

ISP模块之色彩增强算法--HSV空间Saturation通道调整

色彩增强不同于彩色图像增强,图像增强的一般处理方式为直方图均衡化等,目的是为了增强图像局部以及整体对比度。而色彩增强的目的是为了使的原有的不饱和的色彩信息变得饱和、丰富起来。对应于Photoshop里面的“色相/饱和度”调节选项里面对饱和度的操作。色彩增强的过程,并不改变原有彩色图像的颜色以及亮度信息。     在我的色彩增强算法模块里面,始终只针对色彩饱和度(Saturation)信息做研究,

松间明月 1万+

大尺寸智能车的CAN驱动控制器制作(一)

本驱动板使用8个半H桥BTS7960驱动,使用CAN接口于车体主控制器通讯,最大承受电压48V 电流20A ,主控为STM32F103VET6,电机控制频率为18KHz,CAN通讯芯片为TJA1042T,全驱动板6-24V宽电压供电,采用24V降5V,5V降3.3V的方案供电,其中经过AMS1117作为降压芯片,可以有效降低主控损毁几率。在这里可以看到555电机相比于其他电机的功率大很多,所以需要大功率的电机驱动,在以往的电机驱动选型中选择了TB6612,L298N等小功率电机驱动。

技术的力量能够改变世界 569

CTR预估之Deep Interest NetWork模型原理详解

本文介绍的Deep Interest NetWork是阿里妈妈盖坤带领的团队2018年8月发表在KDD的Paper,在点击率预估等场景有不错的效果。由于最近团队也准备尝试下该模型,因此提前熟悉下DIN的原理与实现。 引言 点击率预估在搜索、推荐、广告等领域具有很广泛及成功的应用,众多学者和公司也纷纷发表了相关Paper。随着深度学习在计算机视觉,自然语言处理等领域的重大突破,有许多研究将D...

Yummy 8795

ESP32 驱动 SYN6288 语音合成:Arduino IDE 下实现中文数字混合文本的智能播报

本文详细介绍了如何在Arduino IDE环境下使用ESP32驱动SYN6288语音合成模块,实现中文数字混合文本的智能播报。通过硬件选型、开发环境搭建、编码转换原理、命令帧构造及串口通信实战等步骤,帮助开发者快速掌握语音播报技术。文章还提供了混合文本处理技巧和常见问题排查方法,适合智能硬件开发者参考。

weixin_42553471的博客 448

CTR深度学习模型之 DIEN(Deep Interest Evolution Network) 的理解与示例

本文介绍阿里提出的兴趣进化网络(Deep Interest Evolution Network,以下简称DIEN。 前一篇文章介绍的 DIN 模型如下图所示: DIN 直接把用户的某个行为作为用户的兴趣,在实际的电商场景中这并不完全准确。 用户的兴趣受到环境因素与自身因素的影响,会不断的变化。例如用户会在一段时间内关注手机相关的商品,另一段时间内又会关注书籍相关的商品,而手机与书籍之间的关系就比较小了。本文的介绍的 DIEN 模型就是要捕捉用户兴趣的演变过程。DIEN 仍然采用了 attention 机制

VariableX的博客 2491

智能车竞赛走马观碑组:如何高效识别目标板并优化绕行策略(附实战代码)

本文深入探讨了智能车竞赛走马观碑组中,如何构建从图像识别到路径决策的全栈优化方案。针对目标板识别与绕行策略的核心难点,文章详细解析了基于MobileNetV2的高效识别流水线、结合预瞄点与纯追踪算法的平滑路径规划,以及横向与纵向协同控制策略,并提供了实战代码与调试指南,旨在全面提升小车的比赛表现。

o5p6q的博客 884

MIPI D-PHY TX 一致性测试实例解析 Part 03

本文之前,已经讨论了MIPI D-PHY TX的1.3.x和1.4.x的测试项,1.5.x的测试项相对较少,主要是用于时钟和数据通道相关的时序测量

一只豌豆象的博客 5185

【论文笔记】DIN: Deep Interest Network for Click-Through Rate Prediction

本文记录DIN: Deep Interest Network for Click-Through Rate Prediction的学习笔记。DIN将attention机制考虑进了CTR的预估任务中,通过设计一个局部激活单元从用户的历史行为中自适应的学习用户的兴趣。学习过程中尤其注意不同模型的改进方向,改进原因,以及主要的缺点。

机器学习,数据挖掘算法爱好者 2891

Openclaw第3章:进阶部署

本章面向需要在特定环境中稳定运行 OpenClaw 的用户,介绍 Windows、Linux、Docker 以及 Cloudflare Workers 四种进阶部署方式。每种方式各有侧重:Windows 部署适合桌面用户日常使用,Linux 部署适合开发者,Docker 部署适合追求环境隔离的运维场景,Cloudflare Workers 部署则适合希望获得全球边缘网络加速的用户。读者可根据自身环境和需求选择合适的方案,完成本章后可继续阅读第4章了解维护升级流程。

Maynor的博客 1295

推荐系统之DIN模型(注意力机制对业务的理解)

前面讲过了AFM,AFM是对注意力机制的一个浅显的尝试,并没有基于业务上进行设计的一个模型。在工业领域例如在线广告上点击率(Click-through rate,CTR)预测是一个很重要的任务。在每次点击费用(cost-per-click,CPC)的广告系统中,广告按有效价格,即每千个有效成本(effective cost per mille,eCPM)排名,该价格是出价与CTR的乘积,而点击率则需要通过系统预估。因此,CTR预估模型的效果直接影响最终收益,并在广告系统中发挥关键作用。DIN是2018年阿里

qq_38375203的博客 1846

S32K1XX Autosar开发实战|全网独家复现EB MCAL Port/Dio配置、详解引脚分层原理、实现经典跑马灯助力车载IO电控落地

在NXP S32K1XX系列车规MCU的AUTOSAR标准开发体系中,MCAL(微控制器抽象层)是软硬件解耦的核心载体,而Port端口模块与Dio数字IO模块是MCAL最基础、最核心的入门模块,也是车载指示灯、按键检测、继电器驱动、外设硬件启停控制的底层支撑。区别于传统裸机直接操作寄存器的开发方式,AUTOSAR架构采用分层隔离设计,Port负责硬件静态初始化、Dio负责动态电平操控,严格遵循车规级开发规范,杜绝硬件资源冲突、引脚配置混乱等问题。

getusushu的博客 43

Monorepo与pnpm:前端项目管理的完美搭档

pnpm又称 performant npm,翻译过来就是高性能的npm。Monorepo是一种项目开发与管理的策略模式,它代表"单一代码仓库"(Monolithic Repository)。在Monorepo模式中,所有相关的项目和组件都被存储在一个统一的代码仓库中,而不是分散在多个独立的代码仓库中,这些项目之间还可能会有依赖关系。

m0_68271787的博客 2562

【论文泛读】DIN - Deep Interest Network for Click-Through Rate Prediction

DIN多兴趣发现模型分析 用户多兴趣推荐问题引入   假如你对推荐系统有所了解,应该就会知道现行多数模型或者说算法,关注的都是如何去挖掘用户一方面的兴趣,来达到对用户精准的实施推荐的目的。通过文献的阅读我们发现,神经网络模型目前也已经被广泛地应用于各种推荐系统中。但他们都是怎么做的呢?是的,这些基于神经网络的推荐算法通常只会从用户的行为序列中学习到一个用户表征向量(Embedding),但是这个统一的Embedding往往无法反映用户在一段时期内的多种不同的兴趣。举个例子,我们现在假设有一个女性用户A,

JinyuZ1996的博客 884

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

阿里妈妈 Deep Interest Network 论文总结

最近刚刚读了盖坤团队大佬的DIN,收获颇多,在此总结一下 论文名称:Deep Interest Network for Click-Through Rate Prediction 论文地址:Deep Interest Network for Click-Through Rate Prediction DIN提出的背景和目的 2018年8月,盖坤大神提出了Deep Interest Network。阿里认为,目前很火热的Embeddng&MLP类模型中,为了更好的训练模型,阿里认为传统的embed.

chizhonghang的博客 746

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

7.Deep Interest Network for Click-Through Rate Prediction论文详解

一、总述 这是2018年阿里Guorui Zhou等人发表在KDD上的一篇论文。论文提出在CTR任务中,丰富的用户历史行为数据包含了用户多种兴趣,对于不同的候选广告,起作用的用户历史行为数据表示应该不同。所以该论文提出了深度兴趣网络(Deep Interest Network, DIN)来根据指定广告,自适应的建模用户行为数据,进而提升CTR准确率。此外,针对工业界亿万级别的参数量,提出了两项训练深度学习模型的新技术:小批量感知正则(mini-batch aware regularization)和数据自适

zhaozhiwei314的博客 1555

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

DIN(Deep Interest Network):核心思想+源码阅读注释

论文地址: https://arxiv.org/abs/1706.06978 DIN是近年来较为有代表性的一篇广告推荐CTR预估的文章,其中使用的attention机制也为使用序列特征提供了新的思路。本文分析了DIN的核心思想。鉴于DIN源代码的变量命名过于随意,难以理解,这里也提供了部分源代码的注释,仅供参考。 论文分析 核心思想:用户的兴趣是多元化的(diversity),并且对于特定...

weixin_39548654的博客 1739

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

DIN(Deep Interest Network)是由阿里妈妈精准定向广告算法团队在KDD2018提出的针对电商场景深入理解用户兴趣的预估模型,也可适用于其他场景。 主要贡献: 指出了使用固定长度的向量来表达用户多样性的兴趣的局限性,设计了新颖的Deep Intrest Network,它引入了局部激活单元(local activation unit)来自适应地从给定广告的历史行为中学习用户兴趣的表达。 开发了两种技术来训练工业级深度网络:i) mini-batch aware的正则化,避免了在NN的巨

rover 1797

浅析Attention在推荐系统中的应用(2)阿里Deep Interest Network模型

欢迎关注本人公众号: petertalks 目录: 浅析Attention在推荐系统中的应用(1)Attention简介 浅析Attention在推荐系统中的应用(2)阿里Deep Interest Network模型 浅析Attention在推荐系统中的应用(3)AutoInt模型 浅析Attention在推荐系统中的应用(4)Transformer与阿里BST模型 阿里妈妈算...

黑暗之神 780

推荐算法学习笔记--DIN篇

目录模型简介模型结构与分析1.Embedding层2.Pooling层与Concat层3.MLP4.Loss模型搭建与训练 模型简介 DIN(Deep Interest Network)是2018年阿里巴巴基于对业务的观察而提出的模型,应用于阿里巴巴的电商广告推荐业务。不同于以往的深度学习推荐模型前向传播流程(稀疏向量稠密化→拼接离散和连续部分→喂入DNN中进行特征交叉),DIN引入了注意力机制,使得该模型能够基于大量用户历史行为信息,计算历史信息与当前商品的关联,从而对用户是否点击某个商品进行预测,并且能

clshishuaige的博客 1756

DIN与DIEN:从注意力机制到用户兴趣演化建模

在推荐系统与计算广告领域,用户行为序列建模是CTR预估的核心环节。传统方法通过池化将历史行为压缩为固定向量,难以表达用户多样化的兴趣分布。注意力机制的引入使得模型可以根据候选商品动态加权历史行为,从而捕捉兴趣的多峰特性。然而,用户的兴趣并非静止不变,而是随时间持续演化,序列建模如GRU和AUGRU进一步将时间维度融入兴趣表征,实现从“兴趣有哪些”到“兴趣怎么变”的跨越。这些技术在电商推荐、广告排序和视频流推荐等场景中具有广泛价值,能够有效提升点击率预估的准确性与可解释性。本文深入对比DIN与DIEN的模型结

weixin_34212762的博客 283

DIN & DIEN & DSIN 简述

本文系统介绍了三种用户兴趣建模方法: DIN模型通过Attention机制动态筛选与当前预测相关的历史行为(如预测羽绒服时侧重大衣而非吸尘器) DIEN模型引入GRU网络捕捉兴趣的时序演变(如从学生时代的平价消费到职场轻奢偏好的转变) DSIN模型将行为划分为不同Session(如女装/厨具等主题),结合Transformer和Bi-LSTM分别建模Session内关系与会话间演化 三模型形成递进解决方案:DIN解决"用哪些历史行为",DIEN建模"兴趣如何随时间演变",DSIN识别"行为主题分段"。适用场

weixin_40398522的博客 536

搜广推算法岗秋招实战:从LR到DIN,面试高频考点与项目深挖全解析

机器学习是人工智能的核心分支,其核心原理是通过数据训练模型,使其能够自动识别模式并进行预测。在工业界,机器学习的技术价值在于将海量数据转化为商业洞察和自动化决策能力,尤其在搜索、广告和推荐系统(搜广推)领域,它直接驱动了用户体验优化和流量变现。从经典的逻辑回归(LR)到前沿的深度兴趣网络(DIN),模型不断演进以解决特征交叉、用户兴趣动态性等核心问题。本文聚焦于搜广推算法岗的求职实战,深入拆解了包括LR、XGBoost、DIN等在内的高频面试考点,并系统阐述了如何将项目经历打造成技术亮点,为从业者应对全面且

weixin_33736832的博客 395
上一篇: 【面试相关】python实现快速幂取余算法详解
下一篇: CTR深度学习模型之 DIEN(Deep Interest Evolution Network) 的理解与示例
VariableX
博客等级 码龄7年 142粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值