【GCN-CTR】DC-GNN: Decoupled GNN for Improving and Accelerating Large-Scale E-commerce Retrieval WWW22

article/2025/8/5 23:39:41

《DC-GNN: Decoupled Graph Neural Networks for Improving and Accelerating Large-Scale E-commerce Retrieval》(WWW’22)

在工业场景中,数百亿节点和数千亿的边直接端到端的GNN-based CTR模型开销太大,文章把整个GNN框架解耦成三阶段:预训练、聚合、CTR。

但实际上文章是把计算开销前移,将图卷积的计算开销转换成了采样子图的计算开销。

图与数据集

在这里插入图片描述

用Taobao近7天的记录作为数据集,有三类节点:user、query和item,每个节点都有丰富的节点属性:设备、年龄等。

有三类边:query搜索item、用户浏览item、用户搜索query。

一共9亿节点、100亿条边。

方法

在这里插入图片描述

预训练

每个节点先用RW生成 三个 该节点的子图,然后在子图上用GNN encoder对节点进行卷积编码,得到节点的embedding,然后两个预训练任务:

Link Prediction

L l i n k = ∑ ( q , i p ) ∈ E ( − log ⁡ σ ( f s ( q , i p ) ) − ∑ k log ⁡ ( 1 − σ ( f s ( q , i n k ) ) ) ) \mathcal{L}_{l i n k}=\sum_{\left(q, i_{p}\right) \in \mathcal{E}}\left(-\log \sigma\left(f_{s}\left(q, i_{p}\right)\right)-\sum_{k} \log \left(1-\sigma\left(f_{s}\left(q, i_{n}^{k}\right)\right)\right)\right) Llink=(q,ip)E(logσ(fs(q,ip))klog(1σ(fs(q,ink))))

有边连接的是正例,然后采集k个负例,负例用到了难负样本挖掘:

在这里插入图片描述

一种是选择K-hop的节点作为负样本,K可以控制难易程度;一种是在维持图结构不变的情况下,将一个正样本替换成全局采得负样本。

文章认为这两种做法都可以强化GNN更加注意节点的属性学习上,避免GNN过分依赖图结构特征,从而缓解over-smoothing。

Multi-view graph contrastive learning

第二个子图和第三个子图得到的embedding,进行对比学习,同一个节点在两个视图的embedding是正例,不同节点是负例。这里只考虑同一类节点之间计算InfoNCE loss,因此会有三个对比学习loss。

所有的loss加起来是total loss:
L q u e r y = ∑ q 1 ∈ v q − log ⁡ exp ⁡ ( w f s ( q 1 , q 2 ) ) ∑ v ∈ exp ⁡ ( w f s ( q 1 , v 2 ) ) L u s e r = ∑ u 1 ∈ v u , v u ∈ V − log ⁡ exp ⁡ ( w f s ( u 1 , u 2 ) ) ∑ v exp ⁡ ( w f s ( u 1 , v 2 ) ) L a d = ∑ i 1 ∈ v i , v i ∈ V − log ⁡ exp ⁡ ( w f s ( i 1 , i 2 ) ) ∑ v exp ⁡ ( w f s ( i 1 , v 2 ) ) L contra  = L query  + L user  + L a d L total  = L link  + λ 1 L contra  + λ 2 ∥ θ ∥ 2 2 \begin{aligned} \mathcal{L}_{q u e r y}&=\sum_{q_{1} \in v_{q}}-\log \frac{\exp \left(w f_{s}\left(q_{1}, q_{2}\right)\right)}{\sum_{v} \in \exp \left(w f_{s}\left(q_{1}, v_{2}\right)\right)}\\ \mathcal{L}_{u s e r} &=\sum_{\substack{u_{1} \in v_{u}, v_{u} \in \mathcal{V}}}-\log \frac{\exp \left(w f_{s}\left(u_{1}, u_{2}\right)\right)}{\sum_{v} \exp \left(w f_{s}\left(u_{1}, v_{2}\right)\right)} \\ \mathcal{L}_{a d} &=\sum_{\substack{i_{1} \in v_{i}, v_{i} \in \mathcal{V}}}-\log \frac{\exp \left(w f_{s}\left(i_{1}, i_{2}\right)\right)}{\sum_{v} \exp \left(w f_{s}\left(i_{1}, v_{2}\right)\right)}\\ \mathcal{L}_{\text {contra }}&=\mathcal{L}_{\text {query }}+\mathcal{L}_{\text {user }}+\mathcal{L}_{a d} \\ \mathcal{L}_{\text {total }}&=\mathcal{L}_{\text {link }}+\lambda_{1} \mathcal{L}_{\text {contra }}+\lambda_{2}\|\theta\|_{2}^{2} \end{aligned} LqueryLuserLadLcontra Ltotal =q1vqlogvexp(wfs(q1,v2))exp(wfs(q1,q2))=u1vu,vuVlogvexp(wfs(u1,v2))exp(wfs(u1,u2))=i1vi,viVlogvexp(wfs(i1,v2))exp(wfs(i1,i2))=Lquery +Luser +Lad=Llink +λ1Lcontra +λ2θ22

