“异构小图神经网络”算法(Heterogeneous Mini-Graph Neural Network,简称 HMGNN)。其中小图(mini-graph)指拉新场景中存在的大量小规模子图。HMGNN 首先引入了“超点”的概念,将零散的小图连接起来,便于节点间的信息传递与共享;然后引入了注意力机制,以区别不同连接关系之间的重要性;最后,透传原始特征有效防止了梯度消失或爆炸。
构建超图(Hyper-Graph)
零散的小图不利于图中节点间的信息共享,因此 HMGNN 在真实的节点和边的基础上,加入了“超点”(hyper-node)及更多的边构成超图(hyper-graph)。每个子图都会生成一个虚拟的超点,其特征向量是子图中所有的节点的特征向量的平均值。因此,超点可以看作整个子图的代表。
为了完成超图的构建,开发团队新增了两种边:超点和普通点之间的边、超点和超点之间的边。首先,将超点与所属子图中每个普通节点连接起来。这么做保证了信息传递的无偏性。然后,超点之间使用kNN算法,找到与每个超点最相似的k个超点,也建立起连接。这样,整个图的联通性就大大提升了,节点间的特征能得到更充分的传播,图 1 描述了超点的生成过程。
图 1:超点的生成过程。图中展示三种类型的边,超点之间的边(红色)、普通点之间的边(灰色)、超点和普通点的边(绿色)。
该团队在论文中证明了,上述过程构建的超图在很大概率是联通的。并且该过程可通过控制kNN算法的超参数k,控制超图的联通程度。
异构图卷积
拉新场景的图结构包含多种边的关系,不同的关系的强弱、形成的拓扑结构、与标注的相关性等都不一样。于是 HMGNN 使用多种关系,建立了多个图,再利用注意力机制,把多个图的结果聚合起来。这样模型就能学习到不同关系图的权重。图 2 描述了注意力机制的引入方式。
在模型训练时,HMGNN 在每个卷积层的输出中,加入了原始特征矩阵,一起作为下一卷积层的输入。这种类似于 ResNet 的做法,在使用较多卷积层的模型中,能够有效防止梯度消失或爆炸,在实际实验中也取得了更好的分类效果。图 2 也描述了原始特征的透传过程。
图 2:HMGNN 的整体架构。左边部分阐述了超点的生成过程。我们将不同子图的超点构成的特征矩阵,拼接到原始的特征矩阵上,作为神经网络的输入特征矩阵。中间和右边部分阐述了基于注意力机制的异构卷积过程。我们在每个卷积层透传了原始特征矩阵,防止梯度消失或爆炸。
性能
爱奇艺方面给出的数据称,他们在爱奇艺某业务的数据集上对比了线性模型、树模型、图卷积模型和 HMGNN 模型。下表展示实验数据,从各项指标来说,HMGNN 都优于其他模型。
此外,其还基于公开数据集 Cora 对比了原始 GCN 模型与 HMGNN 的效果。并表示,从训练收敛速度和准确率来看,HMGNN 都要优于 GCN。
在 Cora 上对比 HMGNN 和 GCN
HMGNN 是第一个尝试通过图神经网络对欺诈邀请进行检测的方法。在 GCN 和异构图神经网络的基础上,HMGNN 使用超图和异构图卷积克服了小图和异构图带来的问题。并在实际拉新场景中取得了不错的效果。
开发团队表示,他们还在尝试将其应用到更广阔的场景中,比如金融反欺诈、关注&点赞反作弊等问题。
我已经实现了下面的神经网络来解决Python中的异或问题。我的神经网络由3个神经元的输入层、1个2个神经元的隐层和1个神经元的输出层组成。我使用Sigmoid函数作为隐藏层和输出层的激活函数: backpropogation似乎是正确的,但我一直得到这个错误,所有的值都变成了“nan”,输出: 你能帮我解决这个问题吗?谢谢你。
在过去的几天里,我开始使用deeplearning4j库,我遇到了一个问题。 我的测试和输入数据由25个二进制值组成。训练集包含40行。网络有4个输出值。我的目标是训练网络有尽可能少的错误。 我的神经网络配置: 我会非常感激任何帮助。问候,
神经网络 (Neural Network) 是机器学习的一个分支,全称人工神经网络(Artificial Neural Network,缩写 ANN),是一种模仿生物神经网络的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。 Perceptron (感知器) 一个典型的神经网络由输入层、一个或多个隐藏层以及输出层组成,其中箭头代表着数据流动的方向,而圆圈代表激活函数(最常用的激活函数为
译者:bat67 最新版会在译者仓库首先同步。 可以使用torch.nn包来构建神经网络. 我们以及介绍了autograd,nn包依赖于autograd包来定义模型并对它们求导。一个nn.Module包含各个层和一个forward(input)方法,该方法返回output。 例如,下面这个神经网络可以对数字进行分类: 这是一个简单的前馈神经网络(feed-forward network)。它接受一
我实现了以下神经网络来解决Python中的异或问题。我的神经网络由2个神经元的输入层、1个2个神经元的隐藏层和1个神经元的输出层组成。我使用Sigmoid函数作为隐藏层的激活函数,使用线性(恒等式)函数作为输出层的激活函数: 反向传播似乎都是正确的;我想到的唯一问题是我在实现偏差单位时遇到的一些问题。无论哪种方式,每次运行代码时,每个输入的所有谓词都会收敛到大约0.5。我仔细检查了代码,似乎找不到
我创建了一个神经网络,其结构如下: Input1-Input2-输入层。 N0-N1-隐藏层。每个节点3个权重(一个用于偏移)。 N2——输出层。3个砝码(一个用于偏置)。 我正在尝试使用以下测试数据对其进行XOR函数训练: 0 1-期望结果:1 1 0-期望结果:1 0 0-所需结果:0 1 1-所需结果:0 训练后,测试的均方误差(当寻找1结果时){0,1}=0,我认为这很好。但是测试的均方误
我试图用两个感知器网络做一个异或门,但由于某种原因,网络没有学习,当我在图中绘制误差的变化时,误差达到一个静态水平,并在该区域振荡。 目前我没有给网络添加任何偏见。 这是错误随着学习轮数的变化而变化。这是正确的吗?红色线是我所期望的错误将如何改变的线。
我用两个输出神经元会得到更好的结果吗?(一个激活为“是音乐”,另一个激活为“不是音乐”)。 (您可以在这里看到这方面的C++源代码:https://github.com/mcmenaminadrian/musonet--尽管在任何给定的时间,公开回购中的内容可能并不完全是我在机器上使用的内容。)