首页/新闻资讯/正文详情

DGL 实现 CARE-GNN:面向伪装欺诈检测器的抗伪装图神经网络实战指南

发布时间:2026/9/23 4:33:10 来源:云帆数科 栏目:资讯中心
DGL 实现 CARE-GNN:面向伪装欺诈检测器的抗伪装图神经网络实战指南
人工智能机器学习深度学习图计算【免费下载链接】dglPython package built to ease deep learning on graph, on top of existing DL frameworks.项目地址https://gitcode.com/gh_mirrors/dg/dgl点击查看免费下载本文基于 DGL 官方仓库中的 caregnn 示例完整讲解 CAmouflage-REsistant GNNCARE-GNN这一面向欺诈检测的图神经网络模型的原理、数据集、训练脚本与性能复现方法。读完本文你将掌握如何在 DGL 中加载 FraudDataset 内置欺诈数据集Amazon / YelpChi运行全图版与采样版两套训练管线并理解其基于强化学习的相似度门控机制在源码中的具体实现。一、模型背景伪装欺诈检测为什么需要 CARE-GNNCARE-GNNCAmouflage-REsistant GNN由论文 Enhancing Graph Neural Network-based Fraud Detectors against Camouflaged FraudstersCIKM20提出。在电商评论与金融反欺诈场景中欺诈者fraudster会通过伪装行为隐藏自身与真实受害者之间的紧密关系例如伪造大量同评分、同时段、同商品的关联导致普通 GNN 的邻居聚合被噪声邻居污染。CARE-GNN 的核心思想是对每个关系类型relation/edge type上的邻居进行相似度门控采样只聚合与中心节点最相似的 Top-p% 邻居引入一个强化学习RL模块在训练过程中动态调整每个关系类型的采样比例 p使得模型能够自适应地抑制被伪装的关系同时保留信息量高的关系。DGL 示例由 Kay Liu 在 AWS 上海 AI Lab 的 SDE 实习期间实现示例代码位于 examples/pytorch/caregnn其中包含两套可独立运行的训练入口main.py全图训练与 main_sampling.py邻居采样训练。二、依赖环境README 中给出的示例开发环境如下以当前仓库版本运行时代码为准示例本身面向 DGL 0.7.x 设计Python 3.7.10PyTorch 1.8.1dgl 0.7.1scikit-learn 0.23.2其中 scikit-learn 用于计算recall_score与roc_auc_score两项评价指标见 main.pyPyTorch 承担模型构建与优化DGL 提供异构图数据结构与消息传递原语。三、数据集DGL 内置 FraudDataset两个数据集均为 DGL 内置的 FraudDataset位于dgl.data.FraudDataset是从真实工业数据构建的多关系图multi-relational graph每个图只有一个节点类型包含三种关系类型具有类别不均衡与特征不一致等真实噪声特性。图的构建逻辑在 fraud.py读取.mat原始文件中的三个邻接矩阵分别以(node_type, relation, node_type)的三元组构造dgl.heterograph并注入feature、label与train_mask/val_mask/test_mask。Amazon虚假用户检测节点11,944user边U-P-U351,216共同购买过同一商品U-S-U7,132,958一周内给出相同星级评分U-V-U2,073,474评论文本 TF-IDF 相似度位居前 5%类别Positive欺诈821Negative良性7,818Unlabeled 3,305正负比1 : 10.5节点特征维度25YelpChi虚假评论检测节点45,954review边R-U-R98,630同一用户发布的评论R-T-R1,147,232同一商品同月发布的评论R-S-R6,805,486同一商品相同星级评分的评论类别Positive垃圾评论6,677Negative正常评论39,277正负比1 : 5.9节点特征维度32值得注意的是FraudDataset的默认划分参数为 train_size0.7、val_size0.1、random_seed717而本示例在 main.py 中通过dgl.data.FraudDataset(args.dataset, train_size0.4)将训练集比例调整为 0.4测试集约为 0.5。数据集的划分实现见 fraud.py其中 Amazon 数据集中索引 0~3304 的未标注节点会被排除在划分之外。数据集会按(random_seed, train_size, val_size)生成哈希键并缓存到本地见 fraud.py。四、全图训练版main.py4.1 训练流程概览main.py 的main()分为四步数据准备加载FraudDataset取出图、特征、标签与三类 mask从 mask 中解析出 train/val/test 节点索引此外还专门提取正类训练节点索引rl_idx用于驱动强化学习模块main.py。模型构建以特征维度、类别数、隐藏维度、层数、激活函数tanh、RL 步长与图的全规范边类型graph.canonical_etypes构造CAREGNN。训练组件由于类别不均衡损失函数使用按类别计数加权的 CrossEntropyLoss——th.nn.CrossEntropyLoss(weight1 / cnt)优化器为 Adamlr0.01weight_decay0.001开启--early-stop时创建 patience100 的 EarlyStopping。训练循环每轮前向得到logits_gnn, logits_sim两个输出总损失为CE(logits_gnn) sim_weight * CE(logits_sim)随后调用model.RLModule(graph, epoch, rl_idx)更新各关系的采样比例 p若启用 early stopping则在验证 AUC 连续 100 轮不提升时终止训练并将最优权重保存到es_checkpoint.pt。训练、验证与测试均基于 sklearn 的recall_score正类召回与roc_auc_scoreAUC使用 softmax 后的正类概率输出格式如Epoch 0, Train: Recall: 0.xxxx AUC: 0.xxxx Loss: x.xxxx | Val: Recall: 0.xxxx AUC: 0.xxxx Loss: x.xxxx4.2 全部命令行参数参数类型默认值说明--datasetstramazon数据集名称可选yelp或amazon--gpuint-1GPU 索引-1 表示使用 CPU--hid_dimint64隐藏层维度--num_layersint1CARE-GNN 层数--max_epochint30最大训练轮数--lrfloat0.01学习率--weight_decayfloat0.001权重衰减--step_sizefloat0.02RL 动作步长论文公式中的 λ2--sim_weightfloat2相似度损失权重论文公式中的 λ1--early-stopflagFalse是否启用早停4.3 运行方式在examples/pytorch/caregnn目录下执行# 全图训练 早停默认 Amazon python main.py --early-stop # 使用 GPU python main.py --gpu 0 # 切换为 Yelp 数据集 python main.py --dataset yelp # 组合使用 python main.py --dataset yelp --gpu 0 --early-stop --num_layers 2 --hid_dim 128程序入口在启动训练前会调用th.manual_seed(717)main.py保证结果可复现。五、模型结构源码解析model.py5.1 CAREConv单层卷积CAREConv 是 CARE-GNN 的核心单层实现在__init__中为每个边类型维护四个状态p[etype] 0.5当前采样比例初始为 0.5即保留 Top 50% 相似邻居last_avg_dist[etype] 0上一轮该关系的平均相似度距离f[etype] []RL 动作历史1/-1 序列cvg[etype] False该关系的 RL 是否已收敛。单层前向传播对应论文公式 8、9model.py对每个规范边类型etype通过g.apply_edges(self._calc_distance, etypeetype)计算邻居距离。_calc_distance对应论文公式 2d || tanh(MLP(h_src)) - tanh(MLP(h_dst)) ||_1即用 MLP 嵌入后的 L1 距离度量中心节点与邻居的相似度距离越小越相似。调用_top_p_sampling按比例 p 保留距离最小的前ceil(in_degree * p)条入边。当前实现基于np.argpartition完成部分排序代码注释说明其效率较低可优化方向是 DGL 的dgl.sampling.select_top_p。对采样后的边执行g.send_and_recv用fn.copy_u(h,m)fn.mean(m,h_etype)完成按边类型聚合。关系间聚合将各关系的聚合结果按 p 加权求和h_homo Σ hr * p再加上中心节点自身特征feat经激活后通过self.linear线性投影输出。这段实现了论文公式 9 的均值型 inter-relation aggregator此处权重即 RL 输出的 p。5.2 CAREGNN多层堆叠与 RL 模块CAREGNN 负责按num_layers堆叠CAREConv单层时直接输出类别数维度多层时按输入层(hid_dim)→中间层(hid_dim)→输出层(num_classes)的结构组织。前向传播返回两个输出featGNN 主分支的 logitssimtanh(self.layers[0].MLP(feat))即公式 4 定义的相似度学习分支输出用于辅助损失。RLModulemodel.py实现了论文公式 5~7 的强化学习更新对每个尚未收敛的 (layer, etype) 组合取正类训练节点rl_idx的入边距离均值avg_dist公式 5若last_avg_dist avg_dist距离变大说明该关系噪声增多则 p 减小step_size下限为 0公式 6并记录动作 -1否则 p 增大step_size上限为 1并记录动作 1当epoch 9且最近 10 个动作之和的绝对值 2时判定该关系 RL 已收敛此后不再调整公式 7。六、采样训练版main_sampling.py6.1 与全图版的差异README 中特别注明采样版本根据 DGL NodeDataLoader 的特性做了修改——论文公式 2 中原本使用最后一层嵌入计算相似度本采样版改用当前层在上一轮 epoch 得到的嵌入来度量中心节点与邻居的相似度。这一改动是为了适应 mini-batch 采样场景下无法直接获得全图多层嵌入的现实约束。6.2 CARESampler 采样器model_sampling.py 定义了CARESampler继承自dgl.dataloading.BlockSamplersample_frontier中对每个边类型基于上轮缓存的距离矩阵dists与当前 p 值为每个种子节点挑选ceil(in_degree * p)条距离最小的入边生成边掩码后通过dgl.edge_subgraph构造 frontiersample_blocks自底向上reversed(range(num_layers))逐层采样并用dgl.to_block将 frontier 转为 message-passing block同时保留原始边 IDdgl.EID供 RL 模块查询。6.3 训练流程main_sampling.py 每轮 epoch 开始时main_sampling.py对每个层 i、每个边类型计算距离dist[etype] L1(tanh(MLP(feat_i)))缓存在dists中用当前 p 构造CARESampler通过dgl.dataloading.DataLoader以batch_size256、shuffleTrue构建训练/验证/测试 mini-batch逐 batch 前向、计算加权 CE 损失并反向更新每轮结束后调用model.RLModule(graph, epoch, rl_idx, dists)更新 p 值。采样版额外提供--batch_size默认 256与--num_workers默认 4两个参数在 GPU 模式下会将num_workers强制设为 0main_sampling.py。6.4 运行方式# 默认以 Amazon 全图版同参数运行采样训练 python main_sampling.py # 常用组合 python main_sampling.py --dataset yelp --gpu 0 --early-stop --batch_size 512七、早停机制utils.pyutils.py 中的EarlyStopping类以验证 AUC 为监控指标当指标不升反降时计数 1连续patience轮示例中为 100不提升即触发早停每当验证指标刷新最优值时将当前模型权重保存为es_checkpoint.pt测试阶段直接加载该最优权重main.py、main_sampling.py。八、性能复现结果README 中报告的结果遵循论文设定在30 个 epoch 内取最佳验证结果随机种子统一为seed717论文原报告未给出测试集结果用-表示。以下为论文、DGL 全图版与 DGL 采样版在 Amazon 与 Yelp 上的 AUC / Recall 对比DatasetAmazonYelpMetric (val / test)Max Epoch 30Max Epoch 30AUC (val/test) — paper reported0.8973 / -0.7570 / -AUC (val/test) — DGL full graph0.8849 / 0.89220.6856 / 0.6867AUC (val/test) — DGL sampling0.9350 / 0.93310.7857 / 0.7890Recall (val/test) — paper reported0.8848 / -0.7192 / -Recall (val/test) — DGL full graph0.8615 / 0.85440.6667 / 0.6619Recall (val/test) — DGL sampling0.9130 / 0.90450.7537 / 0.7540从表中可以看到DGL 采样版在两个数据集上的 val/test AUC 与 Recall 均高于全图版与论文原始报告值。需要说明的是这些数字是该示例在特定环境与seed717下的复现结果实际运行受硬件、DGL/PyTorch 版本与随机种子影响可能存在合理波动。九、在仓库中继续深入caregnn 示例目录main.py/model.py/main_sampling.py/model_sampling.py/utils.py全部源码FraudDataset 数据集实现数据集下载、异构图构造、划分与缓存逻辑DGL 文档指南中文版与 异构图消息传递 API理解apply_edges、send_and_recv、canonical_etypes等本示例高频使用的接口。使用提示运行示例前请确认 DGL 与 PyTorch 环境已正确安装数据集首次加载时会自动从 DGL 官方数据源下载约几百 MB 量级FraudDataset会按划分参数缓存处理后的二进制图文件见 fraud.py重复运行无需重新下载若需调整数据划分可修改train_size/val_size/random_seed参数以控制缓存键。赞分享人工智能机器学习深度学习图计算【免费下载链接】dglPython package built to ease deep learning on graph, on top of existing DL frameworks.项目地址https://gitcode.com/gh_mirrors/dg/dgl点击查看免费下载相关推荐如何在macOS Finder中实现视频文件的完美预览QLVideo终极指南如何在macOS Finder中实现视频文件的完美预览QLVideo终极指南 QLVideo 是一款专为macOS设计的开源视频扩展工具它让Finder能够音视频桌面应用终极指南如何用curl-impersonate突破网站指纹检测完美伪装Chrome和Firefox浏览器终极指南如何用curl impersonate突破网站指纹检测完美伪装Chrome和Firefox浏览器 curl impersonate是一个特殊的cur网络安全网络开发工具DGL 中的 APPNPPersonalized PageRank 图神经网络MXNet 实现与实战指南DGL 中的 APPNPPersonalized PageRank 图神经网络MXNet 实现与实战指南 导读 APPNPApproximate Pers人工智能机器学习深度学习图计算创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Markowitz与遗传算法:Python投资组合优化的实践与避坑指南
Markowitz与遗传算法:Python投资组合优化的实践与避坑指南