Deep Aggregation

第一阶段每个节点已经有一个embedding $X了,然后再一次采样图,对于每个节点,采样三个不同种类子图出来,比如target node是user,给这个节点采样三个子图出来,每个子图出了target node之外,分别只包含 user、query、item节点。

然后在已有子图的基础上,和SIGN那篇一样,直接将不同阶卷积的向量拼接起来 [ X , A X , A 2 X , A 3 X ] \left[X, A X, A^{2} X, A^{3} X\right] [X,AX,A2X,A3X] 作为模型的输入。但其实这里有误导的地方,应该是 1+3*3=10 个向量拼接起来,因为有三种子图,每个子图有三阶矩阵,所以实际应该是:
[ X , A 1 X , A 1 2 X , A 1 3 X , A 2 X , A 2 2 X , A 2 3 X , A 3 X , A 3 2 X , A 3 3 X ] \left[X, A_1X, A_1^{2} X, A_1^{3} X,A_2X, A_2^{2} X, A_2^{3} X,A_3X, A_3^{2} X, A_3^{3} X\right] [X,A1X,A12X,A13X,A2X,A22X,A23X,A3X,A32X,A33X]

CTR Prediction

图1.3,拼接好的向量分别送入双塔中,进行CTR预估。负样本是曝光未点击样本:
L C T R = ∑ ( − log ⁡ σ ( f s ( ( q , u ) , i c l k ) ) − ∑ k log ⁡ ( 1 − σ ( f s ( ( q , u ) , i p v k ) ) ) ) \mathcal{L}_{C T R}=\sum\left(-\log \sigma\left(f_{s}\left((q, u), i_{c l k}\right)\right)-\sum_{k} \log \left(1-\sigma\left(f_{s}\left((q, u), i_{p v}^{k}\right)\right)\right)\right) LCTR=(logσ(fs((q,u),iclk))klog(1σ(fs((q,u),ipvk))))

实验

在这里插入图片描述

DC-GNN-Pf和DC-GNN-Pt是指跳过Deep Aggregation,直接用pretrain的输出embedding输入CTR,然后fix或者fine-tuning embedding。


http://chatgpt.dhexx.cn/article/eYJKw2Pw.shtml

相关文章

(2019.01, iclr) Decoupled Weight Decay Regularization

code: https://github.com/loshchil/AdamW-and-SGDW 除了纯SGD, L2 ! weight_decay 背景知识: sgd with momentum和adam,详见《深度学习》: L2 regulization and weight decay: https://benihime91.github.io/blog/machinelearning/deeplearning/python3…

Decoupled Novel Object Captioner

Decoupled Novel Object Captioner AbstractIntroductionMethodsPreliminariesZero-Shot Novel Object Captioning.Sequence Model with the PlaceholderKey-Value Object MemoryFramework OverviewTraining Reference Reference[原文]: Joselynzhao.top & 夏木青 | Decoup…

Video Anomaly Detection by Solving Decoupled Spatio-Temp

Video Anomaly Detection by Solving Decoupled Spatio-Temp 什么是SSL? Self-Supervised Learning,又称为自监督学习什么是多标签分类问题: 一个数据有多个标签pretext 任务: 简单的来说,通过另一个任务简介完成主任务 比如,要训…

魔改YOLOv5/YOLOv7高阶版——改进之结合解耦头Decoupled_Detect

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨

Distilling Object Detectors via Decoupled Features

Abstract 相比于图像分类而言&#xff0c;目标检测器更加复杂&#xff0c;具有多个损失函数。而目前的的检测中&#xff0c;其主要将注意力集中在对象的区域中&#xff0c;但本文指出&#xff0c;从背景中提取的特征信息对于学生模型的学习也是必不可少的。且由于目标区域和背…

Decoupled Attention Network for Text Recognition

摘要&#xff1a; 最流行的文字检测的方法是注意力机制&#xff0c;但是大多数的注意力机制方法由于循环的对齐操作会导致严重的对齐问题。因为对齐操作依赖于历史解码信息。 本文提出的DAN将对齐操作与历史解码信息解耦。 原理&#xff1a; Connectionist temporal classifi…

涨点技巧:Detect系列---Yolov5/Yolov7加入解耦头Decoupled_Detect,涨点明显

目录 1. Decoupled Head介绍 2.Yolov5加入Decoupled_Detect 2.1 DecoupledHead加入common.py中&#xff1a; 2.2 Decoupled_Detect加入yolo.py中&#xff1a; 2.3修改yolov5s_decoupled.yaml 3.数据集下验证性能 &#x1f3c6; &#x1f3c6;&#x1f3c6;&#x1f3c6;&…

Decoupled Contrastive Learning 论文解读和感想

