尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

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

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),仅供参考
返回列表