简介:投资组合优化是资产管理的重要课题,该资源以Markowitz均值-方差模型和遗传算法为主线,提供可直接运行的Python代码与配套文档,适合金融量化初学者、算法研究者和需要落地资产配置策略的开发者。资源包共59个文件,… · 2026/9/23 4:33:04

pandoc revealjs 幻灯片输出的 slide-level 机制与嵌套分节结构实战解析
pandoc revealjs 幻灯片输出的 slide-level 机制与嵌套分节结构实战解析

文档开发工具CLI 【免费下载链接】pandoc Universal markup converter 项目地址: https://gitcode.com/gh_mirrors/pa/pandoc 点击查看 免费下载 导读 本文围绕 pandoc 官方命令测试用例 test/command/8098.md 展开,深入剖析 pandoc 生成 reveal.js 幻… · 2026/9/23 4:33:04

浏览器安全设置完全指南:从站点隔离到扩展权限的主动防御
浏览器安全设置完全指南:从站点隔离到扩展权限的主动防御

1. 从“默认能用”到“主动可控”:为什么浏览器安全设置值得花时间大多数人装完浏览器之后,几乎不会主动打开设置页面看一眼。默认配置确实能应付日常浏览,但默认配置的设计目标是“让最多的人不出问题”,而不是“让每个人都不出问… · 2026/9/23 4:33:04