本文首先提出了当前对比学习的三大痛点&#xff1a; 1、当前的sota方法结构都过于复杂 2、对比学习要想取得效果&#xff0c;必须要用大batch 3、超参敏感(个人认为这里说的超参是指数据增强方式) 然后本文以SimCLR为例&#xff0c;通过对对比损失的梯度进行分析&#xff0c;发…

DECOUPLED WEIGHT DECAY REGULARIZATION

引言 Adam作为一个常用的深度学习优化方法&#xff0c;提出来的时候论文里的数据表现都非常好&#xff0c;但实际在使用中发现了不少问题&#xff0c;在许多数据集上表现都不如SGDM这类方法。 后续有许多工作针对Adam做了研究&#xff0c;之前整理过关于优化算法的发展历程&am…

Decoupled Dynamic Filter Networks

转载自:https://www.cnblogs.com/liuyangcode/p/14755924.html 对depth-wise的改进&#xff0c;将卷积核的参数改为根据输入变化的方式 Introduction 卷积缺点在于&#xff1a;内容不变&#xff0c;计算量高动态filter可以根据内容自适应&#xff0c;但是会提高计算量。depth…

Analyzing and Leveraging Decoupled L1 Caches in GPUs

introduction 我们都知道L1/L2/L3cache解决了内存墙的问题&#xff0c;但是作者分析出现有的缓存架构有着天然缺陷&#xff0c; 作者列出的many to few communication&#xff0c;也就是L1ache中大量的数据传输到L2cache中&#xff0c;可能对于L1cache的带宽使用率不是很高&a…

Decoupled network

Decoupled network https://zhuanlan.zhihu.com/p/37598903 神经网络机制存在的缺陷&#xff1f; 过拟合&#xff0c;梯度消失或者是膨胀&#xff0c;训练依靠大量样本&#xff0c;对网络初始化及其敏感记忆协迁移等等。 Decupled network是对operator的改进 现在的卷积操作…

Decoupled Knowledge Distillation论文阅读+代码解析

本文来自2022年CVPR的文章&#xff0c;论文地址点这里 一. 介绍 知识蒸馏&#xff08;KD&#xff09;的通过最小化师生预测对数之间的KL-Divergence来传递知识(下图a)。目前大部分的研究注意力都被吸引到从中间层的深层特征中提取知识。与基于logit的精馏方法相比&#xff0c…

令牌桶算法

一 算法 令牌桶算法和漏桶算法不同的是&#xff0c;有时后端能够处理一定的突发情况&#xff0c;只是为了系统稳定&#xff0c;一般不会让请求超过正常情况的60%&#xff0c;给容灾留有余地。但漏桶算法中后端处理速度是固定的&#xff0c;对于短时的突发情况&#xff0c;后端…

动态分区分配算法(1、首次适应算法 2、最佳适应算法 3、最坏适应算法 4、邻近适应算法)

文章目录 前言知识总览1、首次适应算法2、最佳适应算法3、最坏适应算法4、邻近适应算法知识回顾与重要考点 前言 此篇文章是我在B站学习时所做的笔记&#xff0c;大部分图片都是课件老师的PPT&#xff0c;方便复习用。此篇文章仅供学习参考。 提示&#xff1a;以下是本篇文章…

《算法4》读书笔记(一)

写在前面&#xff1a;配套网站algs4.cs.princeton.edu&#xff0c;可以把这个网站作为编程的时候的参考资料。这本书比较实用&#xff08;某瓣评分9.3&#xff09;&#xff0c;但没有动态规划部分&#xff0c;作为两三年没怎么碰过算法和数据结构的菜狗&#xff0c;看了《图解算…

《算法4》深入理解红黑树

红黑树是一种性能非常优秀的数据结构&#xff0c;关键在于它能保证最坏的性能也是对数的&#xff0c;主要是因为它是一种平衡的树&#xff0c;所以也叫平衡查找树。要理解红黑树&#xff0c;最好先看看我的上一篇博客《算法4》符号表以及二叉查找树&#xff0c;了解二叉查找树以…

【算法4总结】第四章:图

目录备份 第四章&#xff1a;图 概述 图可以根据是否有向和带权分成以下四种&#xff1a; 无向图 &#xff08;无向不带权&#xff09;有向图 &#xff08;有向不带权&#xff09;加权无向图&#xff08;无向带权&#xff09;加权有向图&#xff08;有向带权&#xff09; …

算法4(一、递归学习)

每次用递归都感觉有点难&#xff0c;这个趁着恶补基础知识的时候&#xff0c;专门看了一遍递归&#xff0c;算法4的。 1.1 递归介绍 方法可以调用自己&#xff0c;例如&#xff1a;下面给出了bin_search的二分查找的一种实现。&#xff08;算法4中使用的是Java&#xff0c;但…

【算法4总结】第一章:基础

目录备份 第一章&#xff1a;基础 我认为这一章主要介绍的是如何使用工具。 一共五节&#xff0c;前两节主要是对 Java 语法的回顾&#xff0c;第三节则是三个数据结构&#xff0c;背包&#xff0c;队列和栈的API讲解。 而第四节是讲解的是如何分析算法。第五节则是针对具体…