GNN入门必看!Google Research教你如何从毛坯开始搭建sota 图神经网络(下)

简介: 图神经网络近几年的发展十分火热,主要原因还是图能够表示连通关系,例如知识图谱等更贴切现实应用!Google Research最近发了一篇博客,从零开始教学GNN的发展路程,不熟悉的同学可以查缺补漏啦!

与神经网络模块或层一样,我们可以将这些GNN层堆叠在一起。

 

由于GNN不会更新输入图的连通性,因此可以使用与输入图相同的邻接列表和相同数量的特征向量来描述GNN的输出图。

 

构建了一个简单的GNN后,下一步就是考虑如何在上面描述的任务中进行预测。

 

首先考虑二分类的情况,这个框架也可以很容易地扩展到多分类或回归情况。如果任务是在图节点上进行二分类预测,并且图已经包含节点信息,那么对于每个节点embedding应用线性分类器即可。

28.jpg

实际情况可能更复杂,例如图形中的信息可能存储在边中,而且节点中没有信息,但仍然需要对节点进行预测。所以就需要一种从边收集信息并将其提供给节点进行预测的方法。

 

可以通过Pooling来实现这一点。Pooling分两步进行:对于要池化的每个item,收集它们的每个embedding并将它们连接到一个矩阵中,通常通过求和操作聚合收集的embedding。

29.jpg

更复杂地,可以通过在 GNN 层内使用池化来进行更复杂的预测,以使学习到的embedding更了解图的连通性。可以使用消息传递(Message Passing)来做到这一点,其中相邻节点或边缘交换信息并影响彼此更新的embedding。

 

消息传递包含三个步骤:

1、对于图中的每个节点,收集所有相邻节点embedding(或消息)。

2、通过聚合函数(如sum)聚合所有消息。

3、所有汇集的消息都通过一个更新函数传递,通常是一个学习的神经网络。

 

这些步骤是利用图的连接性的关键,还可以在GNN层中构建更复杂的消息传递变体,以产生更高表达能力的GNN模型。

 

30.jpg本质上,消息传递和卷积是聚合和处理元素的邻居信息以更新元素值的操作。在图中,元素是节点,在图像中,元素是像素。然而,图中相邻节点的数量可以是可变的,这与图像中每个像素都有一定数量的相邻元素不同。通过将传递给GNN层的消息堆叠在一起,节点最终可以合并整个图形中的信息

31.jpg节点学习完embedding后的下一步就是边。在真实场景中,数据集并不总是包含所有类型的信息(节点、边缘和全局上下文),当用户想要对节点进行预测,但提供的数据集只有边信息时,在上面展示了如何使用池将信息从边路由到节点,但也仅局限在模型的最后一步预测中。除此之外,还可以使用消息传递在GNN层内的节点和边之间共享信息。

 

可以采用与之前使用相邻节点信息相同的方式合并来自相邻边缘的信息,首先合并边缘信息,使用更新函数对其进行转换并存储。

 

但存储在图中的节点和边信息不一定具有相同的大小或形状,因此目前还没有一种明确有效的方法来组合他们,一种比较好的方法是学习从边空间到节点空间的线性映射,反之亦然。或者,可以在update函数之前将它们concatenate在一起。

 

32.jpg
最后一步就是获取全局的节点、边表示。

 

之前所描述的网络存在一个缺陷:即使多次应用消息传递,在图中彼此不直接连接的节点可能永远无法有效地将信息传递给彼此。对于一个节点,如果有k层网络,那么信息最多传播k步。

 

对于预测任务依赖于相距很远的节点或节点组的情况,这可能是一个问题。一种解决方案是让所有节点都能够相互传递信息。但不幸的是,对于大型的图来说,所需要的计算成本相当高,但在小图形中已经可以有所应用。

 

这个问题的一个解决方案是使用图(U)的全局表示,它有时被称为主节点或上下文向量。该全局上下文向量连接到网络中的所有其他节点和边,并可以作为它们之间传递信息的桥梁,为整个图形建立表示。这可以创建一个比其他方法更丰富、更复杂的图形表示。


33.jpg从这方面来看,所有的图形的属性都已经学习到了对应的表示,因此可以通过调整感兴趣的属性相对于其余属性的信息在池中利用它们。例如对于一个节点,可以考虑来自相邻节点、连接边和全局信息的信息。为了将新节点嵌入到所有这些可能的信息源上,还可以简单地将它们连接起来。此外,还可以通过线性映射将它们映射到同一空间,并应用特征调节层(feature-wise modulation layer)。34.jpg

通过上述流程,相信大家已经对简单的GNN如何发展为sota模型有了了解。在获取图的节点、边表示后,就可以为之后的任务再单独设计网络,GNN为神经网络提供了一种处理图数据的方式。

 

在原文博客中,还包括一些GNN的真实案例和数据集,并了解GNN在其中的具体作用,想了解更多内容可以访问参考链接进行阅读。



相关文章
|
2月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
3天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习入门案例:运用神经网络实现价格分类
深度学习入门案例:运用神经网络实现价格分类
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门与实践
【8月更文挑战第62天】本文以浅显易懂的方式介绍了深度学习领域中的核心技术之一——卷积神经网络(CNN)。文章通过生动的比喻和直观的图示,逐步揭示了CNN的工作原理和应用场景。同时,结合具体的代码示例,引导读者从零开始构建一个简单的CNN模型,实现对图像数据的分类任务。无论你是深度学习的初学者还是希望巩固理解的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
|
2月前
|
机器学习/深度学习 人工智能 算法
深度学习中的卷积神经网络(CNN)入门与实践
【9月更文挑战第19天】在这篇文章中,我们将探索深度学习的一个重要分支——卷积神经网络(CNN)。从基础概念出发,逐步深入到CNN的工作原理和实际应用。文章旨在为初学者提供一个清晰的学习路径,并分享一些实用的编程技巧,帮助读者快速上手实践CNN项目。
|
2月前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习入门:理解卷积神经网络(CNN)
【9月更文挑战第14天】本文旨在为初学者提供一个关于卷积神经网络(CNN)的直观理解,通过简单的语言和比喻来揭示这一深度学习模型如何识别图像。我们将一起探索CNN的基本组成,包括卷积层、激活函数、池化层和全连接层,并了解它们如何协同工作以实现图像分类任务。文章末尾将给出一个简单的代码示例,帮助读者更好地理解CNN的工作原理。
53 7
|
1月前
|
机器学习/深度学习 存储 自然语言处理
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
|
1月前
|
机器学习/深度学习 PyTorch API
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
|
2月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【9月更文挑战第10天】神经网络是开启人工智能大门的钥匙,不仅是一种技术,更是模仿人脑思考的奇迹。本文从基础概念入手,通过Python和TensorFlow搭建手写数字识别的神经网络,逐步解析数据加载、模型定义、训练及评估的全过程。随着学习深入,我们将探索深度神经网络、卷积神经网络等高级话题,并掌握优化模型性能的方法。通过不断实践,你将能构建自己的AI系统,解锁机器学习的无限潜能。
42 0
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门
【8月更文挑战第31天】在人工智能的浪潮中,深度学习以其强大的数据处理能力成为时代的宠儿。本文将引导你走进深度学习的核心组件之一——卷积神经网络(CNN),并带你一探其背后的奥秘。通过简明的语言和直观的代码示例,我们将一起构建一个简易的CNN模型,理解它在图像处理领域的应用,并探索如何利用Python和TensorFlow实现它。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。

热门文章

最新文章