5个坑让英语新概念第一册项目性能优化慢3倍
5个坑让英语新概念第一册项目性能优化慢3倍

5个坑让英语新概念第一册项目性能优化慢3倍 学会语法却不知怎么搭项目,这是无数开发者卡脖子的地方。你以为背下API就能写代码?现实是,你写的逻辑在真机上跑起来,帧率掉得比工资还快。性能优化不是玄学,是工程习惯。… · 2026/9/23 9:22:29

【单片机课程设计/毕业设计】基于 STM32 或 51 单片机的人体体征实时采集与超限声光预警系统 基于 STM32 或 51 单片机的健康参数采集与移动端数据查看系统设计(024108)
【单片机课程设计/毕业设计】基于 STM32 或 51 单片机的人体体征实时采集与超限声光预警系统 基于 STM32 或 51 单片机的健康参数采集与移动端数据查看系统设计(024108)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️… · 2026/9/23 9:22:29

OpenClaw 多模态输出时序协调:TaoToken 统一 Key 下的生成模块编排与验证
OpenClaw 多模态输出时序协调:TaoToken 统一 Key 下的生成模块编排与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/23 9:22:23

张忆芬视角下Java与Go异常处理一文搞懂
张忆芬视角下Java与Go异常处理一文搞懂

张忆芬视角下Java与Go异常处理一文搞懂 报错一堆看不懂 StackTrace?别慌,张忆芬老师常挂在嘴边的“工程化思维”今天落地到代码里。Java 的异常像堆栈里的迷宫,Go… · 2026/9/23 9:22:16

5个源码解析技巧助你搞定英语演讲面试
5个源码解析技巧助你搞定英语演讲面试

5个源码解析技巧助你搞定英语演讲面试 看了一堆教程还是不会写项目?别慌,这不仅是代码逻辑的问题,更是思维模型没打通。很多工程师在准备面试时,面对“英语演讲”这类看似非技术的问题,往往卡壳。其实, 英语演讲… · 2026/9/23 9:22:09

ChatGPT Codex 试用心得:从 dotnet 项目 PR 到 TaoToken 配置的码农助手实测
ChatGPT Codex 试用心得:从 dotnet 项目 PR 到 TaoToken 配置的码农助手实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/23 9:21:55

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码